」 替換
:%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_]\+\>#\lgc : 匹配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 表示替換操作...