Vim:从函数调用ex命令(set)?

six*_*ude 2 vim function set ex

在此上画一个空白,谷歌没有帮助.

想要制作这样的功能:

function JakPaste()
        let tmp = :set paste?
        if tmp == "paste"
                set nopaste
        else
                set paste
        endif
endfunction

map <F2> :call JakPaste()<CR>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我已经隔离了这条折线:

function JakPaste()
        let tmp = set paste?
endfunction

map <F2> :call JakPaste()<CR>
Run Code Online (Sandbox Code Playgroud)

按F2会导致此错误:

Error detected while processing function JakPaste:
line    1:
E121: Undefined variable: set
E15: Invalid expression:  set paste?
Hit ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)

我应该如何从vim函数调用ex命令(set)?

似乎有点相关,但我仍然没有得到它.

Cas*_*bel 6

这不起作用的原因是你试图在表达式中运行命令 - 这些是不同的东西.?您使用的构造只会使vim回显选项的值; 这与返回值的函数不同.要明确:问题不在于你从一个函数调用一个ex命令 - 该函数的每一行都是一个ex命令 - 它是你在一个表达式中调用ex命令.

但这不是执行你在这里尝试的任务的正确方法.这是最短的方式,感谢rampion的评论:

set paste!
Run Code Online (Sandbox Code Playgroud)

现在,如果您需要更智能的东西而不仅仅是反转布尔值,您可以使用&将选项名称转换为可用变量.以下是两种使用方法:

" still a function, good for taking extra action (here, printing notification)"
function TogglePaste()
    if (&paste)
        set nopaste
        echo "paste off"
    else
        set paste
        echo "paste on"
    endif
endfunction

" just set the variable directly"
let &paste = !&paste
Run Code Online (Sandbox Code Playgroud)

  • 甚至只是`:设置粘贴!` (6认同)
  • 我想我们在某种程度上仍然在学习vim (6认同)