vi技巧和訣竅令人刮目相看的超酷命令

2021-03-04 02:13:41 字數 2952 閱讀 1260

成為 vi 編輯專家

martin wicks, 自由 unix 顧問, 711 consultancy limited

martin wicks 是一位在英國倫敦生活工作的自由 unix 顧問。他從事 unix 系統已經超過 15 年,之前多年從事 ibm 大型機。他是狂熱的電影愛好者,喜歡玩滑雪板和山地自行車。

簡介:通過 vi 技巧和訣竅提高檔案編輯效率,讓您的朋友刮目相看。本文介紹 10 個不太為人所知的 vi 命令,所有真正的 vi 使用者都應該掌握它們。

在使用 vi 編輯器時 — 無論是初次使用的使用者,還是有經驗的使用者 — 大多數人往往只掌握核心命令集,這些命令可以執行最常用的功能:導航或儲存檔案;插入、更新、刪除或搜尋資料;退出但不儲存修改。

但是,vi 編輯器極其強大,特性和功能非常豐富。即使在多年使用 vi 之後,您仍然可能會發現有不知道的新命令。本文討論的命令就屬於不太為人所知的命令,但是它們可以簡化您目前採用的操作方法,讓您的工作方式更高效,或者讓您能夠完成原來不知道可以用 vi 完成的操作。

開啟和關閉行號

vi 編輯器的許多選項可以控制編輯會話的外觀和感覺。使用 :set 命令修改 vi 中的會話設定。

按 escape 鍵進入命令模式之後,可以使用 :set all 命令顯示選項和設定的列表。

可以設定的選項之一是 number,它的作用是開啟和關閉行號(見清單 1)。

清單 1. 開啟行號之前

這個命令讓 vi 在當前編輯的檔案中的每個記錄上顯示行號。讓 vi 進入命令模式之後,可以輸入 :set number 並按回車來開啟行號(見清單 2)。

清單 2. 開啟行號之後

可以使用 :set nonumber 命令關閉行號。還可以使用這個命令和 :set number 命令的簡寫,即 :set nu 和 :set nonu。

如果需要快速計算要用 vi 函式處理的行數,顯示行號會非常有幫助。當行數很多,可能跨多個螢幕時,行號尤其有用。另外,有時候您知道要處理的行範圍,但是需要查明要在 vi 命令中使用的初始和結束行號。

如果希望每次進入 vi 會話時都顯示行號,那麼在主目錄中的 .exrc 檔案中新增 set number 行。

自動縮排

在用某些程式語言編寫**時,縮排是樣式的重要部分,可以確保**的可讀性更好。如果需要,可以在 vi 編輯器中根據程式語言的樣式設定自動縮排。使用 autoindent 開啟或關閉自動縮排(見清單 3)。

清單 3. 開啟自動縮排

在此之後,如果在一行的開頭輸入空格或製表符,那麼後續的新行將會縮排到相同的位置。在命令模式下,輸入 :set autoindent,然後按回車開啟自動縮排。

通過設定 shiftwidth 確定縮排級別。例如,:set shiftwidth=4 把每級縮排設定為四個空格(見清單 4)。

清單 4. 設定縮排級別

在命令模式下,可以使用 >> 命令讓現有的一行增加一級縮排,使用 << 命令減少一級縮排。在這些命令前面加上乙個整數,即可讓多行增加或減少一級縮排。例如,把游標放在清單 4 中第 6 行的開頭,進入命令模式之後,輸入 5>> 就會讓下面五行增加一級縮排。

清單 5 顯示結果。

清單 5. 縮排**塊

可以使用 :set noautoindent 命令關閉自動縮排。還可以使用這個命令和 autoindent 命令的簡寫,即 :

set ai 和 :set noai。還可以使用 :

set ai sw=4 在乙個命令中開啟縮排並設定縮排級別。

如果希望每次啟動 vi 會話時都啟用自動縮排並把縮排級別設定為四個空格,那麼在主目錄中的 .exrc 檔案中新增 set ai sw=4 行。

在搜尋時不區分大小寫

如您所知,在 unix 中執行搜尋時,模式匹配是區分大小寫的。但是,如果希望 vi 不區分大小寫,那麼可以使用 :set ignorecase 命令。

使用 :set noignorecase 恢復區分大小寫。還可以使用簡寫(:

set ic 和 :set noic)。

如果希望每次進入 vi 會話時都啟用不區分大小寫的搜尋,那麼在主目錄中的 .exrc 檔案中新增 set ignorecase 行。

復合搜尋

在 vi 中,可以使用 / 命令搜尋字串,這需要以字面字串或正規表示式的形式指定要匹配的模式。例如,要想在檔案中搜尋單詞 echo,只需進入命令模式,輸入 /echo,然後按回車。這個命令會找到清單 6 所示檔案的第 3 行的第乙個單詞。

清單 6. 復合搜尋

可以使用簡單的正規表示式指定尋找包含某一單詞而且後面有另乙個單詞的行。例如,要想尋找包含字串 echo、後面有零個或更多字元、之後是字串 file 的第一行,應該使用 /echo.*file。

在清單 6 所示的檔案中,這個命令會找到第 6 行的第乙個單詞。

但是,只有這兩個字串出現在同一行上,這個命令才認為是匹配的。如果希望搜尋出現在另乙個模式或字串後面的某個模式或字串,不管這兩個模式或字串是否在同一行上,那麼可以指定由分號 (;) 分隔的兩個搜尋命令,從而執行復合搜尋。例如,要想搜尋出現在字串 +1 後面的字串 echo,應該使用 /+1/;/echo/。

在清單 6 所示的檔案中,這個命令會找到第 10 行的第乙個單詞。

復合搜尋對於尋找**中出現在另乙個命令後面的某個命令尤其有用 — 例如,在設定某個變數之後呼叫函式的地方。

重放搜尋模式

當在檔案中搜尋要替換的模式時,可以讓 vi 把要匹配的任何模式儲存在緩衝區中;然後,在執行替換時,可以用緩衝區引用號重放它們。方法是把模式放在 \( 和 \) 之間,這會指示 vi 把模式放在編號的緩衝區(1 到 9)中。在執行替換時,可以用緩衝區引用號 \1 到 \9 引用這些緩衝區。

例如,假設要在清單 7 所示的檔案中搜尋以單詞 martin 開頭的行並對每個匹配新增字首 mr 和字尾 wicks,那麼進入命令模式,輸入 vi 命令 :%s/^\(martin\)/mr \1 wicks/g,然後按回車。

清單 7. 重放搜尋模式(之前)

下面把這個命令分解開解釋一下:

:%s — 指示 vi 執行替換。

陌生電話技巧訣竅

溝通要點 1.撥打時間 不要選擇在客戶一天工作最繁忙的早晨打 這樣可能被立刻拒絕,對於私人客戶要選擇午後休息,或者臨近下班時間撥打,這些時候通常是客戶可以抽空休息的時間。當然,對於熟悉的客戶可以根據約定的時間撥打 主動打 給客戶,首先要核對公司名稱,客戶姓名稱謂,其次要自報家門,介紹公司全稱及職位姓...

歌唱的技巧與訣竅

歌唱的技巧與訣竅 結課 美聲唱法和流行唱法的區別 學院材料與冶金 專業材料成型及控制工程 姓名侯超 學號 201102131085 日期 2014年11月12日 目錄第一章美聲唱法和流行唱法起源與發展概述 第1.1節美聲唱法的起源與發展 第1.2節流行唱法的起源與發展 第二章演唱情感與風格上的異同 ...

vi和vim編輯命令大全

vi編輯器如同很多在unix早期階段開發的應用程式一樣,有著不易使用的名聲。bram molenaar的轉殖加強版,vim vi improved 已經走了很長的一段路來消除這樣的印象。vim包含了很多的便利功能,如直觀的指示 幫助頁面等。它可能已經成為一種最流行的vi編輯器版本,所以本書的第七版為...