在此上画一个空白,而Google无济于事。

想要这样的函数:

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命令(set)?

这个 似乎有些相关,但是我仍然不明白。

有帮助吗?

解决方案

这不起作用的原因是您正在尝试在表达式中运行命令 - 这些是不同的事情。这 ? 构造您使用的只是导致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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top