我正在尝试编写一个调用 setlocal
函数来将一些变量设置为传递给参数的值的函数。但是我遇到了错误 Number required after =: tabstop=...
function! MyFunction(param)
setlocal tabstop=param
setlocal tabstop=a:param
endfunction
两行都会失败。我是否忽略了某种变量插值?
我正在尝试编写一个调用 setlocal
函数来将一些变量设置为传递给参数的值的函数。但是我遇到了错误 Number required after =: tabstop=...
function! MyFunction(param)
setlocal tabstop=param
setlocal tabstop=a:param
endfunction
两行都会失败。我是否忽略了某种变量插值?
&option
变量。例如:fun! MyFun(param)
let &l:tabstop = a:param
endfun
请参考:help let-&
。在该标签的稍下方,列出了&l:
,这表明它等同于setlocal
。基本上,当您想将选项设置为表达式而不是定义值时,需要使用let &option=
而不是set option=
。 使用let &l:option=
而不是setlocal option=
。 还有&g:option
可全局设置选项。
&l:
和&g:
的解释很好,但是'tabstop'
是局部于缓冲区的,所以没有必要使用let &l:tabstop = a:param
的命令,使用简单的let &tabstop = a:param
就可以了。 - Peter Rincker:exe
命令,但这可能会很麻烦。最近新增的setbufvar()
函数也允许在除当前缓冲区以外的其他缓冲区中设置本地选项,非常方便。当我们需要避免切换缓冲区时,这是一个非常实用的功能。 - Luc Hermitte