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

  • 本文关键字:命令 内置 覆盖 映射 是否 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%,而不是将其向下移动50%的通常行为。

我观察到,如果我在第一次z之后以稍大的延迟键入第二个z,我的映射将被忽略,并且zz的默认行为开始。特别是,光标下方的行将向下移动50%,而不是向下25%

根据这个问题的答案,我可以set timeoutlen一些高值,但我不想这样做,因为它会弄乱其他映射,如果一个小的延迟将键分开,这些映射不应该被启动。

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

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

即使用这对映射:

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

最新更新