繁体   English   中英

插入模式下的VIM Single Compile命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM