在 Vim 中,我进行了以下设置以使行右侧软换行不均匀:
set linebreak
set wrap
当一次遍历多行时,一个令人讨厌的副作用是它5j
不会将光标向下移动 5 行,而是会将其向下移动 5 个显示行。如果我有一行被软换行成 6 行,如果我的光标在第一行并且我输入,5j
我不会向下移动 5 个实际行,而是移动到当前行的底部,向下移动 5 个显示行。
我怎样才能停止这种行为,以便j
将光标向下移动 1 个显示行(软换行或其他),同时5j
将光标向下移动 5 个实际行?
答案1
默认情况下,j
和k
移动总是沿着物理线而不是屏幕线移动。所以我认为你nmap j gj
的 .vimrc 中一定有一个类似的地图。
对于您想要的行为,我的 .vimrc 中有以下内容:
" Map j and k to gj/gk, but only when no count is given
" However, for larger jumps like 6j add the current position to the jump list
" so that you can use <c-o>/<c-i> to jump to the previous position
nnoremap <expr> j v:count ? (v:count > 5 ? "m'" . v:count : '') . 'j' : 'gj'
nnoremap <expr> k v:count ? (v:count > 5 ? "m'" . v:count : '') . 'k' : 'gk'