【Vim Masterclass 笔记10】S06L23:Vim 焦点利用训练之 —— 文本的搜索、
写在前面根据李笑来《自学是门技术》的发起,梳理完知识要点后又对这章内容制作了 Xmind 头脑导图,果然发现很多遗漏和生疏的细节。其实自学的很多诀窍都是老生常谈,观点普遍到几乎没人真正器重:预习、专注学习、复习、总结、学以致用……我们总以为看到的 99% 就是自学者的真实画像了,却往往忽略了紧张性和比例(至少在自学这个问题上)并没有正干系的联系,所以才对这样的老生常谈不屑一顾。发起对 Vim 感爱好的朋友也亲身整理一下头脑导图,信赖肯定会有惊喜。
S06L23 Search, Find, and Replace - Part Two
本课同步练习文件:vimclass/searching.txt。
1 文本更换下令 :s/old/new/
这里的 s 就是 substitute 的首字母,表示 “更换”。
例如,将下列文本行中的 net 更换为 org:
DOMAIN=example.net # The example.net doma in.
可以使用如下下令::s/net/org/
注意:末尾还有一个 /;并且该写法只能更换匹配的 第一个关键词。
若要实现全局更换,需加全局标记 g,语法为::s/old/new/,本例即为 :s/net/org/g
2 指定范围的文本更换
语法::s/old/new/,默认范围为 当前行。
此中, 范围有差别的写法:
[*]详细行号。例如,将第 1 行的 is 更换为 isn't,使用下令::1s/is/isn't/。
[*]详细行号范围。例如,将 1 ~ 5 行中的 for 全部更换为 FOR::1,5s/for/FOR/。
[*]使用特别行号标识:. 表示当前行,$ 表示最后一行。例如,从当前行到最后一行执行更换, 部分写作:.,$。
[*]用 % 表示全部行(即整个文件)。例如,将当前文件中的全部 net 更换为 org,写作::%s/net/org/g。
[*]范围的正则表示: 部分语法为 /pattern-1/,/pattern-2/。例如,从包罗 Global 的行开始,到包罗 Local 的行竣事,将 net 统一更换为 org::/Global/,/Local/s/net/org/g。
[*]也可以将 /pattern/ 和普通、特别行号一起使用。例如,将 net 全部更换为 org,指定范围从 Local 开始、并到当前文件末尾竣事,可以写作::/Local/,$s/net/org/g。
3 特例:路径的更换
特别情况下,如果必要用 :s/old/new/ 下令对 路径内容 进行更换,例如将 MAIL_PATH=/var/spool/mail 更换为 MAIL_PATH=/usr/local/mail。此时由于路径分隔符和 :s 下令的分隔符雷同(如 Linux、Unix、MacOS 等环境下),实现这类更换有两种方法:
[*]通例方法:使用 \ 进行转义,写作::s/\/var\/spool/\/usr\/local/
[*]使用其他字符作 :s 下令的分隔符,例如改为 #,写作::s#/var/spool#/usr/local#。
第一种方法虽然简朴,但可读性很差,也很轻易出错。第二种方式更加简便灵活,因此强烈推荐使用第二种。除了用 # 分隔,还可以用管道符号 | 或者 : 进行分隔,只要是 单个的非数字、非字母字符(single non-alphanumberic character) 即可。
注意
其实 /var/spool 前面的 / 可以不到场更换,这样更简便。但为了更好地演示自定义 :s 下令的分隔符,照旧决定保留下来以示区别。
4 文件行号的配置
本节反复提到文件行号的使用,是时候好好讲讲行号的配置了:
行号状态行号配置下令开启行号:set nu关闭行号:set nonu查察当前状态:set nu?切换行号开关:set nu! 注意:nu 的全称为 number,上述下令也可以使用 number 更换 nu。查察当前状态时,若未启用行号,Vim 状态栏将显示 nonumber;已开启行号则显示 number:
https://i-blog.csdnimg.cn/direct/1060958280914e2eb05fde871a6d257a.png#pic_center
【图 1:使用 :set nu? 下令显示的差别 Vim 状态对比情况】
5 要点总结
这是官方给的知识点梳理,感觉没我自己整理的头脑导图过细(哈哈)
(1)搜索当前行(Same Line Searching)
[*]f{char}:Forward search
[*]F{char}:Reverse search
[*]t{char}:Forward till search
[*]T{char}:Reverse till search
[*];:Repeat in the same direction
[*],:Repeat in the opposite direction
(2)跨行搜索(Searching)
[*]/{pattern}:Forward search
[*]?{pattern}:Reverse search
[*]n:Repeat search in the same direction
[*]N:Repeat search in the opposite direction
[*]*:Forward search for word
[*]#:Reverse search for word
(3)更换下令(Substitute Command)
语法::s/{pattern}/{string}/
例如在当前文件内实现全局更换::%s/{pattern}/{string}/g
此外,还可以在下令前添加数量词 ,或者与 motion 利用进行组合,实现更多灵活多变的更换效果。
最后,给出我自己归纳的 L22~L23 Vim 查找与更换的头脑导图:
https://i-blog.csdnimg.cn/direct/5eb0935402fd44cdbe8c20d5569aba79.png#pic_center
【图 2:Vim 查找与更换部分(L22 + L23】
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]