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

宁睿  论坛元老 | 2024-9-29 21:03:41 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 2062|帖子 2062|积分 6196

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
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中,使用/下令可以进行向前搜索。例如:
  1. /foo
复制代码
这个下令会从当前光标位置向后搜索foo。输入下令后按Enter,Vim会高亮体现所有匹配的效果,并将光标移动到第一个匹配项。
1.2 向后搜索

使用?下令可以进行向后搜索。例如:
  1. ?bar
复制代码
这个下令会从当前光标位置向前搜索bar。同样地,按Enter后,Vim会高亮体现所有匹配的效果,并将光标移动到第一个匹配项。
1.3 重复上一次搜索

搜索下令执行后,可以使用n和N来重复上一次搜索:


  • n:在相同方向上搜索下一个匹配项。
  • N:在相反方向上搜索下一个匹配项。
1.4 高亮体现搜索效果

在Vim中,默认环境下搜索效果会被高亮体现。如果没有高亮体现,可以使用以下下令启用高亮:
  1. :set hlsearch
复制代码
要关闭高亮体现,可以使用:
  1. :set nohlsearch
复制代码
1.5 区分大小写搜索

默认环境下,Vim的搜索是不区分大小写的。要启用区分大小写的搜索,可以使用:
  1. :set ignorecase
  2. :set smartcase
复制代码
使用ignorecase时,所有搜索都将不区分大小写。而smartcase的作用是:如果搜索模式包罗大写字母,则区分大小写;否则,不区分大小写。
2. 高级搜索技巧

2.1 搜索并跳转到特定行

如果知道某个单词或短语在特定行,可以使用以下下令直接跳转:
  1. :123
复制代码
这个下令会将光标移动到第123行。然后可以结合搜索下令,例如:
  1. :123
  2. /foo
复制代码
2.2 搜索并跳转到特定列

虽然Vim没有直接跳转到特定列的下令,但可以通过搜索实现。例如,要跳转到当前行中的第一个x字符:
  1. /^.\{5}x
复制代码
这个下令会查找当前行中第6个字符是x的位置(因为Vim的列数从0开始)。
2.3 搜索并高亮特定模式

如果需要在整个文档中高亮特定模式,可以使用以下下令:
  1. :match Search /pattern/
复制代码
例如:
  1. :match Search /TODO/
复制代码
这个下令会高亮所有包罗TODO的行。
2.4 搜索历史

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

在Vim中,可以在搜索效果的基础上进行替换。例如,要将文档中的所有foo替换为bar,可以使用以下下令:
  1. :%s/foo
  2. /bar/g
复制代码
3. 根本替换功能

3.1 替换当前行

要在当前行中替换某个模式,可以使用以下下令:
  1. :s/foo
  2. /bar/
复制代码
这个下令会将当前行中的第一个foo替换为bar。
3.2 替换整篇文档

要在整个文档中进行替换,可以使用以下下令:
  1. :%s/foo
  2. /bar/g
复制代码
这个下令会将文档中的所有foo替换为bar。其中,%体现整个文档,g体现全局替换。
3.3 替换特定范围

可以指定替换的行范围。例如,替换第10行到第20行中的所有foo:
  1. :10,20s/foo
  2. /bar/g
复制代码
3.4 替换并确认

在替换时,如果需要逐一确认,可以加上c选项:
  1. :%s/foo
  2. /bar/gc
复制代码
这个下令会在每次替换前询问用户是否确认替换。
3.5 替换并保留备份

在进行替换操纵前,可以保留原文档的备份。使用:w下令保存备份:
  1. :w backupfile.txt:%s/foo
  2. /bar/g
复制代码
4. 高级替换技巧

4.1 使用正则表达式替换

Vim的替换下令支持正则表达式。例如,要将所有单词foo后面紧跟的数字替换为bar,可以使用:
  1. :%s/\<foo\>\d\+/bar/g
复制代码
4.2 替换包罗特殊字符的文本

如果要替换的文本包罗特殊字符,可以使用反斜杠进行转义。例如,要将所有包罗$的文本替换为dollar:
  1. :%s/\$/dollar/g
复制代码
4.3 多行替换

Vim允许跨行替换。例如,要将跨行的foo和bar替换为foobar:
  1. :%s/foo
  2. \nbar/foo
  3. bar/g
复制代码
4.4 执行复杂替换

对于复杂的替换操纵,可以结合Vim脚本进行。例如,要将所有foo替换为bar,并在替换过程中执行某些操纵:
  1. :let @a=':s/foo
  2. /bar/g':@a
复制代码
4.5 使用替换下令中的特性

Vim的替换下令中包罗很多有用的特性,例如替换中的&符号体现之前的匹配项:
  1. :%s/\<foo\>/\=submatch(0) . "bar"/g
复制代码
这个下令会将所有foo替换为foobar。
4.6 跨多个文件进行替换

在Vim中可以使用:argdo下令跨多个文件进行替换。例如,要将当前目录下的所有文件中的foo替换为bar:
  1. :argdo %s/foo
  2. /bar/g | update
复制代码
5. 实用技巧

5.1 快速跳转到搜索效果

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


  • *:向前搜索光标下的单词。
  • #:向后搜索光标下的单词。
5.2 使用搜索历史

可以使用方向键(上、下)查看和编辑之前的搜索下令。例如,按/后,按上键可以查看之前的搜索下令。
5.3 结合外部工具

Vim支持结合外部工具进行搜索和替换。例如,可以使用grep下令在多个文件中搜索:
  1. :!grep -rnw '/path/to/somewhere/' -e 'pattern'
复制代码
5.4 高效处理大文件

对于大文件,可以使用分块搜索和替换。例如,分块处理10行:
  1. :1,10s/foo
  2. /bar/g:11,20s/foo
  3. /bar/g
复制代码
5.5 使用Vim脚本自动化操纵

可以编写Vim脚本自动化搜索和替换操纵。例如,编写一个脚本文件replace.vim:
  1. " replace.vim% s/foo
  2. /bar/g
复制代码
然后在Vim中加载脚本:
  1. :source replace.vim
复制代码
5.6 保存搜索和替换效果

可以将搜索和替换的效果保存到文件。例如,使用redir下令:
  1. :redir > output.txt:%s/foo
  2. /bar/g:redir END
复制代码
6. 实用代码

以下是一些使用Vim进行搜索和替换的实际代码示例:
  1. " 打开文件:e example.txt" 高亮体现所有包罗 TODO 的行:match Search /TODO/
  2. " 将所有 TODO 替换为 DONE:%s/TODO/DONE/g" 在替换前确认:%s/TODO/DONE/gc" 替换包罗特殊字符 $ 的文本:%s/\$/dollar/g
  3. " 使用正则表达式进行替换:%s/\<foo\>\d\+/bar/g
  4. " 使用外部工具 grep 搜索:!grep -rnw '/path/to/somewhere/' -e 'pattern'
  5. " 将效果保存到文件:redir > output.txt:%s/foo
  6. /bar/g:redir END" 结合脚本进行自动化替换:let @a=':s/foo
  7. /bar/g':@a
复制代码
7. 搜索与替换的具体应用场景

7.1 大规模代码重构

在软件开发过程中,经常需要对代码进行大规模重构。Vim的搜索与替换功能可以资助开发者快速地重定名变量、函数名或类名。例如:
  1. :%s/oldFunctionName/newFunctionName/g
复制代码
7.2 批量修改设置文件

在运维和开发过程中,经常需要批量修改设置文件。例如,将所有设置文件中的某个设置项的值进行同一修改:
  1. :argdo %s/oldValue/newValue/g | update
复制代码
7.3 文档编辑

在撰写和编辑长文档时,Vim的搜索与替换功能可以资助快速进行全局修改。例如,将所有出现的特定术语替换为更合适的术语:
  1. :%s/oldTerm/newTerm/g
复制代码
7.4 数据洗濯

在处理大规模文本数据时,Vim的正则表达式替换功能可以资助进行数据洗濯。例如,将所有不符合格式的电话号码进行同一格式化:
  1. :%s/\(\d\{3\}\)-\(\d\{3\}\)-\(\d\{4\}\)/(\1) \2-\3/g
复制代码
7.5 代码审查与优化

在代码审查和优化过程中,使用Vim的搜索与替换功能可以快速定位和修改代码中的潜在题目。例如,将所有的printf函数替换为fprintf以便更好地控制输出:
  1. :%s/\<printf\>/fprintf/g
复制代码
8. 进阶搜索与替换下令

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

在Vim中,可以通过设置文件类型来进行特定文件的搜索和替换。例如,只在.c文件中搜索:
  1. :args **/*.c:argdo %s/foo
  2. /bar/g | update
复制代码
8.2 搜索并跳转到下一个匹配项

在搜索后,可以使用Ctrl + o和Ctrl + i在搜索效果之间跳转:


  • Ctrl + o:跳转到上一个位置。
  • Ctrl + i:跳转到下一个位置。
8.3 结合Vim的模式进行搜索与替换

Vim的下令模式、可视模式和插入模式都可以结合搜索与替换功能。例如,在可视模式下选中一段文本并进行替换:
  1. v:s/foo
  2. /bar/g
复制代码
8.4 搜索与替换中的高级正则表达式

Vim的正则表达式支持很多高级特性,例如非贪心匹配、反向引用等。例如,非贪心匹配:
  1. :%s/foo
  2. .\{-}bar/baz/g
复制代码
这个下令会将foo和bar之间的最少字符匹配并替换为baz。
8.5 结合Vim插件进行搜索与替换

Vim有很多强大的插件可以增强搜索与替换功能。例如,使用vim-abolish插件进行复杂的替换:
  1. :Abolish foo bar
复制代码
这个下令会将所有形式的foo(例如Foo、FOO)替换为对应形式的bar。
9. 总结

通过把握Vim的搜索与替换功能,可以极大地进步文本编辑服从。无论是根本的查找和替换,照旧复杂的正则表达式替换,Vim都提供了强大而机动的工具。结合实际应用和代码示例,盼望本篇教程能资助你更好地使用Vim进行高效编辑。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表