Vim - 删除直到最后一次出现的字符

时间:2013-03-06 13:52:38

标签: vim

我正在尝试弄清楚如何dtdf字符串中最后一次出现的字符。

例如,假设我有以下行:

foo not.relevant.text.bar

如果我f df.我希望获得foo relevant.text.bar,但我想获得foo bar。使用f 3df.不是一个选项,因为我不知道该字符串中有多少个字符。另外,我可能希望获得foo .barf 3dt.),或者如果该行以点结尾,我可能想获得foo .。我想总是找到最后一个,无论有多少。

这可能没有正则表达式吗?我想我可以使用正则表达式,但我希望有一个简单的vim命令,我错过了。我发现自己经常尝试这样做。

5 个答案:

答案 0 :(得分:13)

单向没有使用正则表达式 计算“点”(可能是其他字母)..看看别人是否有更好的方法..

foo[I]not.relevant.text.bar[I] is cursor

你可以尝试:

lmm$T.d`m

或以这种格式,可能看起来更好?

$ Ť d `

这将完成这项工作。如果你经常使用它,你可以创建一个映射。

修改

我添加了一个GIF动画来显示它是否有效。 :)

注意

我将光标移动到正确的起点(@=)后,在正常模式下键入 f(space) ,以显示我在命令行中按下的键。

enter image description here

答案 1 :(得分:8)

您可以使用我的JumpToLastOccurrence plugin。它提供了,f / ,F / ,t / ,T命令。

答案 2 :(得分:4)

我会使用f df...

键入时不一定要短,但我发现使用“重复上一个命令”比预先计算我要删除的单词/句子数更容易。

然后,您可以调整您输入的.的数量,以调整您要删除的字符串的长度。

答案 3 :(得分:0)

在视觉模式中:

$F.d^

$转到当前行的末尾,F向后搜索一段时间,d ^删除直到行的开头。

答案 4 :(得分:0)

例如: E T d B

  

foo not.relevant.text.bar

只要光标位于“ foo”之后的文本内的任意位置,它就可以工作。

路径+文件名中的条带路径: E T / d B

我用它来剥离除尾随文件名以外的所有路径名。

  

/some/long/path/filename.ext 剥离路径,仅保留文件名。

只要:

  • 光标位于粗体字内的任何地方
  • 该词中没有空格

    1. E 到末尾(因为没有空格-如果不是最后一行,也可以使用)

    2. T / 查找最后一个/(在其后停止,因此也会被删除)

      < / li>
    3. d B 删除到单词开头