如何在 Vim 中查找和替换文本 [附 Gif 示例]

您所在的位置:网站首页 搜索分隔符 如何在 Vim 中查找和替换文本 [附 Gif 示例]

如何在 Vim 中查找和替换文本 [附 Gif 示例]

2024-07-10 04:54| 来源: 网络整理| 查看: 265

如何在 Vim 中查找和替换文本 [附 Gif 示例]

以下是一些示例,展示如何使用强大的 Vim 编辑器中的搜索和替换功能。

如何在 Vim 中搜索文本?

按/键,输入搜索文本,然后按 Enter。这就像 less 命令一样。

但这种查找文本的方法不允许您替换找到的结果。

让我分享如何在 Vim 中查找和替换。

:%s/foo/bar/gci

上面的命令将运行不区分大小写的搜索,以查找搜索词 (foo) 与新词 (bar) 的所有匹配项。使用标志 c,它要求在替换任何替换之前进行确认。

让我更详细地解释事情。

使用替换命令在 Vim 中查找和替换文本

我想您已经知道要在 Vim 中运行命令,您必须处于正常模式(也称为命令模式)。按 Esc 键进入该模式。

Vim 有一个方便的命令 :substitue,也可以与较短版本的 :s 一起使用。

以下是替代命令的一般语法:

:[range]s/{pattern}/{string}/[flags] [count]

让我们分解一下这个语法。方括号“[]”之间的任何内容都是可选的。

range :如果您想要在所述行之间进行替换,可以使用这部分语法。 如果您没有提及范围,它将仅替换当前行上的文本。 (我分享了一个范围表)

pattern :您可以在此处指定要替换的文本。

string :这是将替换模式的字符串。

flags :要替换所有出现的搜索模式,请使用 g 标志。您可以指定是否希望匹配忽略大小写,使用 i 标志。要手动确认每个搜索和替换操作,请使用 c 标志。

count :要替换文本的行数。

.

当前行

$

最后一行

%

所有线路

x

行号x

.,+x

从当前行到附加 x 行

在 Vim 中查找和替换的示例

让我们看几个示例,演示 Vim 中替代命令的用法。

下面是我将用来演示 Vim 中替代命令用法的文件的屏幕截图。

基本文本替换

对于此示例,我确保字符串“Hello”在至少一行中出现多次,并在文件中出现多次。

我想用字符串“HI”替换“Hello”。下面是执行此操作的 Vim 命令:

:%s/Hello/HI/g

替换为确认

要替换文本,但希望每次执行时都得到确认,可以在替换命令中使用 c。

:%s/Hello/HI/gc

正如您从视频中看到的,Vim 每次替换模式之前都会要求我确认。

您还会看到类似于以下行的提示:

replace with HI (y/n/a/q/l/^E/^Y)?

提示中的选项具有以下含义:

是:是的

否:没有

答:全部

q:退出而不替换,但一旦您已经替换了文本,它就不会撤消

l:替换这个并退出(想想“最后”)

^E:向上滚动(在 vim-tiny 中不起作用)

^Y:向下滚动(在 vim-tiny 中不起作用)

不区分大小写的替换

当您想要替换文本时,无论它是大写还是小写,在这种情况下(哈哈)您应该在替换命令中使用 i 标志。

:%s/hello/HI/gi

如果您注意到,所有出现的“hello”或“Hello”甚至“hELLO”都会被替换为“HI”。这是不区分大小写的模式替换。

每个“hello”都被替换为“HI”,尽管大多数“hello”中都有一个大写的“H”。

在 Vim 中替换单行文本

要替换单行中的文本,我们需要指定将替换范围限制为当前行的范围。

为此,最好使用 . 范围描述符。

:.s/Hello/HI/g

正如您所看到的,只有第一行中的模式被替换,因为我使用了句点“.”。范围描述符。

额外提示:使用不同的分隔符

查看替换命令的语法,我提到模式和字符串由正斜杠“/”分隔。

但是,如果您的文本在模式/字符串中包含大量正斜杠(例如路径),并且在文件中的各处重复,该怎么办?转义正斜杠可能很乏味,有时很容易被错过。

因此,您可以使用不同的分隔符,而不是使用正斜杠字符作为分隔符。

我见过使用的一些分隔符是#、_ 和@。

这是一个 gif,演示了使用 @ 作为分隔符而不是 /。

结论

替换文本是很常见的情况,Vim 为您提供了一种强大的方法来搜索和用字符串替换模式。您甚至可以在 Vim 的替换命令中混合使用正则表达式。

如果您不仅有兴趣学习 Vim 基础知识,我强烈建议您使用 Jovica Ilic 的这个程序。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3