当vim在单词之间换行时,常规移动如j和k将从一行物理跳到下一行。像这里建议的“nnoremap j gj”映射将通过显示行而不是物理行移动光标。
然而,这种方法至少存在一个问题。例如,dj将删除两个物理行而不是两个显示行。
有没有办法解决这个问题?
然而,这种方法至少存在一个问题。例如,dj将删除两个物理行而不是两个显示行。
有没有办法解决这个问题?
dd和yy:
:nnoremap dd g0dg$
:nnoremap yy g0yg$
:noremap j gj
使用两个“n”而不是一个来代替它的版本。除非你希望在可视模式下进行映射工作,否则可以通过两个映射实现所需的行为:
:nnoremap j gj
:onoremap j gj
模拟 dd 的行为相当棘手,我无法做到这一点。这个命令的意思是“将当前行按行删除并放入按行寄存器中”。以下是我最接近的尝试,但它需要更加棘手的文本处理:
:nnoremap dd g^dg$:call setreg(v:register,'','al')<BR>
再次强调,这并不起作用,但可能会指向一个有帮助的方向。
您可能还对相关的帮助部分感兴趣:
:h map-modes
dd
和yy
仅在显示行上工作,您需要使用以下映射::nnoremap dd dg$
:nnoremap yy yg$
:nnoremap D dg$
:nnoremap Y 0yg$
dd
的行为。否则它将表现为 d$
。 - Pablo
noremap
部分解决了问题。光标按照显示行移动,甚至dj
的效果也和我预期的一样。但仍然存在一个问题,就是像dd
或yy
这样的命令会删除或复制整个物理行而不是显示行。 - Pablo