為什麼 Ctrl-Arrow 在 OS X 上的 bash 中不起作用?

為什麼 Ctrl-Arrow 在 OS X 上的 bash 中不起作用?

我在使用的每個 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 ArrowCtrl-來找出實際的轉義序列Right Arrow。以下是我自己的 Ctrl-左箭頭的輸出範例:

^[[1;5C
^[[1;5C

要翻譯.inputrc成行話,請將轉義符號替換^[\e並將結果貼在雙引號內。

相關內容