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

pep*_*per 4 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
Run Code Online (Sandbox Code Playgroud)

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

map <F12> :call ToggleSyntax()<cr>
imap <F12> <c-o>:call ToggleSyntax()<cr>
Run Code Online (Sandbox Code Playgroud)

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

Ing*_*kat 8

对我来说,你的函数也会在插入模式下打开粘贴,但它不会将其关闭(并且语法打开).其原因是,当:set paste,没有插入模式的映射应用.这也是一个重要方面'paste',另见:help 'paste'.

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

:set pastetoggle=<F12>
Run Code Online (Sandbox Code Playgroud)

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