Vim 编辑器中搜索和替换
1. 概述
Vim 编辑器是基于Unix 的系统中最先进的文本编辑器之一。它由 Bram Moolenaar 开发,支持几乎所有文件类型。它有时被称为程序员的编辑器。
在本教程中,我们将探索使用 Vim 编辑器执行搜索和替换的不同方法。
2. 设置
Vim 编辑器预装在一些 Linux 发行版中。
我们先看看是否安装了 Vim 编辑器:
$ vim --version
Command 'vim' not found, but can be installed with:
sudo apt install vim # version 2:8.2.2434-3ubuntu3.2
sudo apt install vim-tiny # version 2:8.2.2434-3ubuntu3.2
sudo apt install vim-athena # version 2:8.2.2434-3ubuntu3.2
sudo apt install vim-gtk3 # version 2:8.2.2434-3ubuntu3.2
sudo apt install vim-nox # version 2:8.2.2434-3ubuntu3.2
sudo apt install neovim # version 0.4.4-1
我们可以使用以下命令在基于 Debian 的发行版上安装 Vim 编辑器:
$ sudo apt install vim
在基于 Arch 的发行版上,我们可以使用以下命令:
$ sudo pacman -S vim
我们需要一个示例文本文件,其中包含我们将搜索和替换的数据。所以让我们创建一个名为sample_text.txt的文件:
$ touch sample_text.txt
接下来,我们用Nano 编辑器打开它:
$ nano sample.txt
最后,我们可以粘贴这些行并保存更改:
This is an article covering search & replace with Vim.
Vim is a powerful text editor used on the CLI.
We'll cover different scenarios of search & replace in this article.
This will be the last line on the sample file.
3. 使用斜线和点的基本搜索和替换
在 Vim 编辑器中执行搜索和替换的最简单方法是使用斜线和点法。我们可以用斜杠搜索一个词,然后用圆点替换它。
让我们使用 Vim 编辑器打开sample.txt文件:
$ vim sample.txt
在 Vim 编辑器中,我们需要按正斜杠(/)键,然后搜索单词*“article”*:
/article
这将突出显示单词*“article”*的第一次出现,我们可以按 Enter 键跳转到它。
然后我们可以输入*cgn *命令组合:
cgn
这个 Vim 编辑器命令找到我们搜索的最后一个东西,将其删除,然后将我们置于插入模式。
在插入模式下,让我们输入单词*“tutorial”。这将用“tutorial”替换第一次出现的“article”*一词。
然后我们可以按 Esc 键返回正常模式。
接下来,我们需要按“N”键跳转到下一个出现的单词“article”,然后按点(.)键自动将其替换为单词“tutorial”*。*
进行更改后,我们的文件现在应该与此匹配:
This is an tutorial covering search & replace with Vim.
Vim is a powerful text editor used on the CLI.
We'll cover different scenarios of search & replace in this tutorial.
This will be the last line on the sample file.
这是在 Vim 编辑器中执行基本搜索和替换的最简单方法。但是,搜索多次出现的单词将成为一项重复且乏味的任务。
4. 使用substitute命令搜索和替换
我们还可以使用 Vim 编辑器替换 命令来执行基本和高级的搜索和替换功能。
替换命令具有以下基本语法:
:s/<search_phrase>/<replace_phrase>/options
我们需要在正常模式下输入这个命令。
“ :s ”代表替代,search_phrase是我们要搜索的词。replace_phase表示我们要替换搜索词的词。options包括用于确认的 c、用于忽略大小写的i和用于替换所有出现的* g *。
4.1. 单行
让我们在一行中搜索并替换所有匹配项:
:s/article/tutorial/g
这将第一次出现的*“article”一词替换为“tutorial”*。sample.txt文件现在应该如下所示:
This is an tutorial covering search & replace with Vim.
Vim is a powerful text editor used on the CLI.
We'll cover different scenarios of search & replace in this article.
This will be the last line on the sample file.
4.2. 所有事件
要搜索和替换文件每一行的所有匹配项,我们需要稍微修改前面的命令:
:%s/article/tutorial/g
**%符号让我们可以访问文件中的所有内容,并且我们可以替换每一行中的所有内容。
替换所有匹配项后,sample.txt文件应与此匹配:
This is an tutorial covering search & replace with Vim.
Vim is a powerful text editor used on the CLI.
We'll cover different scenarios of search & replace in this tutorial.
This will be the last line on the sample file.
4.3. 不区分大小写
默认情况下,当我们使用替换命令执行搜索和替换时,它是区分大小写的。
我们可以通过在上一个命令的末尾添加“ i ”选项来执行不区分大小写的搜索。
让我们替换sample.txt文件中所有出现的单词*“vim”* :
:%s/vim/blogdemo/gi
一旦我们进行了更改,sample.txt文件中的行应该与此匹配:
This is an article covering search & replace with blogdemo.
blogdemo is a powerful text editor used on the CLI.
We'll cover different scenarios of search & replace in this article.
This will be the last line on the sample file
4.4. 有确认
替换命令还带有确认“c”选项。在搜索和替换命令的末尾添加此选项会在进行替换之前给我们一个提示。
让我们用确认替换所有出现的*“article”*一词:
:%s/article/tutorial/gc
每次收到提示时,我们可以选择按“ y ”表示是,*“n”表示否,“a”*表示所有出现。
我们也可以按*“q”退出或按“l”*只替换一行。
4.5. 在特定行内
替换命令允许我们在文件中的特定行内搜索和替换,而不是只搜索一行或整个文件。
它具有以下基本语法:
:start_line_number, end_line_number s/<search_term>/<replace_term>/g
让我们只替换第一行出现的单词“ Vim ”:
:0, 1 s/vim/blogdemo/gi
我们还可以指定从当前行开始搜索的行数。
假设我们在第二行,让我们将第三行的*“article”一词替换为“tutorial”*:
:s/article/tutorial/g 2
由于我们的sample.txt文件仅包含四行,因此我们无法指定超出当前行范围的数字。
最后,在我们有多行的情况下,我们可以从当前行搜索到最后一行。
让我们将sample.txt文件中第三行中的*“article”一词替换为“tutorial”* :
:.,$s/article/tutorial/g
在这里,我们指定了一个范围,其中点 ( . ) 代表当前行,“ $ ”代表最后一行。
4.6. 全词
默认情况下,替换命令会查找部分匹配项和完全匹配项。这允许我们只更改单词的某些部分而不是整个单词。但是,在某些特殊情况下,我们可能需要搜索一个确切的单词,然后替换它。
让我们匹配确切的单词“ cover ”,然后将其替换为“ go through ”:
:s/\<cover\>/go through/gi
执行此命令后,我们的sample.txt文件应与此匹配:
This is an article covering search & replace with Vim.
Vim is a powerful text editor used on the CLI.
We'll go through different scenarios of search & replace in this article.
This will be the last line on the sample file.
我们可以注意到它只替换了第三行中的“ cover ”一词,并跳过了第一行中的“ covering ”一词。