Vim - 删除行内最后一个字符到指定字符的所有内容

12
我正在尝试找出如何在字符串中定位最后一个字符的位置来使用dtdf
例如,假设我有以下行: foo not.relevant.text.bar 如果我使用f df.,我会得到foo relevant.text.bar,但我希望得到foo bar。因为我不知道字符串中有多少个该字符,所以不能使用f 3df.。此外,我可能想要得到foo .barf 3dt.),或者如果该行以句点结尾,我可能想要得到foo .。我希望无论有多少个该字符,都能找到最后一个。
没有正则表达式,这是否可行?我想我可以使用正则表达式,但我希望有一个简单的vim命令可以解决这个问题。我经常尝试做类似的事情。

1
你是否总是想要从行首删除?如果是,只需向后搜索到行尾 $F.d0 - Facundo Casco
如果我向后搜索,那么我必须找到字符串中字符的第一次出现,因为我仍然希望在第一个空格之前找到所有内容。 - Rob
5个回答

12

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

foo[I]not.relevant.text.bar[I]是光标

你可以尝试:

lmm$T.d`m

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

lmm$T.d`m

这样做就可以了。如果你经常使用,可以创建映射关系。
编辑:
我添加了一个GIF动画来展示它的工作原理。 :)
注意:
我在普通模式下将光标移动到正确的起始点(通过),然后键入@=以显示我在命令行中按下的键。

enter image description here


+1,因为那非常聪明。然而,如果行以 . 结尾,则无法正常工作。 - Rob
@Kent - 你是怎么制作这个视频的? - slm
@mcmlxxxvi 我的解释不会比 vim 帮助更清晰。如果你不理解任何命令,只需执行 :h X,例如 :h m - Kent
@mcmlxxxvi 如果您正在编写 Vimscript,那么您肯定可以执行 Normal 模式命令,如 $,t,f,F...,但是在脚本方式下可能还有更多的可能性。从我的角度来看,自己查阅帮助文档总比别人告诉我“这个命令只做 A、B 和 C”要好。我之后也会查阅帮助文档。也许我们更喜欢不同的学习方式。 - Kent
每个人都有自己的喜好 - 我发现vim的文档简洁而难以阅读,特别是在寻找已经存在的奇怪语言概念时(例如,在正常模式和vimscript之间的语法差异,如转义管道字符)。 - mcmlxxxvi
显示剩余9条评论

9

这是 VimPlug 用户的 Github 镜像:https://github.com/vim-scripts/JumpToLastOccurrence 和 https://github.com/vim-scripts/ingo-library 和 https://github.com/tpope/vim-repeat (依赖项) - Bryce Guinta

4

我会使用f df...

这并不一定比其他方式更省时间,但我觉得使用“重复上一个命令”比提前计算所需删除的单词/句子数量更容易。

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


这基本上是我一直在做的事情,大多数时候都没问题,除非我想在宏中使用它。 - Rob

1

对于您的示例:ET.dB

foo not.relevant.text.bar

只要在“foo”后面的文本中任何地方放置光标,它就有效。

从路径和文件名中删除路径:ET/dB

我用它来去除路径名,只留下尾部文件名。

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

只要:

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

    1. E 转到末尾(因为没有空格 - 如果不是行的最后一个也有效)

    2. T/ 查找最后一个/(停在它之后,这样它也会被删除)

    3. dB 删除到单词的开头


0

在可视化模式下:

$F.d^

$ 符号移到当前行的末尾,F 向后搜索句点,d^ 删除至行首。


哦,抱歉,当您开始时,这不会留下光标位置之前的文本。 - Neha Karanjkar
如果这能让你感觉更好的话:它帮助我找到了一种“跳转到最后一个出现位置”的方法 :) : $F. - Matthijs Wessels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接