是否可以始终使用特定的映射命令覆盖特定的内置命令?

时间:2014-04-05 06:35:38

标签: vim

我的.vimrc中有以下映射。

" Scroll arbitrary
function ScrollToPercent(percent)
    let movelines=winheight(0)*a:percent/100

    if has("float") && type(movelines)==type(0.0)
        let movelines=float2nr(movelines)
    endif

    let oldso=&so
    execute ":set so=" . movelines
    execute "normal! zt"
    execute ":set so=" . oldso
endfunction

nnoremap zz :call ScrollToPercent(25)<CR>

此映射导致命令zz将当前光标下的行移动到距离屏幕顶部向下的25%,而不是通常移动它的行为{{1}下来的路。

我观察到,如果我在第一个50%之后输入第二个z稍微延迟,我的映射将被忽略,z的默认行为将启动。特别是,我光标下的线将向下移动zz而不是向下50%

根据对this question的回答,我可以25%得到一些高价值,但我不想这样做,因为它会搞乱其他应该不如果一小段延迟将键分开,则将其踢开。

是否可以使set timeoutlen的映射始终覆盖默认的zz,而不更改会影响其他映射的某些全局选项?

1 个答案:

答案 0 :(得分:1)

您可以将单个z映射到无操作。然后,如果您快速键入zz,那么您的光标将跳转,如果您等待太长时间,则根本不会发生任何事情。

即。使用这对映射:

nnoremap zz :call ScrollToPercent(25)<CR>
nnoremap z  <NOP>