【vim】搜索与替换

1. 搜索

命令 功能 备注
* 向下搜索光标所在处的词 n下一个,N上一个
# 向上搜索光标所在处的词 同上
[+<Ctrl>+i 跳转到光标所在处的变量的声明 使用tag
[+<Ctrl>+d 跳转到光标所在处的宏的定义 使用tag
ycm定位命令 跳转到光标所在处的变量的声明或定义

YouCompleteMe插件的功能,可以使用以下3个命令,
不过一般是用快捷键:

:YcmCompleter GoToDeclaration
:YcmCompleter GoToDefinition
:YcmCompleter GoToDefinitionElseDeclaration

/<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:
:vimgrep abc *.cpp
如果想搜索子目录,是这样
:vimgrep abc **/*.cpp

出来的结果在quickfix窗口,用命令:cw呼出

 

2. 替换

命令 功能 备注
<scope>s/<pattern>/<str>[/<option>] 把scope指定的范围内匹配pattern的所有字符串
替换为str,option为可选参数

带option时,前面要加/
举例
:%s/abc/xyz/gc
将当前文件中所有abc替换为xyz,并在替换前进行确认

选项g:替换每一行所有abc,如果不加只替换第一个
选项c:替换前询问用户进行确认,用户可以选择y确认,
n否认并跳到下一个匹配,q停止,a不要再询问了全部yes

:args <files>
:argdo <scope>s/<pattern>/<str>[/<option>]
在文件<files>中把scope指定的范围内匹配pattern
的所有字符串替换为str,option为可选参数

各参数说明同上。举例
:args *.txt *.cpp
:argdo %s/hate/love/gc | update
将当前目录下所有txt和cpp文件中的hate替换为love,
每次替换前确认;update命令会在文件有改变时进行
保存。

注意:文件中替换操作不可恢复,请仔细操作,做好备份

vim很多操作都带范围参数,替换命令也不例外。上述命令中的%代表范围为所有行,另外还有m, n意思是从第m行到第n行。

3. 小技巧

3.1 将正文中的一段文本复制到命令行

先复制,到命令行后,<Ctrl>+r+" ("是<Shift>+’按出来的).

另外,再提醒一下:
<Ctrl>+p是自动输入上一次命令,<Ctrl>+n是自动输入下一次命令,
<Ctrl>+b是跳到命令行首,<Ctrl>+e是跳到命令行尾

3.2 替换 \n 换行符

场景:

用 VIM 编辑文本文件,想在每一行的换行之前,添加一个字符,比如 “;”。

想到替换命令:

:%s/\n/;\n/g

结果总是出错。

后来找到解决方案:

:%s/\n/;\r/g

有人总结的结论:

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)。

更多细节可以参考 http://vim.wikia.com/wiki/Search_and_replace

3.3 清除所有 ^M 

一些在windows上编辑的文件拷贝到linux上时行尾可能会出现^M,有时希望替换掉,命令如下
:%s/<Ctrl>+v <Ctrl>+m//g

就是 Control 键+V,然后再 Control 键 + M,就变成了 ^M,然后替换为空就可以了。

posted @ 2015-08-28 10:31  赵子清  阅读(3772)  评论(1编辑  收藏  举报