2021-05-12 14:32:11
如何在 vi 中建立快捷鍵
那些常見編輯任務的快捷鍵可以使 Vi 編輯器更容易使用,更有效率。
學習使用 vi 文字編輯器 確實得花點功夫,不過 vi 的老手們都知道,經過一小會兒的鍛鍊,就可以將基本的 vi 操作融匯貫通。我們都知道“肌肉記憶”,那麼學習 vi 的過程可以稱之為“手指記憶”。
當你抓住了基礎的操作竅門之後,你就可以客製化化地設定 vi 的快捷鍵,從而讓其處理的功能更為強大、流暢。我希望下面描述的技術可以加速您的共同作業、程式設計和資料操作。
在開始之前,我想先感謝下 Chris Hermansen(是他雇傭我寫了這篇文章)仔細地檢查了我的另一篇關於使用 vi 增強版本 Vim 的文章。當然還有他那些我未採納的建議。
首先,我們來說明下面幾個慣例設定。我會使用符號 <RET>
來代表按下回車,<SP>
代表按下空格鍵,CTRL-x
表示一起按下 Control
鍵和 x
鍵(x
可以是需要的某個鍵)。
使用 map
命令來進行按鍵的對映。第一個例子是 write
命令,通常你之前儲存使用這樣的命令:
:w<RET>
雖然這裡只有三個鍵,不過考慮到我用這個命令實在是太頻繁了,我更想“一鍵”搞定它。在這裡我選擇逗號鍵,它不是標準的 vi 命令集的一部分。這樣設定:
:map ,:wCTRL-v<RET>
這裡的 CTRL-v
事實上是對 <RET>
做了跳脫的操作,如果不加這個的話,預設 <RET>
會作為這條對映指令的結束信號,而非對映中的一個操作。 CTRL-v
後面所跟的操作會翻譯為使用者的實際操作,而非該按鍵平常的操作。
在上面的對映中,右邊的部分會在螢幕中顯示為 :w^M
,其中 ^
字元就是指代 control
,完整的意思就是 CTRL-m
,表示就是系統中一行的結尾。
目前來說,就很不錯了。如果我編輯、建立了十二次檔案,這個鍵位對映就可以省掉了 2*12 次按鍵。不過這裡沒有計算你建立這個鍵位對映所花費的 11 次按鍵(計算 CTRL-v
和 :
均為一次按鍵)。雖然這樣已經省了很多次,但是每次開啟 vi 都要重新建立這個對映也會覺得非常麻煩。
幸運的是,這裡可以將這些鍵位對映放到 vi 的啟動組態檔中,讓其在每次啟動的時候自動讀取:檔案為 .exrc
,對於 vim 是 .vimrc
。只需要將這些檔案放在你的使用者根目錄中即可,並在檔案中每行寫入一個鍵位對映,之後就會在每次啟動 vi 生效直到你刪除對應的設定。
在繼續說明 map
其他用法以及其他的縮寫機制之前,這裡在列舉幾個我常用提高文字處理效率的 map 設定:
< 如顯示不全,請左右滑動 >
對映 | 顯示為 |
---|---|
:map X :xCTRL-v<RET> |
:x^M |
:map X ,:qCTRL-v<RET> |
,:q^M |
上面的 map
指令的意思是寫入並關閉當前的編輯檔案。其中 :x
是 vi 原本的命令,而下面的版本說明之前的 map
設定可以繼續用作第二個 map
鍵位對映。
< 如顯示不全,請左右滑動 >
對映 | 顯示為 |
---|---|
:map v :e<SP> |
:e |
上面的指令意思是在 vi 編輯器內部切換檔案,使用這個時候,只需要按 v
並跟著輸入檔名,之後按 <RET>
鍵。
< 如顯示不全,請左右滑動 >
對映 | 顯示為 |
---|---|
:map CTRL-vCTRL-e :e<SP>#CTRL-v<RET> |
:e #^M |
#
在這裡是 vi 中標準的符號,意思是最後使用的檔名。所以切換當前與上一個檔案的方法就使用上面的對映。
< 如顯示不全,請左右滑動 >
對映 | 顯示為 |
---|---|
map CTRL-vCTRL-r :!spell %>err &CTRL-v<RET> |
:!spell %>err&^M |
(注意:在兩個例子中出現的第一個 CRTL-v
在某些 vi 的版本中是不需要的)其中,:!
用來執行一個外部的(非 vi 內部的)命令。在這個拼寫檢查的例子中,%
是 vi 中的符號用來指代目前的檔案, >
用來重定向拼寫檢查中的輸出到 err
檔案中,之後跟上 &
說明該命令是一個後台執行的任務,這樣可以保證在拼寫檢查的同時還可以進行編輯檔案的工作。這裡我可以鍵入 verr<RET>
(使用我之前定義的快捷鍵 v
跟上 err
),進入 spell
輸出結果的檔案,之後再輸入 CTRL-e
來回到剛才編輯的檔案中。這樣我就可以在拼寫檢查之後,使用 CTRL-r
來檢視檢查的錯誤,再通過 CTRL-e
返回剛才編輯的檔案。
還用很多字串輸入的縮寫,也使用了各種 map
命令,比如:
:map! CTRL-o fI
:map! CTRL-k fP
這個對映允許你使用 CTRL-o
作為 groff
命令的縮寫,從而讓讓接下來書寫的單詞有斜體的效果,並使用 CTRL-k
進行恢復。
還有兩個類似的對映:
:map! rh rhinoceros
:map! hi hippopotamus
上面的也可以使用 ab
命令來替換,就像下面這樣(如果想這麼用的話,需要首先按順序執行: 1、 unmap! rh
,2、umap! hi
):
:ab rh rhinoceros
:ab hi hippopotamus
在上面 map!
的命令中,縮寫會馬上的展開成原有的單詞,而在 ab
命令中,單詞展開的操作會在輸入了空格和標點之後才展開(不過在 Vim 和我的 vi 中,展開的形式與 map!
類似)。
想要取消剛才設定的按鍵對映,可以對應的輸入 :unmap
、 unmap!
或 :unab
。
在我使用的 vi 版本中,比較好用的候選對映按鍵包括 g
、K
、q
、 v
、 V
、 Z
,控制字元包括:CTRL-a
、CTRL-c
、 CTRL-k
、CTRL-n
、CTRL-p
、CTRL-x
;還有一些其他的字元如 #
、 *
,當然你也可以使用那些已經在 vi 中有過定義但不經常使用的字元,比如本文選擇 X
和 I
,其中 X
表示刪除左邊的字元,並立刻左移當前字元。
最後,下面的命令
:map<RET>
:map!<RET>
:ab
將會顯示,目前所有的縮寫和鍵位對映。
希望上面的技巧能夠更好地更高效地幫助你使用 vi。
via: https://opensource.com/article/18/5/shortcuts-vi-text-editor
作者:Dan Sonnenschein ?選題:lujun9972 ?譯者:sd886393 ?校對:wxy
相關文章