私は作業するすべての 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
、結果を二重引用符で囲みます。