let和set有什么区别?


29

我不太了解Vim背后的理论。好像我们set有些变量,还有let其他变量。有什么区别,什么时候需要一个?

此外,日晒过的vim色彩设计说明这种情况let g:blabla...的意义是g:什么?

Answers:


35

let给变量赋值,并set给Vim的内部选项之一赋值。

例如,您将使用

:let mystring='Hello!'

声明一个新变量,但是您将使用

:set tabstop=4

要么

:set expandtab

设置Vim的选项之一。

另请参阅::help let:help set

g:简单地表示一个全局变量。这些“变量名称空间”有几种-来自:help internal-variables

        (nothing) In a function: local to a function; otherwise: global
|buffer-variable|    b:   Local to the current buffer.
|window-variable|    w:   Local to the current window.
|tabpage-variable|   t:   Local to the current tab page.
|global-variable|    g:   Global.
|local-variable|     l:   Local to a function.
|script-variable|    s:   Local to a |:source|'ed Vim script.
|function-argument|  a:   Function argument (only inside a function).
|vim-variable|       v:   Global, predefined by Vim.

8
请注意,您可以let通过执行操作来设置vim的内部选项let &{option name}=value
EvergreenTree

11

:set用于内部选项,并处理选项的类型。它允许诸如反转布尔选项(例如:set invpaste)之类的操作,以从列表中添加和删除设置(例如:set dictionary-=/tmp/myfile)。

:let,另一方面,允许访问的在vim多变的东西,包括定期变量,选项,寄存器等,并且值是集过多是计算表达式的结果,而不是像一个简单的值:set,该装置:let使您可以访问数学,字符串操作和函数。

例如,您可以:let &dictionary=/tmp/myfile将选项设置'dictionary'/tmp/myfile(从而修改:set示例中上面显示的相同选项)

您可以使用设置全局变量:let g:myvar=42。您询问的前缀提供了范围。Doorknob的答案很好地涵盖了范围。

您可以:let @a="Some text"将register a的内容更改为contains Some text,您可以稍后将其粘贴"ap

您可以:let $PATH = $PATH . ":/home/me/bin"将自己的bin目录附加到PATH环境变量,该目录将传递给Vim执行的任何外部命令(这适用于任何环境变量)。

尽管let具有一些非常强大的功能(例如:let $MYFILE = @%将环境变量设置为当前缓冲区的文件名),但它不知道设置是布尔值,因此它不像以前那样提供良好的访问或错误检查:set

最后,这是关于使用最佳工具来完成工作的。如果您只想修改一个选项,:set则是您的工具。如果要在寄存器,选项,变量之间移动信息,或者要根据表达式的结果来确定值,那么这:let就是您的工具。

尽管您明确询问了Vim,但要注意的另一件事是,:set在vi / Vim系列中:let更常见,而在不那么常见的地方(例如,nvi没有let命令,而viemu不通过提供对寄存器的访问let) 。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.