Answers:
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.
: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
) 。
let
通过执行操作来设置vim的内部选项let &{option name}=value