在某些 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(如ksh
或zsh
)將根據VISUAL
和EDITOR
環境變數的值確定預設編輯模式(vi 或 emacs)(按此優先順序,並且還處理諸如vim
、elvis
、xemacs
等變體)。
這在 中被破壞了(非常煩人!) ,但在其他派生的 shellmksh
中仍然是這種情況。pdksh
其他 shell 喜歡bash
或tcsh
預設為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] 不要與libeditline
readline “work-alike” 只提供 emacs 編輯模式。