再談Vim substitute替換命令

Vim替換命令一文介紹過歉甚,substitute 命令的語法格式為::[range]s[ubstitute]/{pattern}/{string}/[flags]罗洗。

[flags] 表示可選的標志位,常用的包括 g物独、cne 等现斋。其中,標志位 g 使得 substitute 命令可以修改一行內(nèi)的所有匹配偎蘸,而不僅僅是第一處匹配庄蹋;標志位 c 可以確認或拒絕每一處修改;標志位 n 讓 Vim 不執(zhí)行替換操作迷雪,而只是統(tǒng)計和顯示本次 substitute 命令匹配的個數(shù)限书;標志位 e 專門用于屏蔽錯誤提示;標志位 & 用于指示 Vim 重用上一次 substitute 命令所用過的標志位章咧。

一倦西、Vim substitute命令的操作范圍

為了便于理解,可以將整個文件想象成一個二維平面慧邮,字符沿著 x 軸向右增加调限,而文本行則隨著 y 軸向下增長。缺省情況下误澳,substitute 命令僅僅作用于當前行耻矮,而且只會修改第一處匹配。

Vim替換

怎么才能將替換范圍擴大到由 x 與 y 軸所圍的整個平面忆谓?本文接下來以將下文中出現(xiàn)的所有單詞 going 都替換為 rolling 為例逐步進行說明裆装。

When the going gets tough, the tough get going.
If you are going through hell, keep going.

使用 substitute 命令,最簡單的方法就是為其提供待匹配的模式 {pattern} 以及替換字符串 {string}倡缠。因此哨免,先嘗試在 Vim 命令行模式下執(zhí)行命令:

:s/going/rolling

執(zhí)行完上述命令后,可以發(fā)現(xiàn) Vim 已經(jīng)將第一處 going 替換成了 rolling昙沦,但是文中其他匹配的內(nèi)容并沒有發(fā)生替換琢唾。

為了使 substitute 命令作用于整個橫軸,需要使用標志位 g盾饮。

g 看似為全局 (global) 的含義采桃,容易讓人誤以為 g 標志位是用于實現(xiàn)在整個文件范圍內(nèi)進行替換操作,但實際上丘损,g 僅表示當前一整行范圍普办。由于 Vim 直接繼承自 "行編輯器 ed",對于行編輯器而言徘钥,全局的范圍就是一行衔蹲,這就是 g 標志位命令的由來。

繼續(xù)嘗試在 Vim 命令行模式下執(zhí)行命令:

:s/going/rolling/g

執(zhí)行完該命令后呈础,發(fā)現(xiàn)所有出現(xiàn)在當前行going 都被替換成了 rolling 了舆驶,但除當前行外的文件其他位置橱健,仍然有一些匹配未被修改。

如何才能控制 substitute 命令在整個文件的縱軸上執(zhí)行呢贞远?

答案就是使用 subsititute 命令格式中的 [range] 來指定一個執(zhí)行范圍畴博。如果需要在整個文件的每一行都執(zhí)行替換命令,只需要在 substitute 命令的開頭加上前綴 %蓝仲,關(guān)于 range 的具體使用俱病,推薦閱讀Vim操作范圍、文件范圍介紹袱结。

這次亮隙,嘗試在 Vim 命令行模式下執(zhí)行下述命令,發(fā)現(xiàn)確實把整個文件中的 going 單詞替換成了新單詞 rolling垢夹。

:%s/going/rolling/g

總結(jié)上述的內(nèi)容就是:如果想在當前文件中查找并替換部分匹配溢吻,就必須明確地指示 substitute 命令在整個 x 軸與 y 軸上執(zhí)行的具體范圍,即通過標志位 g 處理橫軸字符的同時果元,使用 range 指定處理縱軸的范圍促王。

二、手工控制每一次替換操作

有些時候而晒,在執(zhí)行具體的替換操作前蝇狼,可能需要先觀察該處匹配再決定是否需要進行替換。

例如倡怎,在某個文件中迅耘,假設(shè)單詞 going 一共出現(xiàn)了 10 次,出于具體語境需要监署,第 3 次出現(xiàn)的 going 并不應(yīng)該被替換成 rolling颤专,如果直接使用 :%s/going/rolling/g 則會把所有的 going 替換成 rolling,這顯然不符合要求钠乏。

為了完成上述的操作目的栖秕,需要使用用標志位 c 來控制 substitute 命令的行為,需要執(zhí)行的命令為:

:%s/going/rolling/gc

增加標志位 c 后晓避,Vim 會在替換每處匹配結(jié)果之前都提示 "替換為 rolling ?" 供操作者手工確認簇捍,可以按 y 鍵確認一次修改,也可以按 n 鍵够滑,跳過一次修改垦写。無論選擇哪種結(jié)果吕世,Vim 都會執(zhí)行輸入的決定并移動光標到下一匹配處再次進行提示彰触。

除了可以選 y 確認,選 n 跳過以外命辖,還可以鍵入 q 退出此次替換過程况毅,使用 a 指示 Vim 替換該處及該處后所有的匹配而無需再由人工確認分蓖,也可以使用 l 指示 Vim 替換當前處匹配后直接退出替換過程。

下表總結(jié)了針對 Vim 替換提示所給出的所有答案及用途尔许。

答案 用途
y 替換此處匹配
n 忽略此處匹配
q 退出替換過程
l 替換此處匹配后退出 (l 表示 last)
a 替換此處與之后所有的匹配 (a 表示 all)
<Ctrl-e> 向上滾動屏幕
<Ctrl-y> 向下滾動屏幕
vim-substitute

原文地址:再談Vim substitute替換命令-Vim入門教程(54)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末么鹤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子味廊,更是在濱河造成了極大的恐慌蒸甜,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件余佛,死亡現(xiàn)場離奇詭異柠新,居然都是意外死亡,警方通過查閱死者的電腦和手機辉巡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門恨憎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人郊楣,你說我怎么就攤上這事憔恳。” “怎么了净蚤?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵钥组,是天一觀的道長。 經(jīng)常有香客問我塞栅,道長者铜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任放椰,我火速辦了婚禮作烟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砾医。我一直安慰自己拿撩,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布如蚜。 她就那樣靜靜地躺著压恒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪错邦。 梳的紋絲不亂的頭發(fā)上探赫,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音撬呢,去河邊找鬼伦吠。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的毛仪。 我是一名探鬼主播搁嗓,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼箱靴!你這毒婦竟也來了腺逛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤衡怀,失蹤者是張志新(化名)和其女友劉穎棍矛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抛杨,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡茄靠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝶桶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慨绳。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖真竖,靈堂內(nèi)的尸體忽然破棺而出脐雪,到底是詐尸還是另有隱情,我是刑警寧澤恢共,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布战秋,位于F島的核電站,受9級特大地震影響讨韭,放射性物質(zhì)發(fā)生泄漏脂信。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一透硝、第九天 我趴在偏房一處隱蔽的房頂上張望狰闪。 院中可真熱鬧,春花似錦濒生、人聲如沸埋泵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丽声。三九已至,卻和暖如春觉义,著一層夾襖步出監(jiān)牢的瞬間雁社,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工晒骇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霉撵,地道東北人滋饲。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像喊巍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子箍鼓,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 這篇文章是手冊的中文譯版整理而來(英文看著太慢了崭参,感謝前人鋪路Orz...)韵卤,vim的markdown插件和實時預(yù)...
    Himryang閱讀 6,928評論 0 20
  • https://www.cnblogs.com/qiumingcheng/p/6275510.html ctrl ...
    shuff1e閱讀 5,457評論 0 3
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,367評論 0 5
  • sed篇總共分成6章:(簡書版) Sed&awk筆記之sed篇:簡單介紹 Sed&awk筆記之sed篇:模式空間與...
    magic5650閱讀 815評論 0 3
  • 自我總結(jié)篇: 對文件的操作技巧: vim文件一個有三種狀態(tài):命令(瀏覽/輸入命令轉(zhuǎn)變末行模式)殊橙,文本(添加/編輯/...
    小知大知閱讀 790評論 0 0