我试图在某些情况下改变“K”的行为,但在其他所有情况下保持其原始功能。这是我失败的尝试
function! GetDocumentation()
if &filetype == 'java'
JavaDocSearch
else
normal K
endif
endfunction
nnoremap K :call GetDocumentation()<CR>
然而,由于我在函数中使用K,当它作为重映射的结果被调用时,使用了K的新映射,并且我得到无限递归。我想我可以以某种方式将函数的要点放在nnoremap
行上,但它看起来很尴尬,强行使用键的原始映射会很好。
希望这是有道理的,
感谢。
答案 0 :(得分:3)
没有:normal
修饰符的!
命令 - 因为它在。中使用
function-执行其参数作为正常模式命令进行映射
考虑。这就是行
normal K
运行已覆盖默认处理程序的映射。所以,要忽略 映射阴影命令,按如下方式更改行,
normal! K
答案 1 :(得分:2)
@ib。是的:你应该在这里使用:normal!
。但是函数是一种矫枉过正:下面的表达式映射就足够了:
nnoremap <expr> K ((&filetype is# "java")?(":JavaDocSearch\n"):("K"))
由于nore
,此映射不会触发,也会缩短八行。