如何在vim函数中设置数字变量

11

我正在尝试编写一个调用 setlocal 函数来将一些变量设置为传递给参数的值的函数。但是我遇到了错误 Number required after =: tabstop=...

function! MyFunction(param)
    setlocal tabstop=param
    setlocal tabstop=a:param
endfunction

两行都会失败。我是否忽略了某种变量插值?

1个回答

20
你需要将选项定义为一个&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可全局设置选项。


3
关于&l:&g:的解释很好,但是'tabstop'是局部于缓冲区的,所以没有必要使用let &l:tabstop = a:param的命令,使用简单的let &tabstop = a:param就可以了。 - Peter Rincker
太好了,谢谢@Conner!@PeterRincker啊,但是我还需要设置其他变量。感谢您的提示。 - jjt
1
谢谢!我花了接近一个小时来弄清楚如何编写我的第一个 vim 函数,只需使用一个命令设置 tabstop 和 shiftwidth。现在我将浪费一整天的时间来编写 vim 函数... - jbo5112
请注意,我们还可以使用:exe命令,但这可能会很麻烦。最近新增的setbufvar()函数也允许在除当前缓冲区以外的其他缓冲区中设置本地选项,非常方便。当我们需要避免切换缓冲区时,这是一个非常实用的功能。 - Luc Hermitte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接