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

Vim 是否可以始终使用特定的映射命令覆盖特定的内置命令?,vim,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

我的
.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>
“任意滚动
函数滚动百分比(百分比)
设movelines=winheight(0)*a:percent/100
如果有(“浮动”)和类型(移动线)=类型(0.0)
设movelines=float2nr(movelines)
恩迪夫
让oldso=&so
执行“:set so=“.movelines”
执行“正常!zt“
执行“:set so=“.oldso”
端功能
nnoremap zz:调用滚动百分比(25)
此映射导致命令
zz
将当前光标下的行从屏幕顶部向下移动到
25%
,而不是通常的向下移动
50%

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

根据对的回答,我可以
将timeoutlen
设置为某个较高的值,但我不想这样做,因为它会弄乱其他映射,如果键之间有一个小延迟,这些映射应该不会启动


有没有可能使我对
zz
的映射始终覆盖默认的
zz
,而不更改一些会影响其他映射的全局选项?

您可以将单个
z
映射为禁止操作。然后,如果您快速键入
zz
,则光标将跳转,如果您等待太久,则不会发生任何事情

即,使用这对映射:

nnoremap zz :call ScrollToPercent(25)<CR>
nnoremap z  <NOP>
nnoremap zz:调用滚动百分比(25)
NNOREZ地图