19

假设我输入了“abcdefg”,光标位于末尾。我想删除回c,这样我就只剩下“abc”了。

有没有这样的命令d包含当前字符?我知道我可以做到dTcx,但x感觉像是一种变通方法,我想有更好的解决方案。

4

6 回答 6

7

不。向后运动总是从当前字符的左侧开始c,这在某种程度上是合乎逻辑的yd但也令人不安。

我能想到的唯一“干净”解决方案意味着先移动到字符c,然后再进行前向删除:

Tcde

或使用视觉模式:

vTcd
v3hd

但是,鉴于您的样本并假设您只是为了进行校正而进入正常模式,整个事情对我来说听起来非常浪费。

如何保持插入模式并简单地做←</kbd>←</kbd>←</kbd>←</kbd>?

于 2013-04-04T07:09:09.180 回答
3

试试这个:

TcD

这将留给abc你的例子......好吧,如果这abcdefg是该行的最后一个词。

如果它不是该行中的最后一个单词,您可以这样做:

ldTc

或打高尔夫球,在 3 次击键内完成:

3Xx or l4X
于 2013-04-04T07:51:44.883 回答
2

请参阅类似问题的答案:允许超出行尾的设置

从文档:

虚拟编辑意味着可以将光标定位在没有实际字符的地方。这可以在制表符的中间或超出行尾。对于在可视模式下选择矩形和编辑表格很有用。“onemore”不一样,它只允许在行的最后一个字符之后移动光标。这使得一些命令更加一致。以前,如果该行为空,则光标总是超过该行的末尾。但它与 Vi 不兼容。它也可能会破坏一些插件或 Vim 脚本。例如因为 |l| 可以将光标移动到最后一个字符之后。小心使用!使用该$命令将移动到行中的最后一个字符,而不是超过它。这实际上可能会将光标向左移动!这g$命令将移动到屏幕行的末尾。将“all”与“onemore”结合起来是没有意义的,但您不会收到警告。

简而言之,您可以尝试一下:set virtualedit=onemore,看看您的环境是否稳定。

于 2014-11-06T13:04:01.483 回答
1

使用d?c 这将启动d模式,搜索回“c”,然后删除到您的光标位置。

编辑:不,不包括当前位置...

于 2013-04-04T06:44:26.947 回答
1

我可能误解了您的要求,但确实3hd$做到了吗?

于 2013-04-04T06:48:00.347 回答
0

我会vFdd在这个例子中使用。我认为它比其他解决方案更好,因为该命令明确显示了要删除的内容。删除时包括当前字符和指定字符。

  • v:进入视觉模式(标记文本)
  • F: 向后查找/转到字符
  • d: 将被删除的字符“d”。
  • d: 删除命令

由于是可视模式,因此在执行实际删除之前也可以移动光标d。这使得该命令甚至可以通过首先标记靠近字符的特殊字符然后调整位置来删除最多非唯一字符。

于 2020-12-10T10:58:22.300 回答