VIM:使用imap从插入模式调用函数?

时间:2013-04-26 18:06:03

标签: vim

我有一个函数,我已经在我的vimrc中编写了关闭语法并设置粘贴。该函数如下所示:

function! ToggleSyntax()
if g:syntaxon == 1
syntax off
set paste
let g:syntaxon = 0
else
syntax on
set nopaste
let g:syntaxon = 1
endif
endfunction

我使用F12键来调用该函数,并将函数映射到F12,如下所示:

map <F12> :call ToggleSyntax()<cr>
imap <F12> <c-o>:call ToggleSyntax()<cr>

我遇到的问题是我无法从插入模式调用ToggleSyntax函数。这对我来说非常混乱,因为我使用了imap处理程序,但是,此功能仅适用于命令模式。我无法弄清楚如何让它工作,任何帮助都将非常感谢!谢谢!

1 个答案:

答案 0 :(得分:8)

对我来说,你的功能也会在插入模式下打开 paste ,但它不会将其关闭(并且语法打开)。原因是当:set paste时,不适用插入模式映射。这是'paste'的一个重要方面,另请参阅:help 'paste'

在插入模式下切换的唯一方法是

:set pastetoggle=<F12>

(该选项是为此目的明确制作的)但是,您将失去切换您的函数所提供的并行语法。