在此上画一个空白,谷歌没有帮助。
想要制作这样的功能:
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)?
This似乎有些相关,但我仍然没有得到它。
答案 0 :(得分:6)
这不起作用的原因是你试图在表达式中运行命令 - 这些是不同的东西。您使用的?
构造只会使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