4

对此画个空白,谷歌没有帮助。

想做这样的功能:

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

map <F2> :call JakPaste()<CR>

但是,这不起作用。我已经隔离了虚线:

function JakPaste()
        let tmp = set paste?
endfunction

map <F2> :call JakPaste()<CR>

按 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

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

似乎有点相关,但我仍然不明白。

4

1 回答 1

8

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

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

set paste!

现在,如果您需要比反转布尔值更智能的东西,您可以使用&将选项名称转换为可用变量。这里有两种使用方法:

" 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
于 2010-03-29T19:10:25.867 回答