题
在此上画一个空白,而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
不隶属于 StackOverflow