首页 > 系统相关 >Linux Vim教程(五):搜索与替换

Linux Vim教程(五):搜索与替换

时间:2024-07-23 12:26:17浏览次数:17  
标签:教程 bar Vim 命令 搜索 Linux foo 替换

目录

1. 基本搜索功能

1.1 向前搜索

1.2 向后搜索

1.3 重复上一次搜索

1.4 高亮显示搜索结果

1.5 区分大小写搜索

2. 高级搜索技巧

2.1 搜索并跳转到特定行

2.2 搜索并跳转到特定列

2.3 搜索并高亮特定模式

2.4 搜索历史

2.5 搜索并替换

3. 基本替换功能

3.1 替换当前行

3.2 替换整篇文档

3.3 替换特定范围

3.4 替换并确认

3.5 替换并保留备份

4. 高级替换技巧

4.1 使用正则表达式替换

4.2 替换包含特殊字符的文本

4.3 多行替换

4.4 执行复杂替换

4.5 使用替换命令中的特性

4.6 跨多个文件进行替换

5. 实用技巧

5.1 快速跳转到搜索结果

5.2 使用搜索历史

5.3 结合外部工具

5.4 高效处理大文件

5.5 使用Vim脚本自动化操作

5.6 保存搜索和替换结果

6. 实用代码

7. 搜索与替换的具体应用场景

7.1 大规模代码重构

7.2 批量修改配置文件

7.3 文档编辑

7.4 数据清洗

7.5 代码审查与优化

8. 进阶搜索与替换命令

8.1 在特定文件类型中搜索和替换

8.2 搜索并跳转到下一个匹配项

8.3 结合Vim的模式进行搜索与替换

8.4 搜索与替换中的高级正则表达式

8.5 结合Vim插件进行搜索与替换

9. 总结


在使用Vim进行文本编辑时,搜索和替换功能是必不可少的工具。无论是查找特定单词、短语,还是在整个文档中进行大规模的内容替换,掌握这些技巧都能极大地提升编辑效率。本篇文章将详细介绍Vim中的搜索与替换功能,涵盖基本命令、进阶技巧及实际应用。

1. 基本搜索功能

1.1 向前搜索

在Vim中,使用/命令可以进行向前搜索。例如:

/foo

这个命令会从当前光标位置向后搜索foo。输入命令后按Enter,Vim会高亮显示所有匹配的结果,并将光标移动到第一个匹配项。

1.2 向后搜索

使用?命令可以进行向后搜索。例如:

?bar

这个命令会从当前光标位置向前搜索bar。同样地,按Enter后,Vim会高亮显示所有匹配的结果,并将光标移动到第一个匹配项。

1.3 重复上一次搜索

搜索命令执行后,可以使用nN来重复上一次搜索:

  • n:在相同方向上搜索下一个匹配项。
  • N:在相反方向上搜索下一个匹配项。

1.4 高亮显示搜索结果

在Vim中,默认情况下搜索结果会被高亮显示。如果没有高亮显示,可以使用以下命令启用高亮:

:set hlsearch

要关闭高亮显示,可以使用:

:set nohlsearch

1.5 区分大小写搜索

默认情况下,Vim的搜索是不区分大小写的。要启用区分大小写的搜索,可以使用:

:set ignorecase
:set smartcase

使用ignorecase时,所有搜索都将不区分大小写。而smartcase的作用是:如果搜索模式包含大写字母,则区分大小写;否则,不区分大小写。

2. 高级搜索技巧

2.1 搜索并跳转到特定行

如果知道某个单词或短语在特定行,可以使用以下命令直接跳转:

:123

这个命令会将光标移动到第123行。然后可以结合搜索命令,例如:

:123/foo

2.2 搜索并跳转到特定列

虽然Vim没有直接跳转到特定列的命令,但可以通过搜索实现。例如,要跳转到当前行中的第一个x字符:

/^.\{5}x

这个命令会查找当前行中第6个字符是x的位置(因为Vim的列数从0开始)。

2.3 搜索并高亮特定模式

如果需要在整个文档中高亮特定模式,可以使用以下命令:

:match Search /pattern/

例如:

:match Search /TODO/

这个命令会高亮所有包含TODO的行。

2.4 搜索历史

Vim提供了一个方便的搜索历史功能,可以使用方向键(上、下)查看和编辑之前的搜索命令。例如,按/后,按键可以查看之前的搜索命令。

2.5 搜索并替换

在Vim中,可以在搜索结果的基础上进行替换。例如,要将文档中的所有foo替换为bar,可以使用以下命令:

:%s/foo/bar/g

3. 基本替换功能

3.1 替换当前行

要在当前行中替换某个模式,可以使用以下命令:

:s/foo/bar/

这个命令会将当前行中的第一个foo替换为bar

3.2 替换整篇文档

要在整个文档中进行替换,可以使用以下命令:

:%s/foo/bar/g

这个命令会将文档中的所有foo替换为bar。其中,%表示整个文档,g表示全局替换。

3.3 替换特定范围

可以指定替换的行范围。例如,替换第10行到第20行中的所有foo

:10,20s/foo/bar/g

3.4 替换并确认

在替换时,如果需要逐一确认,可以加上c选项:

:%s/foo/bar/gc

这个命令会在每次替换前询问用户是否确认替换。

3.5 替换并保留备份

在进行替换操作前,可以保留原文档的备份。使用:w命令保存备份:

:w backupfile.txt
:%s/foo/bar/g

4. 高级替换技巧

4.1 使用正则表达式替换

Vim的替换命令支持正则表达式。例如,要将所有单词foo后面紧跟的数字替换为bar,可以使用:

:%s/\<foo\>\d\+/bar/g

4.2 替换包含特殊字符的文本

如果要替换的文本包含特殊字符,可以使用反斜杠进行转义。例如,要将所有包含$的文本替换为dollar

:%s/\$/dollar/g

4.3 多行替换

Vim允许跨行替换。例如,要将跨行的foobar替换为foobar

:%s/foo\nbar/foobar/g

4.4 执行复杂替换

对于复杂的替换操作,可以结合Vim脚本进行。例如,要将所有foo替换为bar,并在替换过程中执行某些操作:

:let @a=':s/foo/bar/g'
:@a

4.5 使用替换命令中的特性

Vim的替换命令中包含许多有用的特性,例如替换中的&符号表示之前的匹配项:

:%s/\<foo\>/\=submatch(0) . "bar"/g

这个命令会将所有foo替换为foobar

4.6 跨多个文件进行替换

在Vim中可以使用:argdo命令跨多个文件进行替换。例如,要将当前目录下的所有文件中的foo替换为bar

:argdo %s/foo/bar/g | update

5. 实用技巧

5.1 快速跳转到搜索结果

在Vim中,使用*#可以快速跳转到光标下的单词:

  • *:向前搜索光标下的单词。
  • #:向后搜索光标下的单词。

5.2 使用搜索历史

可以使用方向键(上、下)查看和编辑之前的搜索命令。例如,按/后,按键可以查看之前的搜索命令。

5.3 结合外部工具

Vim支持结合外部工具进行搜索和替换。例如,可以使用grep命令在多个文件中搜索:

:!grep -rnw '/path/to/somewhere/' -e 'pattern'

5.4 高效处理大文件

对于大文件,可以使用分块搜索和替换。例如,分块处理10行:

:1,10s/foo/bar/g
:11,20s/foo/bar/g

5.5 使用Vim脚本自动化操作

可以编写Vim脚本自动化搜索和替换操作。例如,编写一个脚本文件replace.vim

" replace.vim
% s/foo/bar/g

然后在Vim中加载脚本:

:source replace.vim

5.6 保存搜索和替换结果

可以将搜索和替换的结果保存到文件。例如,使用redir命令:

:redir > output.txt
:%s/foo/bar/g
:redir END

6. 实用代码

以下是一些使用Vim进行搜索和替换的实际代码示例:

" 打开文件
:e example.txt

" 高亮显示所有包含 TODO 的行
:match Search /TODO/

" 将所有 TODO 替换为 DONE
:%s/TODO/DONE/g

" 在替换前确认
:%s/TODO/DONE/gc

" 替换包含特殊字符 $ 的文本
:%s/\$/dollar/g

" 使用正则表达式进行替换
:%s/\<foo\>\d\+/bar/g

" 使用外部工具 grep 搜索
:!grep -rnw '/path/to/somewhere/' -e 'pattern'

" 将结果保存到文件
:redir > output.txt
:%s/foo/bar/g
:redir END

" 结合脚本进行自动化替换
:let @a=':s/foo/bar/g'
:@a

7. 搜索与替换的具体应用场景

7.1 大规模代码重构

在软件开发过程中,经常需要对代码进行大规模重构。Vim的搜索与替换功能可以帮助开发者快速地重命名变量、函数名或类名。例如:

:%s/oldFunctionName/newFunctionName/g

7.2 批量修改配置文件

在运维和开发过程中,经常需要批量修改配置文件。例如,将所有配置文件中的某个配置项的值进行统一修改:

:argdo %s/oldValue/newValue/g | update

7.3 文档编辑

在撰写和编辑长文档时,Vim的搜索与替换功能可以帮助快速进行全局修改。例如,将所有出现的特定术语替换为更合适的术语:

:%s/oldTerm/newTerm/g

7.4 数据清洗

在处理大规模文本数据时,Vim的正则表达式替换功能可以帮助进行数据清洗。例如,将所有不符合格式的电话号码进行统一格式化:

:%s/\(\d\{3\}\)-\(\d\{3\}\)-\(\d\{4\}\)/(\1) \2-\3/g

7.5 代码审查与优化

在代码审查和优化过程中,使用Vim的搜索与替换功能可以快速定位和修改代码中的潜在问题。例如,将所有的printf函数替换为fprintf以便更好地控制输出:

:%s/\<printf\>/fprintf/g

8. 进阶搜索与替换命令

8.1 在特定文件类型中搜索和替换

在Vim中,可以通过设置文件类型来进行特定文件的搜索和替换。例如,只在.c文件中搜索:

:args **/*.c
:argdo %s/foo/bar/g | update

8.2 搜索并跳转到下一个匹配项

在搜索后,可以使用Ctrl + oCtrl + i在搜索结果之间跳转:

  • Ctrl + o:跳转到上一个位置。
  • Ctrl + i:跳转到下一个位置。

8.3 结合Vim的模式进行搜索与替换

Vim的命令模式、可视模式和插入模式都可以结合搜索与替换功能。例如,在可视模式下选中一段文本并进行替换:

v:s/foo/bar/g

8.4 搜索与替换中的高级正则表达式

Vim的正则表达式支持很多高级特性,例如非贪婪匹配、反向引用等。例如,非贪婪匹配:

:%s/foo.\{-}bar/baz/g

这个命令会将foobar之间的最少字符匹配并替换为baz

8.5 结合Vim插件进行搜索与替换

Vim有很多强大的插件可以增强搜索与替换功能。例如,使用vim-abolish插件进行复杂的替换:

:Abolish foo bar

这个命令会将所有形式的foo(例如FooFOO)替换为对应形式的bar

9. 总结

通过掌握Vim的搜索与替换功能,可以极大地提高文本编辑效率。无论是基本的查找和替换,还是复杂的正则表达式替换,Vim都提供了强大而灵活的工具。结合实际应用和代码示例,希望本篇教程能帮助你更好地利用Vim进行高效编辑。

标签:教程,bar,Vim,命令,搜索,Linux,foo,替换
From: https://blog.csdn.net/concisedistinct/article/details/140627340

相关文章

  • Centos 安装 Docker|教程
    准备工作系统要求Docker支持64位版本CentOS7/8,并且要求内核版本不低于3.10。CentOS7满足最低内核的要求,但由于内核版本比较低,部分功能(如overlay2存储层驱动)无法使用,并且部分功能可能不太稳定。卸载旧版本旧版本的Docker称为docker或者docker-engine,使用以下命......
  • C++多线程并发基础入门教程
    C++多线程并发基础入门教程《C++ConcurrencyinAction,SecondEdition》这本书深入浅出的讲解了C++多线程知识;如果英文水平足够好,可以查阅英文原版,它也有中文译本,虽然翻译过来的质量不如原版,但英文原版阅读太费精力;我推荐新手或者有一定经验的人看这本书。1什么是C++多......
  • 史上最全的Linux常用软件安装教程【包含Docker安装】
    @目录1.系统版本2.已安装软件(1)常规方式安装的软件(2)docker安装的软件注意3.修改IP步骤4.Tips1.防火墙2.设置jar包开机自启动方式一(强烈推荐):service形式方式二:sh形式多服务同时启动/关闭3.编辑文件4.开机免密登录root5.设置禁止自动锁屏6.安装搜狗输入法7.环境变量配置汇总8.Doc......
  • Linux随堂笔记
    以点开头的文件是隐藏文件,ls-a查看~家目录-rw-------,1rootroot907Jul1816:58anaconda-ks.cfg"-rw-------"表示文件权限,其中"-"表示普通文件,"rw-"表示所有者有读写权限,"---"表示组和其他用户没有任何权限。"1"表示文件的硬连接数。"rootroot"分别表示所有者和所属......
  • 2024-IDEA下载安装教程
    IDEA下载安装教程IDEA官网:IntelliJIDEA–theLeadingJavaandKotlinIDE(jetbrains.com)下载IDEA   双击运行ideaIU-2024.1.4.exe 安装     激活idea 链接:https://pan.baidu.com/s/1_lMVe0oODa-b4BrQJrpZTw?pwd=3456提取码:3456  ......
  • windows安装scoop教程
    Scoop简介Scoop是Windows的命令行安装程序,是一个强大的包管理工具。可以在github上找到其项目的相关信息,项目网址。安装的起因:在平常生活中如果要安装像gcc、git等一些需要手动配置相关参数的工具,需要先去官网下载安装程序,点击安装,之后还需要配置,不仅过程麻烦,而且工具多了之后整......
  • Linux 运维必备的13款实用工具
    1、查看进程占用带宽情况-NethogsNethogs是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。下载:http://sourceforge.net/projects/nethogs/files/nethogs/0.8/nethogs-0.8.0.tar.gz/download[root@localhost~]#yum-yinstalllibpcap-develncurses-devel[ro......
  • linux没熟练内容
    一:压缩与解压(1)xzfilename压缩文件unxzfilename解压文件xzfilename1filename2同时压缩两个文件(2)压缩目录tar-zcvf压缩文件名.tar.gz原名必须要有.tar.gz例如:tar-zxvftaiguowanmei.tar.gzdirectory(删除压缩包也用rm)解压tar-zxvf压缩文件名.tar.gz......
  • 搭载LSI SAS3908/3916 MR芯片的LSI-9560 服务器raid卡(史上最详细的保姆级使用教程)
    一、9560RAID卡型号配置介绍目前常用的基于SAS3908和SAS3916芯片的RAID卡分别为BCM9560-8i、BCM9560-16i。SAS3908/3916支持Legacy和UEFI两种启动方式,但在Legacy模式下不支持进行RAID配置,仅在UEFI模式下可以进行,因此,如果需要离线配置RAID组列,需切换到UEFI模式进行,本文主......
  • Linux 行文本处理工具sed
    sed(streameditor)是Linux和Unix系统中非常强大的文本处理工具,它可以对文本进行过滤和转换。sed以行为单位处理文本,可以通过读取输入文件(或标准输入),应用一系列的编辑命令,然后将结果输出到标准输出(通常是屏幕)或文件中。基本语法sed[选项]...{脚本-地址}{命令}[输入文件]......