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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM