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

Vim 如何删除,包括当前字符?,vim,Vim,假设我输入了“abcdefg”,光标在末尾。我想删除回c,这样我只剩下“abc” 是否有类似于d的命令包含当前字符?我知道我可以做dTcx,但是x感觉像是一个解决方案,我想有更好的解决方案。使用d?c 这将启动d模式,搜索回“c”,然后删除到光标位置 编辑:不,这不包括当前位置…我可能误解了你的请求,但是3hd$可以吗?不可以。对于c、y和d来说,向后运动总是从当前字符的左侧开始,这在某种程度上是合乎逻辑的,但也令人不安 我能想到的唯一“干净”解决方案要么意味着首先移动到c之后的字符,然后执行向

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

是否有类似于
d
的命令包含当前字符?我知道我可以做
dTcx
,但是
x
感觉像是一个解决方案,我想有更好的解决方案。

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


编辑:不,这不包括当前位置…

我可能误解了你的请求,但是
3hd$
可以吗?

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

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

Tcde
或使用视觉模式:

vTcd
v3hd
但是,考虑到你的样本,并假设你只是为了修正而进入正常模式,整个事情对我来说听起来非常浪费

保持插入模式并简单地执行以下操作如何←←←←?

试试这个:

TcD
这将为您的示例留下
abc
。。。如果
abcdefg
是这行的最后一个字

如果不是该行的最后一个字,您可以执行以下操作:

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

3Xx or l4X
请注意一个类似的问题:有一个设置允许超出行的末尾

从文档:

虚拟编辑意味着可以将光标定位在存在的位置 没有真实的角色。这可以是标签的一半,也可以是末端 排队等候。用于在视觉模式下选择矩形和 编辑表格。 “onemore”不一样,它只允许移动光标 在行的最后一个字符之后。这使得一些命令更加复杂 始终如一。以前,光标始终超过行的末尾 如果电话线是空的。但它远远不能与Vi兼容。也可能 破坏一些插件或Vim脚本。例如,因为| l |可以移动 最后一个字符后的光标。小心使用! 使用
$
命令将移动到行中的最后一个字符,而不是 过去吧。这实际上可能会将光标向左移动!
g$
命令将移动到屏幕行的末尾。 把“全部”和“一个更多”结合起来是没有意义的,但你会的 没有得到警告


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

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

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

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

我使用了有史以来最愚蠢的方法:D@MostafaShahverdy
xxxx
?或者
ddOabc
?哼唱:D,有时使用
c
中的Del!是的,有可能是重复的。或
Fdd$
。但我也希望在我不在队伍的尽头的时候工作,这也让我感觉像是一种变通。基本上,我是问是否有包含当前角色的运动/删除。对于4x
退格
,我想我会在实际工作中这样做。谢谢。当然,这只是一个例子;可能有12或30个字符要删除,它可能在一条直线的中间。