![在 UNIX 中使用 VI 鍵編輯 shell 指令](https://rvso.com/image/23944/%E5%9C%A8%20UNIX%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20VI%20%E9%8D%B5%E7%B7%A8%E8%BC%AF%20shell%20%E6%8C%87%E4%BB%A4.png)
我曾經有一個同事非常擅長 UNIX。
他向我展示如何使用 Vi 鍵綁定來編輯 shell 指令。
他將該命令放在一個文件中,每次我登入時都會運行該文件。
從那時起,我就轉向了另一個專案。
不幸的是我不記得如何設定它。
這裡有人知道如何使用 Vi 鍵綁定在終端機中編輯指令嗎?
我怎樣才能使該設定永久有效?
答案1
您正在談論有史以來最偉大的功能!
您可以使用 vi 命令來編輯 shell 命令(和命令歷史記錄),方法是將以下內容新增至檔案.bashrc
:
set -o vi
您也可以從命令列運行該命令以僅影響當前會話。
如果您不使用 bash,請用適當的 rc 檔案取代您的 shell。
這允許您使用 vi 命令來編輯任何命令...
您也可以使用j和k瀏覽記錄(按 後ESC)。
您也可以使用/(點擊 後ESC)來搜尋舊命令。
換句話說,要找到cp
您十分鐘前執行的超長指令:
ESC/CPENTER
n然後您可以使用和循環瀏覽歷史記錄中的所有符合命令N。
所有這些都使我的命令列工作效率提高了 10 兆倍!
答案2
如果您使用的是 bash,正如 jahroy 和邪惡的 otto 已經回答的那樣,您可以使用
set -o vi
使 bash 使用 vi 風格的編輯指令。
完成此操作後,您可以鍵入Esc v以啟動 vi 編輯器,其中包含包含當前命令列副本的臨時檔案。您可以編輯該命令,甚至可以將其替換為多行;當您儲存檔案 ( :wq
) 時,shell 將執行編輯的命令。
如果你更喜歡
set -o emacs
你可以用來Ctl-XCtl-E做同樣的事情。它將使用您首選的編輯器$EDITOR
,不一定是 emacs。
(就我個人而言,我使用 vi(實際上是 vim)進行大部分編輯,但我更喜歡set -o emacs
在shell 中;切換插入模式對於編輯文件來說非常有用,但對於互動式命令來說很尷尬。 YMMV。
答案3
您可以使用set -o vi
@jahroy 發布的內容來更改行編輯命令,但您可能會想到該fc
命令(在bash 中可用,我認為是ksh,但可能不是tcsh),它將把上一個命令放入編輯器中( FCEDIT 或EDITOR) ,您可能已將其設為 vi),然後在退出編輯器時執行該命令。請參閱線上說明頁面或help fc
了解詳細信息,或只是嘗試一下。
答案4
事實上,這實際上是有史以來最偉大的功能。還有更多:
建立一個名為
.editrc
包含該行
bind -v
編輯線,是一個BSD許可版本庫,提供類似readline的服務。該 .editrc 將在 MySQL 的命令列 shell 或任何不使用 readline 的應用程式中將您的鍵綁定設定為 vi 模式。
隨著歲月的流逝,我變得有些健忘,所以我的 .zshrc來源一些包裝對於 vi 模式,顯示我在命令列中所處的模式。這真好。
我知道你可以在 zsh 中輸入
bindkey -L
並取得按鍵綁定清單。我確信 bash 一定有類似的東西。預設情況下,並非所有 vi 鍵都已綁定。按照您認為合適的方式綁定它們,然後您就可以開始比賽了。