结识substitute命令
:[rangs]s[ubstitute]/{pattern}/{string}/[flags]
利用标志位调整substitue命令的行为
标志位g使得substitutem命令可在全局范围内执行,即可以修改一行内的所有匹配,而不仅仅是第一处匹配。
标志位c让我们有机会可以确认或拒绝每一处修改。
标志位n会抑制正常的替换行为,即让vim不执行替换操作,而只是报告本次substitute命令的匹配的个数。
标志位e用于屏蔽这些错误提示。
标志位&仅仅用于指示vim重用上一次substitute命令所用过的标志位。
替换域中的特殊字符
符号 | 描述 |
\r | 插入一个换行符 |
\t | 插入一个制表符 |
\\ | 插入一个反斜杠 |
\1 | 插入第1个子匹配 |
\2 | 插入第2个子匹配 |
\0 | 插入匹配模式的所有内容 |
& | 插入匹配模式的所有内容 |
~ | 使用上一次调用:substitute时的{string} |
\={vim script} | 执行{Vim script}表达式,并将返回的结果作为替换{string} |
手动控制每一次替换操作
:%s/content/copy/gc
答案 | 用途 |
y | 替换此处匹配 |
n | 忽略此处匹配 |
q | 退出替换工程 |
l | “last”-替换此处后退出 |
a | “all”-替换此处与之后所有的匹配 |
<C-e> | 向上滚动屏幕 |
<C-y> | 向下匹配屏幕 |
执行substitute命令通常包括两个步骤,一是撰写查找模式,二是设计合适的替换字符串。
在命令行中输入<C-r>/,即可把上次的查找内容粘贴进来。
用寄存器的内容替换
将替换域留空,意味着substitute命令会用空的字符串替换每一处匹配。即所有的匹配被删除了。
<C-r>{register},我们可以将寄存器的内容插入到替换域。
=》:%s//<C-r>0/g
当我们输入<C-r>/0时,Vim会把寄存器0的内容粘贴进来,这意味着我们可以在执行substitute命令之前对其进行一番检查。
重复上一次substitute命令
:&&命令,这两处&符号的含义有所不同。前一个&作为Ex命令:&的组成部分,用作重复上一次的:substitute命令(参见:h :&),而第二个&则会重用上一次:s命令的标志位。
:&&命令本身只作用于当前行,:’<,’>&&会作用于高亮选区,而:%&&会作用于整个文件。g&命令作为:%&&的快捷方式。
在替换过程中执行算术运算
查找模式、substitute命令
交换两个或更多的单词
返回一个单词
:h submatch(0) only for an expression in a :substitute command. Returns the {nr}’th sub match of the matched text. When {nr} is 0 the whole matched text is returned.
Abolish.vim:超级substitute命令,https://github.com/tpope/vim-abolish
:%S/{man,dog}/{dog,man}/g 实现单词man和dog之间的交换操作。
在多个文件中执行查找与替换操作
为了在工程范围内执行查找操作,我们将用到:vimgrep命令
/Pragmatic\ze Vim
:vimgrep /<C-r>// **/*.txt
:Qargs
:argdo %s//Practical/g
:argdo update
最后3条命令可以连起来使用,:Qargs | argdo %s//Practical/g | update