如何删除,包括当前字符?

时间:2013-04-04 06:40:28

标签: vim

假设我输入了“abcdefg”,光标在末尾。我想删回回c,所以我只剩下“abc”了。

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

6 个答案:

答案 0 :(得分:6)

没有。向后动作始终从cyd的当前角色的左侧开始,这在某种程度上是合乎逻辑但也令人不安。

我能想到的唯一“干净”解决方案是先在c之后移动到char,然后进行前向删除:

Tcde

或使用视觉模式:

vTcd
v3hd

但是,考虑到你的样本并假设你正在进入正常模式进行校正,整个事情听起来非常浪费我。

如何保持插入模式并简单地做

答案 1 :(得分:2)

试试这个:

TcD

这将为您的示例留下abc ......如果abcdefg是该行的最后一个字,那么这就好了。

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

ldTc

或打高尔夫球,在3键击中进行:

3Xx or l4X

答案 2 :(得分:2)

请参阅this answer一个类似的问题:有一个设置可以超越行尾

来自doc:

  

虚拟编辑意味着光标可以放在有光标的位置       没有实际的性格。这可以是标签的一半或超出结尾       这条线。用于在可视模式下选择矩形       编辑表格。       " onemore"不一样,它只允许移动光标       在该行的最后一个字符之后。这使得一些命令更多       是一致的。以前,光标始终超过行尾       如果该行是空的。但它远非Vi兼容。它也可能       打破一些插件或Vim脚本。例如因为| l |可以动       最后一个字符后的光标。小心使用!       使用$命令将移动到行中的最后一个字符,而不是       过去了。这实际上可能会将光标移动到左侧!       g$命令将移至屏幕行的末尾。       结合" all"并没有意义。与" onemore",但你会       没有得到警告。

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

我可能误解了您的请求,但3hd$这样做了吗?

答案 5 :(得分:0)

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

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

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