歡迎光臨
每天分享高質量文章

如何在 vi 中創建快捷鍵 | Linux 中國

那些常見編輯任務的快捷鍵可以使 Vi 編輯器更容易使用,更有效率。
— Dan Sonnenschein


致謝
編譯自 | 
https://opensource.com/article/18/5/shortcuts-vi-text-editor
 
 作者 | Dan Sonnenschein
 譯者 | sd886393 ??共計翻譯:4.0 篇 貢獻時間:16 天

那些常見編輯任務的快捷鍵可以使 Vi 編輯器更容易使用,更有效率。

學習使用 vi 文本編輯器[1] 確實得花點功夫,不過 vi 的老手們都知道,經過一小會兒的鍛煉,就可以將基本的 vi 操作融匯貫通。我們都知道“肌肉記憶”,那麼學習 vi 的過程可以稱之為“手指記憶”。

當你抓住了基礎的操作竅門之後,你就可以定製化地配置 vi 的快捷鍵,從而讓其處理的功能更為強大、流暢。我希望下麵描述的技術可以加速您的協作、編程和資料操作。

在開始之前,我想先感謝下 Chris Hermansen(是他雇佣我寫了這篇文章)仔細地檢查了我的另一篇關於使用 vi 增強版本 Vim[2] 的文章。當然還有他那些我未採納的建議。

首先,我們來說明下麵幾個慣例設定。我會使用符號  來代表按下回車, 代表按下空格鍵,CTRL-x 表示一起按下 Control 鍵和 x 鍵(x 可以是需要的某個鍵)。

使用 map 命令來進行按鍵的映射。第一個例子是 write 命令,通常你之前儲存使用這樣的命令:

  1. :w<RET>

雖然這裡只有三個鍵,不過考慮到我用這個命令實在是太頻繁了,我更想“一鍵”搞定它。在這裡我選擇逗號鍵,它不是標準的 vi 命令集的一部分。這樣設置:

  1. :map , :wCTRL-v<RET>

這裡的 CTRL-v 事實上是對  做了轉義的操作,如果不加這個的話,預設  會作為這條映射指令的結束信號,而非映射中的一個操作。 CTRL-v 後面所跟的操作會翻譯為用戶的實際操作,而非該按鍵平常的操作。

在上面的映射中,右邊的部分會在屏幕中顯示為 :w^M,其中 ^ 字符就是指代 control,完整的意思就是 CTRL-m,表示就是系統中一行的結尾。

目前來說,就很不錯了。如果我編輯、創建了十二次檔案,這個鍵位映射就可以省掉了 2*12 次按鍵。不過這裡沒有計算你建立這個鍵位映射所花費的 11 次按鍵(計算 CTRL-v 和 : 均為一次按鍵)。雖然這樣已經省了很多次,但是每次打開 vi 都要重新建立這個映射也會覺得非常麻煩。

幸運的是,這裡可以將這些鍵位映射放到 vi 的啟動配置檔案中,讓其在每次啟動的時候自動讀取:檔案為 .exrc,對於 vim 是 .vimrc。只需要將這些檔案放在你的用戶根目錄中即可,併在檔案中每行寫入一個鍵位映射,之後就會在每次啟動 vi 生效直到你刪除對應的配置。

在繼續說明 map 其他用法以及其他的縮寫機制之前,這裡在列舉幾個我常用提高文本處理效率的 map 設置:

< 如顯示不全,請左右滑動 >
映射 顯示為
:map X :xCTRL-v :x^M
:map X ,:qCTRL-v ,:q^M

上面的 map 指令的意思是寫入並關閉當前的編輯檔案。其中 😡 是 vi 原本的命令,而下麵的版本說明之前的 map 配置可以繼續用作第二個 map 鍵位映射。

< 如顯示不全,請左右滑動 >
映射 顯示為
:map v :e :e

上面的指令意思是在 vi 編輯器內部切換檔案,使用這個時候,只需要按 v 並跟著輸入檔案名,之後按  鍵。

< 如顯示不全,請左右滑動 >
映射 顯示為
:map CTRL-vCTRL-e :e#CTRL-v :e #^M

# 在這裡是 vi 中標準的符號,意思是最後使用的檔案名。所以切換當前與上一個檔案的方法就使用上面的映射。

< 如顯示不全,請左右滑動 >
映射 顯示為
map CTRL-vCTRL-r :!spell %>err &CTRL-v; :!spell %>err&^M

(註意:在兩個例子中出現的第一個 CRTL-v 在某些 vi 的版本中是不需要的)其中,:! 用來運行一個外部的(非 vi 內部的)命令。在這個拼寫檢查的例子中,% 是 vi 中的符號用來指代目前的檔案, > 用來重定向拼寫檢查中的輸出到 err 檔案中,之後跟上 & 說明該命令是一個後臺運行的任務,這樣可以保證在拼寫檢查的同時還可以進行編輯檔案的工作。這裡我可以鍵入 verr(使用我之前定義的快捷鍵 v 跟上 err),進入 spell 輸出結果的檔案,之後再輸入 CTRL-e 來回到剛纔編輯的檔案中。這樣我就可以在拼寫檢查之後,使用 CTRL-r 來查看檢查的錯誤,再通過 CTRL-e 傳回剛纔編輯的檔案。

還用很多字串輸入的縮寫,也使用了各種 map 命令,比如:

  1. :map! CTRL-o \fI

  2. :map! CTRL-k \fP

這個映射允許你使用 CTRL-o 作為 groff 命令的縮寫,從而讓讓接下來書寫的單詞有斜體的效果,並使用 CTRL-k 進行恢復。

還有兩個類似的映射:

  1. :map! rh rhinoceros

  2. :map! hi hippopotamus

上面的也可以使用 ab 命令來替換,就像下麵這樣(如果想這麼用的話,需要首先按順序運行: 1、 unmap! rh,2、umap! hi):

  1. :ab rh rhinoceros

  2. :ab hi hippopotamus

在上面 map! 的命令中,縮寫會馬上的展開成原有的單詞,而在 ab 命令中,單詞展開的操作會在輸入了空格和標點之後才展開(不過在 Vim 和我的 vi 中,展開的形式與 map! 類似)。

想要取消剛纔設定的按鍵映射,可以對應的輸入 :unmap、 unmap! 或 :unab

在我使用的 vi 版本中,比較好用的候選映射按鍵包括 gKq、 v、 V、 Z,控制字符包括:CTRL-aCTRL-c、 CTRL-kCTRL-nCTRL-pCTRL-x;還有一些其他的字符如 #、 *,當然你也可以使用那些已經在 vi 中有過定義但不經常使用的字符,比如本文選擇 X 和 I,其中 X 表示刪除左邊的字符,並立刻左移當前字符。

最後,下麵的命令

  1. :map<RET>

  2. :map!<RET>

  3. :ab

將會顯示,目前所有的縮寫和鍵位映射。

希望上面的技巧能夠更好地更高效地幫助你使用 vi。


via: https://opensource.com/article/18/5/shortcuts-vi-text-editor

作者:Dan Sonnenschein[4] 
選題:lujun9972 
譯者:sd886393 
校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

赞(0)

分享創造快樂