Ren*_*ger 135
:set用于设置选项,:let用于为变量赋值.
碰巧,选项的值链接到a前面的选项名称&(该&option-name构造的行为与"普通"变量非常相似).所以,以下是等价的:
:set tw=40
:let &tw=40
Run Code Online (Sandbox Code Playgroud)
但是,例如,:let g:foo=50使用:set命令无法为全局变量foo()分配50 (因为g:foo是变量而不是选项).
有些选项是布尔值的.设置这些时,不需要任何值(如同:set noic和相反:set ic).
seh*_*ehe 20
Set是一个更加用户友好的界面,专门用于选项
例如
:verbose set
Run Code Online (Sandbox Code Playgroud)
显示所有有效的选项.
:set tw=40
Run Code Online (Sandbox Code Playgroud)
将作为速记 set textwidth=40
:set wrap&
Run Code Online (Sandbox Code Playgroud)
将设置选项的默认值wrap
:set nowrap
Run Code Online (Sandbox Code Playgroud)
将取消选项
:set wrap!
Run Code Online (Sandbox Code Playgroud)
将切换选项
最重要的是,
:setTab #获取标签!
以上几点可以(轻松)实现let.
扩展了人们所写的内容:let,我注意到它可以用来将一个变量中的值赋给一个选项,这:set是不可能做到的.例如,该功能使用let在全局变量赋值orig_tw的textwidth选项:
" Toggle Autowrap
" Default of 72 but can be overridden by tw settings in other vimrc files
let g:orig_tw = 72
function Toggle_autowrap_mode()
if &textwidth == 0
" Must use let instead of set here in order for g:orig_tw to be
" evaluated properly
let &textwidth = g:orig_tw
echo "Autowrap mode on tw=" . &textwidth
else
let g:orig_tw = &textwidth
set textwidth=0
echo "Autowrap mode off tw=" . &textwidth
endif
endfunction
noremap _A :call Toggle_autowrap_mode()<CR>
Run Code Online (Sandbox Code Playgroud)
:set只适用于选项,而sehe的答案展示了一些很好的用法示例.
:let另一方面,几乎可以做任何:set可以做的事情,还有更多.它可以赋值给
let vi = 'vim'let &tw = 40let @a = $HOME . '/vimfiles'let $NOTHING = 'NOTHING'另一个主要区别是右侧:let是表达式,这意味着您可以执行字符串连接(如上面的寄存器示例中所示)和算术运算(例如let &tw = 40 + 60)之类的操作.这也意味着如果它是一个字符串,你必须引用该值.:set另一方面,逐字读取值.
使用:set选项更容易,即使也:let可以使用大多数选项,以下是使用sehe示例的一些比较("n/a"表示无法使用它:let)
:verbose set vs n/a(不要认为还有另一种列出所有选项的方法):set tw=40vs :let &tw = 40(是的,你也可以使用相同的速记let):set wrap& vs n/a:set nowrapvs :let &wrap = 0(对于布尔选项,0为假,1为真):set wrap! VS :let &wrap = !&wrap还有一些例子
:set formatoptions?vs :echo &formatoptions(let不打印值,不像set)同时分配多个选项:
:set et sw=4 sts=4
Run Code Online (Sandbox Code Playgroud)
VS
:let [&et, &sw, &sts] = [0, 4, 4]
Run Code Online (Sandbox Code Playgroud)设置全局选项:setglobal etvslet &g:et = 1
setlocal etvslet &l:et = 1请参阅:h :set和:h :let了解更多详情
:set仅适用于选项,但语法更简单.:let不仅适用于选项,还适用于变量,寄存器和环境变量.不同的是:set,右手边:let是一个表达.
| 归档时间: |
|
| 查看次数: |
28365 次 |
| 最近记录: |