let和setvim编辑器之间有什么区别?
我一直想知道为什么两者都存在?
另外,我想听听它的历史背景。
let不做相同的事情。有些事情你无法实现与set那些可能的let,看到我的回答。
setlocal……它们等同于&l:*变量。
set noic或更加容易set ic。据我所知,set还兼容vi它let,因为我以为,是不是。
let和setvim编辑器之间有什么区别?
我一直想知道为什么两者都存在?
另外,我想听听它的历史背景。
let不做相同的事情。有些事情你无法实现与set那些可能的let,看到我的回答。
setlocal……它们等同于&l:*变量。
set noic或更加容易set ic。据我所知,set还兼容vi它let,因为我以为,是不是。
Answers:
Set是一个更加用户友好的界面,专门用于选项
例如
:verbose set
显示所有有效的选项。
:set tw=40
将用作 set textwidth=40
:set wrap&
将设置选项的默认值wrap
:set nowrap
将取消设置选项
:set wrap!
将切换选项
最重要的是,
:setTab #完成制表符!
使用可以(轻松)达到上述目的let。
:set nowrap,options.txt(:help set-option)说::se [t] {option}切换选项:设置,将其打开。数字选项:显示值。字符串选项:显示值。当您说“将为选项换行设置默认值”时,这与此处的内容不同。??
no-prefixed选项可能会造成混淆。另请注意,可能有您遗漏option&的尾随&。]
: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不适用(不要以其他方式列出所有选项):set tw=40vs :let &tw = 40(是的,您也可以使用相同的速记let):set wrap& vs不适用:set nowrapvs :let &wrap = 0(对于布尔选项,0为false,1为true):set wrap! 与 :let &wrap = !&wrap其他一些例子
:set formatoptions?vs :echo &formatoptions(let不打印值,不像set)同时分配给多个选项:
:set et sw=4 sts=4
与
:let [&et, &sw, &sts] = [0, 4, 4]
设置全局选项:setglobal etvslet &g:et = 1
setlocal etvslet &l:et = 1请参阅:h :set和:h :let以获取更多详细信息
:set仅与选项一起使用,但是语法要简单得多。:let不仅适用于选项,还适用于变量,寄存器和环境变量。与不同:set,的右侧: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>
let允许将变量分配给选项:let &textwidth = g:orig_tw反之亦然。
非常简单
正如人们所说的那样,它set是一种选择,由于存在局限性,效果更好。这set也是所有版本都vi用来设置其选项的历史命令。大多数(全部?)其他的版本vi没有let。
但是可能最重要的是,它set适用于的所有版本vim,在let编译时可以省略该命令vim。标准tiny和small构建可以做到这一点。
如果丢失let,则会出现错误:
E319: Sorry, the command is not available in this version
注意:if和endif都不会实现,vim.tiny但是在这种情况下,命令不会给出错误,而是跳过了两个命令之间的所有内容,包括INCLUDING else。
:help set和:help let并阅读手册?