我在使用的每個 Linux 系統上都使用Ctrl-←和Ctrl- →,但這些組合鍵在我的 Macbook Pro 上的 bash 中不起作用。它正在運行 Snow Leopard,我正在使用內建的終端應用程式。
這些組合鍵似乎沒有被任何之前或終端捕獲,因為如果我 ssh 到我的一台 Linux 伺服器,我可以使用Ctrl- ←/→跳到命令列上的下一個/上一個單字。然而,當我在 Macbook 上的 bash 中嘗試這個組合鍵時,我只得到“C”代表右箭頭,“D”代表左箭頭。
關於如何讓這些鍵在 darwin bash 中工作有什麼想法嗎?
答案1
OS X 預設使用 emacs 鍵綁定。幾乎 OS X 上的每個應用程式都是如此,這相當不錯。這意味著像 Ca 和 Ce 這樣的東西是行的開頭/結尾。你還可以使用 M-backspace 獲得漂亮的後向單字殺戮,哦,還有使用 Ck 殺戮線。
這應該意味著在您的終端機中,前向/後向單字分別綁定到 Mf 和 Mb(M = Meta = alt/option),但事實並非如此。在 OS X 上,前向/後向字預設綁定到 M-→ 和 M-←。
您可以透過變更為您的帳戶配置 GNU Readline 庫的方式來改變此行為。這發生在您的~/.inputrc
文件中。您可以使用man readline
和 線上文件取得大量可綁定命令,例如這裡。。
因此,為了回答您的問題,您需要重新對應 Readline 在看到 C-→ 和 C-← 時執行的操作,以執行其在 Linux 伺服器上執行的操作。
~/.inputrc
對於您想要執行的操作來說,文件的語法非常簡單: key-sequence: action
。
這應該是您獲得所需行為所需要的:
"\e[5C": forward-word
"\e[5D": backward-word
這是另一頁以及其他有用的綁定。
(你可能可以將 /etc/inputrc 從你的 linux 機器複製到你的 OS X ~/.inputrc )
答案2
2020 年 1 月更新
在最新版本的 OSX 上,預設 shell 是zsh
.因此,讓 ctrl-arrowleft 和 ctrl-arrowright 按預期工作的魔法咒語如下:
bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word
(將其放入您的.zshrc
)
答案3
放入~/.inputrc
以下幾行:
"\e[5C": forward-word
"\e[5D": backward-word
答案4
這些天,終端中輸出的轉義序列似乎已經Ctrl改變。Arrows截至今天(2018 年底),以下是對我有用的方法:
"\e[1;5C": forward-word
"\e[1;5D": backward-word
cat -v
注意:您始終可以透過在終端中鍵入並按Ctrl-Left Arrow或Ctrl-來找出實際的轉義序列Right Arrow。以下是我自己的 Ctrl-左箭頭的輸出範例:
^[[1;5C
^[[1;5C
要翻譯.inputrc
成行話,請將轉義符號替換^[
為\e
並將結果貼在雙引號內。