承接上篇,我們繼續深入探討 vi 編輯器在 C 語言開發中的進階應用。掌握這些技巧能讓你的編輯效率質變,真正體會「工欲善其事,必先利其器」的道理。
vi 為了避免重複操作,設計了「操作次數 + 操作命令」的語法,極大提升編輯效率。這不只是偷懶,更是專業程式設計師的基本素養。
50dd 即可,比連按 50 次 dd 快得多。50yy,移動游標至目標位置,按 p 貼上。這在複製迴圈、函式結構時極其實用——能否一眼看出要複製幾行,直接關係到編輯流暢度。hello myself 改為 hi world,游標停在 hello,輸入 2cw 後輸入新內容。2 表示修改兩個單詞,cw 是 change word。超過 2-3 次的重複操作,務必使用多重命令,這是效率分水嶺。
輸入 : 進入命令列(螢幕最底行),這裡能執行更強大的範圍操作。
假設檔案內容:
Hello world Hello myself Hello c
游標在第一行,要刪除第 2-3 行:
dddd(或 2dd)。:2,3d —— 直接指定行號範圍。:.,+1d —— . 表當前行,+1 表下一行。:+1,+2d —— 刪除第 1 行之後的第 1-2 行。:2,$d —— $ 代表最後一行,超實用。心法:20 行內用相對法(快、直觀),大量刪除用絕對法(精準)。不知當前行號?按 Ctrl-g 即可顯示「The cursor is at line 1 of 3 — 33%」。
:1,$s/hello/hi/g —— 從第 1 行到檔尾,搜尋 hello 全部(g)替換為 hi。記法:s = substitute,g = global。
當專案增大,需要在檔案間移植函式時,vi 的 w(寫入)與 r(讀入)命令大放異彩。
vi a.c/open_deal 搜尋函式名n 定位到確切行Ctrl-g 記下起始行(如 243)Ctrl-g 記下結束行(如 343):243,343w open.c 將該區塊寫入新檔q! 離開vi b.c,移至欲插入位置:r open.c 讀入檔案內容到游標下方:x! 存檔離開核心邏輯:n1,n2w filename 寫入區塊,r filename 讀入檔案。也常用於整個檔案讀入後修改。
目錄下有 a1.c~b3.c 六個檔,記得有 open_deal 但不知在哪:
vi *.c /open_deal :n " 切換到下一個檔案 /open_deal " 繼續搜尋 ...直到找到
關鍵:vi *.c 一次開啟所有 .c 檔,:n 切換下一個。找到後可用 w 存成獨立檔備用。
vi file / vi *.c:q :q! :x :x!i I a A o Or cw sx dd/ nuyy 複製行,p 貼上:1 首行、G 尾行、. 當前行、+n 向下 n 行、Ctrl-g 顯示行號、n命令 重複 n 次:n1,n2s/str1/str2/g 區域取代:n1,n2 w file 區域寫入、:r file 讀入程式設計師不該滿足於「會用」,要追求「用好」。衡量標準:相同編輯結果,擊鍵數最少者勝。
案例 1:行首游標,行尾加 hello(行長 50 字元)
i → 輸入 5 字 → Esc = 57 鍵A → 輸入 5 字 → Esc = 7 鍵(A 專為行尾插入設計)案例 2:this is a new world → this is a cat,游標在行首
2cw 詞組修改 = 18 鍵D 刪至行尾 → A 接續輸入 = 16 鍵(最優)擊鍵少 = 命令選擇精準 = 編輯流暢 = 騰出時間給設計與除錯。這就是專業與業餘的分水嶺。
編輯速度應接近語速,無明顯停頓(< 2 秒)。單手單指「一指禪」不可取。優秀工程師的編輯像行雲流水,一氣呵成,程式碼自然湧現。
vi 與 C 語言在 Unix 上相依相伴,如快刀斬亂麻。每次 yy 複製歷經驗、dd 刪除當下煩惱,一切歸於原點,不得不嘆服設計者的巧思。願這七步曲能成你掌握 vi 的階梯,也算是我對 vi 設計者的一份致敬。