当vim在单词之间包裹长行时,j和k之类的常规运动将从一条物理线跳到下一条。像建议here这样的“nnoremap j gj”映射可以通过显示行而不是物理行来移动光标。
但这种方法至少存在一个问题。例如,dj将删除两条物理线而不是两条显示线。
有没有办法解决这个问题?
答案 0 :(得分:6)
dd和yy:
:nnoremap dd g0dg$
:nnoremap yy g0yg$
答案 1 :(得分:5)
是。只需使用
:noremap j gj
而不是带有两个“n”-s的版本。除非您希望映射在可视模式下工作,否则您可以通过两个映射实现所需的行为:
:nnoremap j gj
:onoremap j gj
模拟 d d 的行为非常棘手,我无法做到这一点。此命令表示“删除当前行 linewise 并将其放入 linewise 寄存器”。以下是我最接近的尝试,但它需要更复杂的文本处理:
:nnoremap dd g^dg$:call setreg(v:register,'','al')<BR>
(再次,这不起作用,但可能会指向一个有用的方向。)
您可能也对相关的帮助部分感兴趣:
:h map-modes
答案 2 :(得分:2)
如果您希望dd
和yy
仅用于显示行,则需要使用以下映射:
:nnoremap dd dg$
:nnoremap yy yg$
:nnoremap D dg$
:nnoremap Y 0yg$