Vim 在某些情况下更改映射行为,并在所有其他情况下重用功能
我试图在某些情况下更改“K”的行为,但在所有其他情况下保留其原始功能。这是我失败的尝试Vim 在某些情况下更改映射行为,并在所有其他情况下重用功能,vim,Vim,我试图在某些情况下更改“K”的行为,但在所有其他情况下保留其原始功能。这是我失败的尝试 function! GetDocumentation() if &filetype == 'java' JavaDocSearch else normal K endif endfunction nnoremap K :call GetDocumentation()<CR> 函数!GetDocumentation() if&fil
function! GetDocumentation()
if &filetype == 'java'
JavaDocSearch
else
normal K
endif
endfunction
nnoremap K :call GetDocumentation()<CR>
函数!GetDocumentation()
if&filetype=='java'
JavaDocSearch
其他的
正常钾
恩迪夫
端功能
nnoremap K:调用GetDocumentation()
然而,由于我在函数中使用了K,当它作为重新映射的结果被调用时,使用了K的新映射,我得到了无限递归。我想我可以将函数的要点放在nnoremap
行中,但这看起来很尴尬,强制使用键的原始映射也不错
希望这有意义
谢谢。使用
:正常的命令,不使用代码>修改器,因为它在
函数将其参数作为正常模式命令执行,并将映射考虑在内
考虑这就是为什么要排队
normal K
运行已覆盖默认处理程序的映射。所以,忽略
映射阴影命令,按如下所示更改行
normal! K
:不带的正常
命令代码>修改器,因为它在
函数将其参数作为正常模式命令执行,并将映射考虑在内
考虑这就是为什么要排队
normal K
运行已覆盖默认处理程序的映射。所以,忽略
映射阴影命令,按如下所示更改行
normal! K
@ib.是对的:您应该使用:normal代码>这里。但函数是一个多余的功能:以下表达式映射就足够了:
nnoremap <expr> K ((&filetype is# "java")?(":JavaDocSearch\n"):("K"))
nnoremap K(&filetype为#“java”)?(“:JavaDocSearch\n”):(“K”))
由于nore
的原因,此映射不会自动触发,而且还缩短了八行。@ib。正确:您应该使用:normal代码>这里。但函数是一个多余的功能:以下表达式映射就足够了:
nnoremap <expr> K ((&filetype is# "java")?(":JavaDocSearch\n"):("K"))
nnoremap K(&filetype为#“java”)?(“:JavaDocSearch\n”):(“K”))
由于nore
的原因,此映射不会自动触发,而且还缩短了八行。太多不必要的括号破坏了表达式的美观。在这种情况下,所有这些都可以无缝删除::nnoremap K&ft是“java”吗?“:JavaDocSearch\n”:“K”
@ib。这些括号允许我用不同的语言编写程序,而不需要记住它们之间的运算符优先级差异。其主要思想是“有额外的括号不会有坏处,但没有括号会有坏处”。太多不必要的括号破坏了表达的美感。在这种情况下,所有这些都可以无缝删除::nnoremap K&ft是“java”吗?“:JavaDocSearch\n”:“K”
@ib。这些括号允许我用不同的语言编写程序,而不需要记住它们之间的运算符优先级差异。其主要思想是“有额外的括号不会有伤害,但没有括号会有伤害”。