1. 搜索
| 命令 |
功能 |
备注 |
| * |
向下搜索光标所在处的词 |
n下一个,N上一个 |
| # |
向上搜索光标所在处的词 |
同上 |
| [+<Ctrl>+i |
跳转到光标所在处的变量的声明 |
使用tag |
| [+<Ctrl>+d |
跳转到光标所在处的宏的定义 |
使用tag |
| ycm定位命令 |
跳转到光标所在处的变量的声明或定义 |
YouCompleteMe插件的功能,可以使用以下3个命令, 不过一般是用快捷键:
:YcmCompleter GoToDeclaration :YcmCompleter GoToDefinition :YcmCompleter GoToDefinitionElseDeclaration
|
| /<pattern> |
向下搜索模式<pattern> |
<pattern>不仅是简单的字符串,还可以是复杂的正则表达式 |
| ?<pattern> |
向上搜索模式<pattern> |
同上 |
| :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 编辑文本文件,想在每一行的换行之前,添加一个字符,比如 “;”。
想到替换命令:
结果总是出错。
后来找到解决方案:
有人总结的结论:
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,然后替换为空就可以了。
原文:http://www.cnblogs.com/zzqcn/p/4687577.html