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,然后替換為空就可以了。
