Vim查找与替换命令大全,功能完爆IDE!
Vi/Vim 可以说是文本编辑中的一代传奇人物,直至现在,它仍然在高级程序员的武器库中占有一席之地。每个 Linux 发行版默认都包含Vim ,而且即使你不是 Linux 系统用户,你也可以安装 Vim 。
为什么到现在还来讲这款古老的软件?因为它牛逼啊!它包含几乎所有功能的轻量级键盘快捷键、内置表达式搜索,以及强大而又稳定的插件生态系统。就连其他现代文本编辑器功能,如漂亮的语法高亮,它也有。你会在不知不觉中爱上这款文本编辑神器。
回到主题,我们今天就来学习 Vim 中的文本搜索和替换功能,帮助你更好地使用 Vim 这款神器。如果你想学习更多 Vim 操作,可以在公众号「良许Linux」后台回复「资料」,有我整理的电子书和视频。
演示文件创建
为了更好的讲解后续内容,我们首先需要准备一个演示文件。在这里,我生成了一个包含系统上所有已安装软件包的文本文件 PackageList.txt
来作为演示文件。
cat PackageList.txt
现在,我们在 Vim 中打开这个文本文件。之后,我们就在这个文件里进行后续的操作演示。
vim PackageList.txt
Vim 搜索功能
在 Windows 下,很多软件的搜索功能可以使用 ctrl+F 组合键调出搜索框,然后完成后续的搜索。但在 Vim 里,我们需要使用以下命令结构实现搜索功能:
?<search_string>
例如,我们想要在 PackageList.txt 文件里搜索 python
这个关键词,可以这样操作:
?python
默认情况下,搜索会定位到一个离当前光标最近的一个匹配结果。如果我们想要转到下一个/上一个搜索结果,请使用以下按键:
- n – 寻找下一个匹配结果
- N – 寻找上一个匹配结果
注意:在使用上述按键之前,请不要忘记按 Enter
键。否则,搜索词将会被改变!
上面的只是 Vim 下搜索的基本功能,如果你认为这是它的全部搜索功能,那真是图样图森破。接下来,我们来尝试一下更强大的搜索功能。
先给出搜索格式:
/\<search_string>/>
这里,\<
表示字符串开始,/>
表示字符串结束,中间的就是需要搜索的字符串表达式。
与前面的示例一样,使用 n
或 N
来导航搜索结果。
中间的字符串表达式,不仅支持直接输入关键词,还支持使用通配符。例如,我们要搜索以 python-
开头的字符串,可以使用 python*
。这里 *
表示匹配任意字符。
/\<python*/>
搜索结束后,Vim 会默认将光标放在匹配的关键词的起始字符处。
不喜欢光标的默认定位?没关系,Vim 允许我们更改光标定位的默认字符位置。
/python/e
这里,e
的作用是将光标定位到匹配关键词的末尾字符。
不仅如此,使用以下命令模式,你还可以将光标定位在搜索结果的下方或上方。
/<search_string>/+2
or
/<search_string>/-3
你也可以从搜索匹配结果的开头/结尾偏移光标。例如,以下命令将光标定位在开头旁边的3个字符处。
/<search_string>/s+3
/<search_string>/b+3
这里,s
表示开头,+3
表示从开头开始的第 3 个字符。b
也代表开始(begin),它的功能类似于 s
。从截图中也可以看出,Vim 会自动将 b
翻译为 s
。
如果有兴趣从搜索匹配结果的末尾进行偏移,请使用 e
(end)。
/<search_string/e-2
下面是对文本文件执行搜索的另一种很棒的方法。
:%s/<search_pattern>//gn
这条命令具体有啥高大上的作用?我们这里先卖个关子,请继续往下读。如果你想学习更多 Vim 操作,可以在公众号「良许Linux」后台回复「资料」,有我整理的电子书和视频。
Vim 字符串替换
查找和替换是任意一款文本编辑器的一组常见和必备功能。下面就来讲解 Vim 中的字符串替换功能。
Vim 使用以下命令结构实现替换功能。
:<range> s/<search_string>/<replace_string>/<modifier>
- range - 定义执行“查找和替换”函数的范围,有两个不同的值
- % - 对整个文件执行
- < start _line > < end_line > - 在一组特定的行上面执行操作
- search_string - 需要替换的字符串
- replace_string - 替换旧字符串的新字符串
- modifier - 确定替换行为,有几个不同的值
- g - 全局替换
- gc - 在每次更换之前要求确认
- gn - 忽略替换功能并突出显示查找结果。
例如,在 PackageList.txt 文件里用 Python3
字符串替换所有 python
字符串。
:%s/python/Python3/g
简单吧?我们再看看下面这条命令。
:%s/python/Python3/gc
可以看出来,它在底部询问你是否要进行替换操作。这时,你可以选择一些操作。那这几个是代表什么意思呢?我们一个个来看。
- y - 允许执行更改。
- n - 禁止执行更改。
- a - 替换全部。
- q - 退出任务。
- l - 只需替换这种情况。然后,退出。
- ^E(Ctrl + E) - 向上滚动屏幕
- ^Y(Ctrl + Y) - 向下滚动屏幕
接下来,我们来试试范围这一个域。其实,我们在前面的例子里,已经使用了 %
范围(对整个文件范围)。
如果我们不想在整个文件范围进行查找替换,如果我们只想在某几个特定行进行这种操作,需要怎么做?我们可以采用类似于以下命令格式:
:200,250 s/python/Python3/g
执行完以上操作,Vim 会将第 200 行开始并在第 250 行结束的所有 python
替换为 Python3
。
此功能不仅限于一个词,还可以完成对多个关键词的替换。它的命令格式如下:
:%s/<search_term_1>\|<search_term_2>\|<search_term_3>/<replace_string>/g
比如,让我们想要将文本中所有 python
和 py
更改为 Python3
。
:%s/python\|py/Python3/g
区分大小写
本文前面提到的所有替换操作都是区分大小写的。例如,Python
,python
,PYTHON
等都是不同的。
如果你要忽略大小写,可以在搜索字符串后面加上一个 \c
,如下:
/<search_term>\c
:%s/<search_term>\c/<replace_term>/g
但这个设置是临时性的,Vim 关闭之后就会失效。如果你想一劳永逸,也可以从 vimrc文件
直接设置不区分大小写。
set ignorecase
还有一个有趣的做法:智能大小写模式。
set smartcase
ignorecase
将强制 Vim 忽略大小写。但是,如果搜索关键词中只要有大写字母,smartcase
将使 Vim 再次变为区分大小写。
注意:如果要启用 smartcase
,首先需要设置 ignorecase
。
结论
Vim 可以帮助你做很多事情,多加耐心地练习,相信你会越来越喜爱这款古老的神器。
看完的都是真爱,点个赞再走呗?您的「三连」就是良许持续创作的最大动力!
- 关注原创公众号「良许Linux」,第一时间获取最新Linux干货!
- 公众号后台回复【资料】【面试】【简历】获取精选一线大厂面试、自我提升、简历等资料。
- 关注我的博客:lxlinux.net
Vim查找与替换命令大全,功能完爆IDE!的更多相关文章
- vim 查找和替换命令 替换/n和\n
一. 字符串的查找 1. vim 中用 / 和 ? 来查找字符串,两者的区别是: /string 会高亮显示光标后匹配的第一个字符串,回车后光标移到该字符串的第一个字母: ?string 会高亮显示光 ...
- linux几种常见的文件内容查找和替换命令
作为一个以前没怎么接触过linux的小白,开始使用linux,各种不习惯,这周遇到一个文件内容测查找和替换的需求.学习了以下几种实现方式: 1.vi命令下的查找和替换 1.1 vi下的查找 /patt ...
- vim 查找与替换
一.vim 查找 1. 正向查找 / 与 反向查找 ? 2. 退出查找 <Esc> 3. 跳转到下一处匹配 n ,跳转到上一处匹配 N 4. /<CR> 正向跳转到相同模式的下 ...
- Vim常用匹配、查找、替换命令总结
以前都是从头开始找,最近处理log文件很多. 在vim 中输入 :1?XXXX 1的意思是文件的第一行 ?的意思是反向查找 XXXX就是你要找的关键字 更新:Linux 从末尾开始查找日志 tac c ...
- Ubuntu中的在文件中查找和替换命令
分类: 9.Linux技巧2009-09-29 13:40 1429人阅读 评论(0) 收藏 举报 ubuntujdbc 1.查找 find /home/guo/bin -name /*.txt | ...
- vim -- 查找和替换
%s/foo/bar/g 在所有行中寻找‘foo’,并且用‘bar’替换 :s/foo/bar/g 在当前行寻找‘foo’,并且用‘foo’替换 :%s/foo/bar/gc 将每一个‘foo',并用 ...
- vim 查找并替换多个匹配字符
通常我们在使用vim的使用需要查找文档中是否含有需要的字符 1.vim 1.txt进入文档编辑 2.输入/键,再输入需要查找的字符,或者输入?键再输入需要查找的字符 3.查找到后可以enter进去,再 ...
- vim 查找及替换
#全文(%)查找(s)行首2个空格开头(/^ ), 替换(g)为无即删掉(//) :%s/^ //g #全文查找每行尾的2个空格,删除 :%s/ $//g
- Vim查找与替换
\c 忽略大小写 \C 强制区分大小写 \v 除了_.字母.数字以为的所有字符都当做具有特殊含义的字符 \V 只有反斜杠有特殊含义 %s///gn 统计某个词出现的次数 替换的flag g 全局范围执 ...
随机推荐
- 基于springcloud搭建项目-Hystrix篇(五)
1.概述 (1).首先要知道分布式系统面临的问题复杂分布式体系结构中应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败 (2).服务雪崩 多个服务之间相互调用的时候,假设微服务A调用微服 ...
- 教你高效使用数据可视化BI软件创建医院卫生耗材运营监控大屏
灯果数据可视化BI软件是新一代人工智能数据可视化大屏软件,内置丰富的大屏模板,可视化编辑操作,无需任何经验就可以创建属于你自己的大屏.大家可以在他们的官网下载软件. 本文以医院卫生耗材运营监控大屏 ...
- plist 图集 php 批量提取 PS 一个个切
最近,迷上了用 cocos2d 做游戏开发.由于是新入门,很多东西从头开始学. 在使用 sprite 的 Rect 裁剪显示的时候,显示总是多一块.所以,要从图集中提取一张张图,这样就省了裁剪. 原图 ...
- Fabric 源码学习:如何实现批量管理远程服务器?
前不久,我写了一篇<Fabric教程>,简单来说,它是一个用 Python 开发的轻量级的远程系统管理工具,在远程登录服务器.执行 Shell 命令.批量管理服务器.远程部署等场景中,十分 ...
- JavaScript规范----DOM操作
一般通过JS代码操作DOM结构,会触发浏览器进行页面渲染.所以要尽量减少DOM操作,避免频繁的页面渲染对性能造成影响. 如有以下场景:程序执行ajax请求,并根据请求结果动态添加列表项.常见的做法是循 ...
- (转)bss段和.data的是是非非
原文地址:http://zqwt.012.blog.163.com/blog/static/12044684201101214457186/ 一般情况下,一个程序本质上都是由 bss段.data段.t ...
- 阅读GitHub源码的正确打开方式
前言 近来发现阅读开源项目上手就整最新的代码不合适,缺少项目迭代的具体实现过程,想着若是可以看到针对问题的提交代码就好了,所以就有了本篇博客. 以文主要涉及:如何fork开源项目,如何保证本地仓库代码 ...
- C语言-转义字符
%d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %X 无符号以十六进制表示的整数 ...
- 金三银四,还在为spring源码发愁吗?bean生命周期,看了这篇就够了
第一,这绝对是一个面试高频题. 比第一还重要的第二,这绝对是一个让人爱恨交加的面试题.为什么这么说?我觉得可以从三个方面来说: 先说会不会.看过源码的人,这个不难:没看过源码的人,无论是学.硬背.还是 ...
- HTML基本标签,表格标签,框架标签
1.html简介 1.1什么是html html全称:Hyper Text Markup Language(超文本标记语言) 备注: a.超文本:页面内可以包含图片.链接,甚至音乐 ...