在 UNIX 中使用 VI 鍵編輯 shell 指令

在 UNIX 中使用 VI 鍵編輯 shell 指令

我曾經有一個同事非常擅長 UNIX。

他向我展示如何使用 Vi 鍵綁定來編輯 shell 指令。

他將該命令放在一個文件中,每次我登入時都會運行該文件。

從那時起,我就轉向了另一個專案。

不幸的是我不記得如何設定它。

這裡有人知道如何使用 Vi 鍵綁定在終端機中編輯指令嗎?

我怎樣才能使該設定永久有效?

答案1

您正在談論有史以來最偉大的功能!

您可以使用 vi 命令來編輯 shell 命令(和命令歷史記錄),方法是將以下內容新增至檔案.bashrc

set -o vi

您也可以從命令列運行該命令以僅影響當前會話。

如果您不使用 bash,請用適當的 rc 檔案取代您的 shell。


這允許您使用 vi 命令來編輯任何命令...

您也可以使用jk瀏覽記錄(按 後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 鍵都已綁定。按照您認為合適的方式綁定它們,然後您就可以開始比賽了。

相關內容