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

此外,日晒过的vim颜色方案对let g:blabla...表示g:在这种情况下有何意义?

评论

stackoverflow.com/questions/9990219/…

#1 楼

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.


评论


请注意,您可以通过let&{option name} = value来使用let设置vim的内部选项。

–EvergreenTree
15年4月30日在16:51

#2 楼

: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"可以将自己的bin目录附加到Some text环境变量,该目录传递给Vim执行的任何外部命令(适用于任何环境变量)。

尽管"ap具有一些相当强大的功能(例如:let $PATH = $PATH . ":/home/me/bin"将环境变量设置为当前缓冲区的文件名),它不知道设置是布尔值,因此它不像PATH那样提供很好的访问或错误检查。

最后,它是关于使用最佳工具完成工作的。如果您只想修改选项,请使用let。如果要在寄存器,选项,变量之间移动信息,或者要根据表达式的结果来确定值,则:let $MYFILE = @%是您的工具。

尽管您明确询问了Vim,但要注意的另一件事是:set在vi / Vim系列中更为常见,而:set则较不常见(例如,nvi没有:let命令,而viemu不提供对Vim的访问权限)通过:set进行注册)。