从光标向后删除到 Vim 中上一行的末尾?

Delete backwards from cursor to the end of the previous line in Vim?

假设我要编辑以下行:

var myVar = 
    "I am a string!";

所以它看起来像这样:

var myVar = "I am a string!";

是否有移动到上一行的末尾?

你想要的是行连接命令,J

在正常模式下,将光标放在 var myVar = 行的任意位置并键入 J(大写 j)。

方向运动与 J 一起工作 - 5J 在下面缩进 5 行光标等。您还可以使用视觉模式 select 一系列行(v 以启动视觉模式 selection)并使用 J.

&joinspaces 选项也会影响此行为。当它“打开”(set joinspacesset js)时,它会在加入时在句末标记(即“.”、“?”或“!”)后添加两个 space线。 set nojoinspacesset nojs 将其关闭并仅插入一个 space.

kJ 会做你想做的,而且可能是你应该使用的,但是如果你想做你所要求的 从光标向后删除到上一行 然后你可以执行以下操作:

:set virtualedit+=onemore
^  " go to the start of the line
d?$<cr>

?$<cr> 是移动到上一行的末尾。 :set virtualedit+=onemore 允许光标移动到行尾,否则我们将最终删除该行的最后一个字符,在您给出的示例中,该字符将是结尾的 space.

然后您可以创建一个映射来执行此操作(:nohl 只是清除搜索突出显示):

:nnoremap <leader>J ^d?$<cr>:nohl<cr>

尽管实现相同目的的更简单的映射是:

:nnoremap <leader>J kJ