Vim:如何重新映射一个键,但只能将它与数字组合在一起?

Vim:如何重新映射一个键,但只能将它与数字组合在一起?

我希望在向上/向下移动多行(例如)后将视图居中7j,但当我仅移动一次时则不然(例如,j但我不在乎1j)。这是我所拥有的:

:noremap j jzz

如何才能使它仅当我将密钥与数字组合时才起作用?

答案1

你可以这样做:

function! s:MoveAndCenter(motion)
    return a:motion . (v:count > 1 ? 'zz' : '')
endfunction

noremap <silent> <expr> j <sid>MoveAndCenter('j')
noremap <silent> <expr> k <sid>MoveAndCenter('k')

j这告诉 Vim 每次按下或时运行一个表达式k,并使用该表达式返回的字符串作为要运行的正常模式命令。我们不将计数添加到结果中的原因是 Vim 会自动添加它(事实上,这种行为是无法阻止的)。

看:

:help :map-expr
:help v:count

相关内容