[英]VIM Single Compile command from insert mode
我正在按照Vim中的映射键 - 教程(第1部分) - 6.2插入模式映射 ,它说:
The <C-R>= command doesn't create a new undo point.
You can also call Vim functions using the <C-R>= command:
:inoremap <F2> <C-R>=MyVimFunc()<CR>
我正在尝试使用它来调用SingleCompile#Compile()
如:
map! <F5> <C-R>=SingleCompile#Compile()<CR>
它工作正常,但问题是当我回到插入模式时,会插入一个0
字符作为副作用。
为什么这样,我怎么能避免它?
编辑:
我正在使用<CR>
因为它没有创建撤销点,并且目的是调用函数而不是像<CO>
那样输入命令。 我不想创建一个撤销点。
编辑:
我根据Ingo Karkat提供的三元操作技巧更新了VIM wiki。
函数的隐式返回值为0
。 您需要修改SingleCompile#Compile()
或编写一个返回空字符串的包装器:
function! SingleCompileWrapper()
call SingleCompile#Compile()
return ''
endfunction
map! <F5> <C-R>=SingleCompileWrapper()<CR>
另一个聪明的技巧是评估?:
三元运算符内的函数:
map! <F5> <C-R>=SingleCompile#Compile()?'':''<CR>
'0'是函数的返回值,当在插入模式下调用时,它自然地插入到缓冲区中
使用<CO>而不是<CR>离开命令的插入模式
我不建议采用这种方法,但是对于redneck解决方案如何(只是在事后删除0
):
map! <F5> <C-R>=SingleCompile#Compile()<CR><BS>
说真的,对于那些<CR>
无法使用的情况,你必须离开插入模式, :undojoin
可能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.