什麼設定控制在命令列上移動遊標?

什麼設定控制在命令列上移動遊標?

在某些 Unix 系統上,我可以鍵入 Ctrl-A 或 Ctrl-E 移到行首或行尾。在某些 Unix 系統上我不能,它只列印 ^A 或 ^E 等。

答案1

這一切都取決於特定的 shell 實作(您可能在不同的系統上甚至對於單一系統中的不同使用者有不同的預設 shell,例如 bash、ksh、tcsh 等)。

這也取決於 shell 本身。

例如bash支援兩種模式:emacs和vi。每種模式都有自己的快捷鍵(emacs 或 vi 等)。要更改它,您必須執行set -o emacs(通常是預設的)或set -o vi

您可以在特定的 shell 文件中找到更多資訊。

答案2

太長了;博士

set -o emacs

將在您可能使用的大多數 shell 中啟用 Ctrl-A、Ctrl-E、Ctrl-B 等 emacs 鍵綁定。


shell 可能沒有任何行編輯功能,或者可能處於vi編輯模式(由標準)。

當不在emacs編輯模式下時,Ctrl-A 和 Ctrl-E 沒有特殊意義。如果echo和stty/termios 設定打開,所有未特殊處理的控制鍵都會以、等「插入符號」符號echoctl顯示。^A^X

許多 shell(如kshzsh)將根據VISUALEDITOR環境變數的值確定預設編輯模式(vi 或 emacs)(按此優先順序,並且還處理諸如vimelvisxemacs等變體)。

這在 中被破壞了(非常煩人!) ,但在其他派生的 shellmksh中仍然是這種情況。pdksh

其他 shell 喜歡bashtcsh預設為emacs編輯模式,但也可以從行編輯庫的設定檔中覆寫。

為了readline和許多其他程式使用的庫bash,設定檔~/.inputrc(或環境變數中指定的檔案INPUTRC)具有後備/etc/inputrc,設定為:

set editing-mode vi
set editing-mode emacs

對於很多BSD程式使用的editline/ libedit[1]函式庫來說,設定檔通常是~/.editrc設定為:

bind -v  # for vi
bind -e  # for emacs

[1] 不要與libeditlinereadline “work-alike” 只提供 emacs 編輯模式。

相關內容