12

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

例如,假设我有以下行:

foo not.relevant.text.bar

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

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

4

5 回答 5

12

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

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

你可以试试:

lmm$T.d`m

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

lmm$T.d`m

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

编辑

我添加了一个 GIF 动画来展示它的工作原理。:)

笔记

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

在此处输入图像描述

于 2013-03-06T14:05:15.027 回答
9

你可以使用我的JumpToLastOccurrence 插件。它提供了///,f执行此操作的命令。,F,t,T

于 2013-03-06T14:11:15.320 回答
4

我会用f df...

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

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

于 2013-03-06T14:02:45.947 回答
1

对于您的示例:ET.dB

foo not.relevant.text.bar

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

从路径+文件名中去除路径:ET/dB

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

/some/long/path/filename.ext中删除路径,只留下文件名。

只要:

  • 光标位于粗体字内的任意位置
  • 该单词中没有空格

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

    2. T/找到最后一个/(在它之后停止,所以它也会被删除)

    3. dB删除到单词的开头

于 2019-02-16T02:30:57.467 回答
0

在视觉模式下:

$F.d^

$ 转到当前行的末尾,F 向后搜索一个句点,d^ 删除直到行首。

于 2013-03-06T14:10:19.110 回答