vim:替换给定标记之前的所有字符

24

使用vim,我想将某个字符之前的所有字符替换为另一个字符,比如空格 - 而不影响行中字符的布局/数量。以下是一个示例:

替换前:

real(kind=R12), intent(out) :: my_var

在将 , intent (out) 替换为空白(即从 , 开始,一直到 ))后:

real(kind=R12)              :: my_var

我知道使用r可以替换一个字符,使用nr可以替换n个字符,但我想知道是否可以在不先计算要替换的字符数的情况下完成我的任务。

非常感谢您的回复!

4个回答

42

在这里,视觉模式可能是最简单的方法:

vt:r 
  • v 进入可视化模式
  • t: 选择到冒号之前的内容
  • r (注意r后面有空格)用空格替换所选区域。

4
请注意,您可以使用任何动态字符,不仅限于“t”。例如,“f”、“/”等都能起作用。 - kenny
正是我想要的!我记得我之前不小心做过这个,所以知道该搜索什么。谢谢! - itmuckel
有没有一种方法可以在光标当前位置之前替换给定令牌之前的字符? - Kayce Basques
@KayceBasques: 我不明白你的问题。也许你应该把它作为一个问题发帖?并提供更多细节。 - Thor
假设有一个字符串 foo bar,光标在 r 上,我想用 x 替换它前面的所有内容,直到 f 停止,最终结果为 fxxxxxr - Kayce Basques
@KayceBasques:我会选择:hvTfrx - Thor

6
在命令模式下,输入“df?”可删除该字符(?)之前的内容。然后输入“i”回到插入模式。
例如,如果您正在查看以下句子:
The wizard quickly jinxed the gnomes before they vaporized.

当你输入 dfs 时,你将得到:

 before they vaporized.

3
好的,请提供需要翻译的内容。 - Matthijs Wessels

3
我知道用 r 命令可以替换一个字符。
你知道吗,使用 R 命令可以一直保持在替换模式?这样你就可以按住 Space 键一直替换想要的内容。
不过,我还是会选择 Thor 的答案。可视模式使你可以在 vim 中使用高效的文本导航方法,而无需计算字符数。
但如果你有不同意见,也可以试试 EasyMotion 插件。

1

您可以在此处使用正则表达式(使用(.*?)引用所有值直到标记)。

例如:

正则表达式:(.*?)foo将清除从头到foo的所有内容。


1
在 Perl 中是这样的,而在 Vim 中非贪婪量词则是 \{-} - Thor

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