当vim在单词之间包含长行时,j和k之类的常规运动将从一条物理线跳到下一条.像这里建议的"nnoremap j gj"这样的映射将通过显示行而不是物理行来移动光标.
但是这种方法至少存在一个问题.例如,dj将删除两条物理线而不是两条显示线.
有没有办法来解决这个问题?
是.只是用
: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)