vim:删除显示行而不是物理行

时间:2009-10-18 19:14:27

标签: vim

当vim在单词之间包裹长行时,j和k之类的常规运动将从一条物理线跳到下一条。像建议here这样的“nnoremap j gj”映射可以通过显示行而不是物理行来移动光标。

但这种方法至少存在一个问题。例如,dj将删除两条物理线而不是两条显示线。

有没有办法解决这个问题?

3 个答案:

答案 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)

如果您希望ddyy仅用于显示行,则需要使用以下映射:

:nnoremap dd dg$
:nnoremap yy yg$
:nnoremap D dg$
:nnoremap Y 0yg$