Vim脚本功能:意外的字符:let

时间:2014-08-22 12:00:01

标签: vim

所以我正在学习vim脚本并尝试编写一个函数来切换(删除/添加)字符串中的字符,然后返回结果字符串(注释仅用于堆栈溢出,我知道如何正确评论Vimscript中)

function! ToggleStringValue(input, value)
    if a:input =~ value // if the value's there
        let &a:input = substitute(a:input, a:value, "", "") // remove it
    else
        let &a:input .= a:value // otherwise append it
    endif
    return a:input
endfu

示例(伪)用法:

guioptions = ToggleStringValue(guioptions, "m") // should toggle menu bar on/off

但是我在函数line 4

Unexpected characters in :let上收到错误

我做错了什么?这是写这个函数的好方法吗?

编辑:在肯特回答笔记后更正版本:

function! ToggleStringValue(input, value)
    let l:result = a:input
    if l:result =~ a:value
        let l:result = substitute(l:result, a:value, "", "")
    else
        let l:result .= a:value
    endif
    return l:result
endfu

function! ToggleMenuBar()
    let &g:guioptions = ToggleStringValue(&g:guioptions, "m")
endfu

1 个答案:

答案 0 :(得分:2)

您的代码有几个问题:

    在vimscript中
  • ,评论以"开头,而不是//,也许您只是将它们放在那里以使问题清楚,我希望它就是这样。

  • &var表示一个选项,例如let &number=0隐藏行号,与set nonumber相同如果var不是选项名称,您会看到类似的内容“未知选项”或“选项不存在”

  • 使用a:foo的方法/函数参数,它们不能更改,它们是只读的。也就是说,let a:foo="blah"不会去。你必须复制它们。