在某些情况下更改映射行为,并在所有其他情况下重用功能

时间:2011-12-25 04:15:54

标签: vim

我试图在某些情况下改变“K”的行为,但在其他所有情况下保持其原始功能。这是我失败的尝试

function! GetDocumentation()
    if &filetype == 'java'
        JavaDocSearch
    else
        normal K
    endif
endfunction

nnoremap K :call GetDocumentation()<CR>

然而,由于我在函数中使用K,当它作为重映射的结果被调用时,使用了K的新映射,并且我得到无限递归。我想我可以以某种方式将函数的要点放在nnoremap行上,但它看起来很尴尬,强行使用键的原始映射会很好。

希望这是有道理的,

感谢。

2 个答案:

答案 0 :(得分:3)

没有:normal修饰符的!命令 - 因为它在。中使用 function-执行其参数作为正常模式命令进行映射 考虑。这就是行

的原因
        normal K

运行已覆盖默认处理程序的映射。所以,要忽略 映射阴影命令,按如下方式更改行,

        normal! K

答案 1 :(得分:2)

@ib。是的:你应该在这里使用:normal!。但是函数是一种矫枉过正:下面的表达式映射就足够了:

nnoremap <expr> K ((&filetype is# "java")?(":JavaDocSearch\n"):("K"))

由于nore,此映射不会触发,也会缩短八行。