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

Pab*_*blo 4 vim

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

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

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

小智 6

dd和yy:

:nnoremap dd g0dg$
:nnoremap yy g0yg$
Run Code Online (Sandbox Code Playgroud)


P S*_*ved 5

是.只是用

:noremap j gj
Run Code Online (Sandbox Code Playgroud)

而不是它的两个"n"-s的版本.除非您希望映射在可视模式下工作,否则您可以通过两个映射实现所需的行为:

:nnoremap j gj
:onoremap j gj
Run Code Online (Sandbox Code Playgroud)

模拟dd行为非常棘手,我无法做到这一点.这个命令的意思是"删除当前行面向行,并把它放在一个面向行的寄存器".以下是我最接近的尝试,但它需要更复杂的文本处理:

:nnoremap dd g^dg$:call setreg(v:register,'','al')<BR>
Run Code Online (Sandbox Code Playgroud)

(再次,这不起作用,但可能会指向一个有用的方向).

您可能还对相关的帮助部分感兴趣:

:h map-modes
Run Code Online (Sandbox Code Playgroud)