vim的查詢與替換

2021-05-28 07:09:09 字數 3899 閱讀 5748

」 替換

:%s/fred/joe/igc : 普通替換命令

:%s/\r//g : 刪除 dos 的換行符 ^m

」 你的文字檔案是否亂七八糟的排成一行?使用如下命令

:%s/\r/\r/g : 轉換 dos 回車符 ^m 為真正的回車符

:%s= *$== : 刪除行尾空白

:%s= \+$== : 同上

:%s#\s*\r\?$## : 刪除尾部空白和dos換行符

:%s#\s*\r*$## : 同上

」 刪除空行

:%s/^\n\// : 刪除連續3個空行

:%s/^\n\+/\r/ : 壓縮空行,多個替換為乙個

:g/^$/d                             刪除所有空行  :這個好用有沒有人用過還有其他的方法嗎?

:g!/^dd/d                               刪除不含字串'dd'的行

:v/^dd/d                               同上  (譯釋:v  ==& nbspg!,就是不匹配!)

:g/str1/,/str2/d                    刪除所有第乙個含str1到第乙個含str2之間的行

:v/./.,/./-1join                       壓縮空行

:g/^$/,/./-j                           壓縮空行

」 如果你只想學一招,那麼就是這個了

:』a,』bg/fred/s/dick/joe/igc : 非常有用

# 」a,」b指定乙個範圍:mark a ~ mark b

# g//用乙個正規表示式指出了進行操作的行必須可以被fred匹配

# 看後面,g//是乙個全域性顯示命令

# s/dick/joe/igc則對於這些滿足條件的行進行替換

」 複製最後乙個字段

:%s= [^ ]\+$=&&= : 複製最後乙個字段

:%s= \f\+$=&&= : 一樣

:%s= \s\+$=&& : 一樣!

」 記憶(反向引用)

:s/\(.*\):\(.*\)/\2 : \1/ : 將兩個字段顛倒

:%s/^\(.*\)\n\1$/\1/ : 刪除重複行

」 非貪婪匹配 \

:%s/^.\pdf/new.pdf/ : 將第乙個pdf的名字換為new.pdf

」 使用可選原子 \?

:%s#\<[zy]\?tbl_[a-z_]\+\>#\l&#gc : 匹配tbl前面沒有字母,或者z和y中的某乙個字母,然後將所有的字母變為小寫

」 跨越盡量多的行

:%s/// : 刪除多行注釋

:help /\ : 檢視非貪婪匹配的更多幫助

」 使用暫存器替換

:s/fred/a/g : 將fred替換為暫存器a裡的內容,為按下ctrl與r,然後輸入a後,暫存器a的內容會出現在命令列

:s/fred/asome_texts/g

:s/fred/\=@a/g : 與第一條的作用相同,但是更優雅一些,因為不會在命令列顯示暫存器的內容

」 在一行裡寫多種命令

:%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/ : 將所有帶有.gif的行,前後均加入乙個空行;將不帶有.gif字樣的行全部刪除;將所有行中的gif換成jpg;注意三條語句,一旦某一條失敗,則不執行下面的語句

:%s/a/but/gie|:update|:next : 首先,將當前檔案中的所有a變為but;然後儲存檔案;最後進入下乙個檔案快取區。如果有多個檔案需要如此處理,可以考慮使用 @:來重複,@:的意義是:執行上一次的命令列命令n次。

」 或運算

:%s/suck\|buck/loopy/gc : 替換suck或者buck為loopy(這裡|不是管道)

」 呼叫vim函式

:s/__date__/\=strftime(「%c」)/ : 將__date__替換成當前日期,使用strftime函式。注意\=表示後面是表示式,結果可能是2008-1-3 17:59:46

」 處理字段,替換所有在第三個欄位中的str1為str2

:%s:\(\(\w\+\s\+\)\\)str1:\1str2:

」 交換第一列跟第四列

:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:

」 過濾form中的內容放在暫存器裡

:redir @*|sil exec 『g#<\(input\|select\|textarea\|/\=form\)\>#p』|redir end : redir是將執行的結果重定向到後面的*暫存器中,sil是silent

:nmap ,z :redir @*sil exec 『g@<\(input\select\textarea\/\=form\)\>@p』redir end: 普通模式下,敲入,z,命令列執行redir @*|sil exec 『g@<\(input\|select\|textarea\|/\=form\)\>@p』|redir end

」 一位以上的數字減3(帶進製,這個命令挺有趣)

:%s/\d\+/\=(submatch(0)-3)/

」 包含loc或者functions的行中的數字加6

:g/loc\|function/s/\d/\=submatch(0)+6/

」 比上面更好的方法

:%s#txtdev\zs\d#\=submatch(0)+1#g : \zs表示是s要匹配的的內容的開頭

:h /\zs 檢視幫助

」 字首為gg的數字加6

:%s/\(gg\)\@<=\d\+/\=submatch(0)+6/

:h zero-width 檢視幫助

」 替換乙個特定字串為數字

:let i=10 | 『a,』bg/abc/s/yy/\=i/ |let i=i+1 # 將yy轉換成10,11,12等等

」 比上面的更精確

:let i=10 | 『a,』bg/abc/s/xx\zsyy\ze/\=i/ |let i=i+1 # 將xxyy 轉換成 xx11(第一行),xx12(第二行),xx13(第三行)

」 發現要替換的文字,放入記憶體,然後使用\zs來簡化替換

:%s/」\([^.]\+\).*\zsxx/\1/ : \zs表示是s要匹配的的內容的開頭

」 將游標下的單詞,放入替換語句的lhs中

:nmap z :%s#\<=expand(「」)\># : 在沒有定義mapleader時為\,定義後為mapleader的值。lhs指的是s替換後面,被替換的內容(在左手邊)。普通模式下,如果游標下為abc,則輸入\z兩個字元,結果命令列出現:%s#\#,然後你就可以接著輸入替換後的內容了。

」 將可視模式下的高亮文字,放入替換語句的lhs中

:vmap z :%s/\<*\>/

—————————————-

」 以下功能相同,在替換語句內部進行替換

」 每行的一部分中,只執行多個單字元的替換

:%s,\(all/.*\)\@<=/,_,g : 用_替換all後的所有/,all/中的/不變

」 功能同上

:s#all/\zs.*#\=substitute(submatch(0), 『/』, 『_』, 『g』)#

」 通過將一行分開,然後重新組合,達到替換的效果

:s#all/#&^m#|s#/#_#g|-j! : 在windows下使用了mswin的模式,所以^m得輸入為\r,呵呵

」 在替換命令中使用替換

:%s/.*/\=』cp 『.submatch(0).』 all/』.substitute(submatch(0),』/',』_',』g')/ : 不work,因為all/後面的/和s所有的/有重複。所以我改為 :%s#.*#\=』cp 『.submatch(0).』 all/』.substitute(submatch(0),』/',』_',』g')#

Vim字元替換與查詢

1.字元替換 2.字元快速縮排 3.字元查詢 命令 r 待替換字母 將游標所在字母替換為指定字母 r連續替換,直到按下esc cc替換整行,即刪除游標所在行,並進入插入模式 cw替換乙個單詞,即刪除乙個單詞,並進入插入模式 c 大寫 替換游標以後至行末 反轉游標所在字母大小寫 u撤銷一次或n次操作 ...

vim中的查詢與替換

目錄 一.vim中查詢相關的操作 二.vim中的替換相關操作 在一般的編輯器中都有查詢和替換的功能,vim中也同樣有。1.在普通模式中,按下 鍵並輸入想要查詢的字串並回車,vim將從當前游標位置開始向下查詢。如果找到,游標將跳轉到第乙個結果的位置。按n將跳轉到下乙個。上圖中輸入 01 游標將跳轉到第...

Vim 查詢替換

查詢 向下查詢 向上查詢 n 繼續向下查詢 n 繼續向上查詢 下面 語法為 addr s 源字串 目的字串 option 全域性替換命令為 s 源字串 目的字串 g addr 表示檢索範圍,省略時表示當前行。如 1,20 表示從第1行到20行 表示整個檔案,同 1,從當前行到檔案尾 s 表示替換操作...