OS X 上の bash で Ctrl キーと矢印キーが機能しないのはなぜですか?

OS X 上の bash で Ctrl キーと矢印キーが機能しないのはなぜですか?

私は作業するすべての Linux システムでCtrl-Ctrl-を使用していますが、これらのキーの組み合わせは Macbook Pro の bash では機能しません。Snow Leopard を実行しており、組み込みのターミナル アプリケーションを使用しています。

キーの組み合わせは、ターミナルまたはそれ以前には何もキャプチャされていないようです。Linux サーバーの 1 つに ssh すると、Ctrl- /を使用してコマンド ラインの次/前の単語にジャンプできます。ただし、Macbook の bash でこのキーの組み合わせを試すと、右矢印の場合は「C」、左矢印の場合は「D」が表示されます。

これらのキーを Darwin Bash で動作させる方法について何かアイデアはありますか?

答え1

OS X では、emacs キー バインディングがデフォルトで使用されます。これは、OS X 上のほぼすべてのアプリケーションに当てはまります。これは、Ca や Ce などが行頭/行末であることを意味します。また、M-backspace で後方単語削除、Ck で行削除という便利な機能も使用できます。

これは、ターミナルで forward/backward-word がそれぞれ Mf と Mb (M = Meta = alt/option) にバインドされていることを意味しますが、実際はそうではありません。OS X では、forward/backward-word はデフォルトで M-→ と M-← にバインドされています。

この動作は、アカウントのGNU Readlineライブラリの設定方法を変更することで変更できます。これはファイルで行われます。バインド可能なコマンドの大きなリストは、オンラインドキュメントで~/.inputrc入手できます。man readlineこれはここです。

したがって、質問に答えると、Readline が C-→ と C-← を検出したときに実行する処理を、Linux サーバー上で実行される処理に再マップする必要があります。

ファイルの構文は、~/.inputrc実行したい内容に対して非常にシンプルですkey-sequence: action

望ましい動作を得るには、次のものが必要です。

"\e[5C": forward-word
"\e[5D": backward-word

別のページはこちら追加の便利なバインディング付き。

(Linux ボックスから /etc/inputrc を OS X の ~/.inputrc にコピーするだけで済むかもしれません)

答え2

2020年1月更新

最新バージョンの OSX では、デフォルトのシェルは です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-が出力するエスケープ シーケンスが変更されたようです。今日 (2018 年末) の時点で私が動作しているものは次のとおりです。Arrows

"\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、結果を二重引用符で囲みます。

関連情報