【vim】搜索与替换
1. 搜索
命令 | 功能 | 备注 |
* | 向下搜索光标所在处的词 | n下一个,N上一个 |
# | 向上搜索光标所在处的词 | 同上 |
[+<Ctrl>+i | 跳转到光标所在处的变量的声明 | 使用tag |
[+<Ctrl>+d | 跳转到光标所在处的宏的定义 | 使用tag |
ycm定位命令 | 跳转到光标所在处的变量的声明或定义 |
YouCompleteMe插件的功能,可以使用以下3个命令, :YcmCompleter GoToDeclaration |
/<pattern> | 向下搜索模式<pattern> | <pattern>不仅是简单的字符串,还可以是复杂的正则表达式 |
?<pattern> | 向上搜索模式<pattern> | 同上 |
/\c<pattern> ?\c<pattern> |
不区分大小写地搜索<pattern> | 小写字母c |
/\C<pattern> /\C<pattern> |
区分大小写地的搜索<pattern> | 大写字母C |
:set ic :set ignorecase |
设定为不区分大小写的搜索模式 | |
:set noic :set noignorecase |
设定为区分大小写的搜索模式 | 默认为区分大小写 |
:vimgrep <pattern> <files> | 在文件中搜索模式<pattern> |
比如在当前目录所有.cpp文件中搜索abc: 出来的结果在quickfix窗口,用命令:cw呼出 |
2. 替换
命令 | 功能 | 备注 |
<scope>s/<pattern>/<str>[/<option>] | 把scope指定的范围内匹配pattern的所有字符串 替换为str,option为可选参数 |
带option时,前面要加/ 选项g:替换每一行所有abc,如果不加只替换第一个 |
:args <files> :argdo <scope>s/<pattern>/<str>[/<option>] |
在文件<files>中把scope指定的范围内匹配pattern 的所有字符串替换为str,option为可选参数 |
各参数说明同上。举例 注意:文件中替换操作不可恢复,请仔细操作,做好备份 |
vim很多操作都带范围参数,替换命令也不例外。上述命令中的%代表范围为所有行,另外还有m, n意思是从第m行到第n行。
3. 小技巧
3.1 将正文中的一段文本复制到命令行
先复制,到命令行后,<Ctrl>+r+" ("是<Shift>+’按出来的).
另外,再提醒一下:
<Ctrl>+p是自动输入上一次命令,<Ctrl>+n是自动输入下一次命令,
<Ctrl>+b是跳到命令行首,<Ctrl>+e是跳到命令行尾
3.2 替换 \n 换行符
场景:
用 VIM 编辑文本文件,想在每一行的换行之前,添加一个字符,比如 “;”。
想到替换命令:
结果总是出错。
后来找到解决方案:
有人总结的结论:
When searching: \n is newline, \r is CR (carriage return = Ctrl-M = ^M)
When replacing: \r is newline, \n is a null byte (0×00).
意思是:
字符串查找时,”\n” 是换行,”\r” 是回车,也就是经常会看到的 ^M(备注-1)。
字符串替换时,”\r” 是换行,’\n” 是空字符(0×00)。
3.3 清除所有 ^M
:%s/<Ctrl>+v <Ctrl>+m//g
就是 Control 键+V,然后再 Control 键 + M,就变成了 ^M,然后替换为空就可以了。