如何在Neovim中使用相对行号跳转到指定相对行数?
解决Neovim中相对行号跳转问题
问题根源
你混淆了普通模式操作和Ex命令模式的用法:
- 你预期的
:20k/:20j是把普通模式的j/k当成了Ex命令,但j/k并非合法的Ex命令,所以会触发E471: Argument required错误。 - 最初操作无反应,是因为你错误地在Ex命令模式输入了带数字的
j/k,而非在普通模式下直接执行操作。
正确实现方式
方式1:使用Vim默认的普通模式跳转(推荐)
Vim/Neovim原生支持普通模式下直接输入数字+跳转命令:
- 向上跳20行:普通模式下直接按
20k - 向下跳20行:普通模式下直接按
20j
如果你的需求是处理折行(开启set wrap时),希望无数字前缀时跳视觉行、有数字前缀时跳物理行,你的原配置是有效的,但要在普通模式下使用:
nnoremap <expr> j v:count ? 'j' : 'gj' nnoremap <expr> k v:count ? 'k' : 'gk'
此时:
- 无数字时按
j/k会跳转视觉行(跨折行) - 输入
20j/20k时会跳转物理行(对应相对行号的数字)
方式2:自定义Ex命令实现(不推荐,效率更低)
如果你坚持想用Ex命令格式(比如:20j),可以自定义Ex命令:
command! -nargs=1 J execute "normal! " . <args> . "j" command! -nargs=1 K execute "normal! " . <args> . "k"
之后输入:20J即可向下跳20行,:20K向上跳20行。
内容的提问来源于stack exchange,提问作者Alessandro Minoccheri
相关产品推荐
相关产品推荐

