OS XのbashでCtrl-Arrowが機能しないのはなぜですか?


14

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

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

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


2
スペースを使用している場合、デフォルトでCtrl +矢印を押すとスペースが切り替わります。
mark4o

回答:


13

OS Xは、デフォルトでemacsキーバインディングを使用します。これは事実上、OS X上のすべてのアプリケーションに当てはまりますが、かなり優れています。CaやCeのようなものが行頭/行末であることを意味します。また、M-backspaceで気の利いたbackward-word-killを取得し、Ckでkill-lineを取得します。

これは、端末でforward / backward-wordがそれぞれMfとMbにバインドされることを意味するはずです(M = Meta = alt / option)が、そうではありません。OS Xでは、デフォルトでforward / backword-wordはM-→およびM-←にバインドされます。

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

したがって、質問に答えるために、C-→およびC-←が表示されたときにReadlineが行うことをリマップして、Linuxサーバーで行うことを行います。

~/.inputrcファイルの構文は、目的に合わせて非常に簡単ですkey-sequence: action

これは、目的の動作を得るために必要なものです。

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

追加の便利なバインディングがある別のページ次に示します。

(おそらく、LinuxボックスからOS X〜/ .inputrcに/ etc / inputrcをコピーすることで回避できます)


注:xterm-keysでtmuxを頻繁に使用している場合は、\e[1;5Cおよび\e[1;5Dもトリガーする必要がforward-wordありbackward-wordます。
アルネ14年

2
別の注意:それでも動作しない場合、Mission Control / Spacesとのショートカットの競合が原因である可能性があります。システム環境設定- >キーボード- >ショートカット- >ミッションコントロール、移動、スペース、右/左
bhh1988

「OS Xはデフォルトでemacsキーバインディングを使用します」がわかりません。「Ctrl-矢印」もemacsキーバインディングです。
グレッグ

3

~/.inputrc次の行を入力します。

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

0

最近では、Ctrl-Arrowsが端末に出力するエスケープシーケンスが変更されたようです。今日(2018年末)の時点で私にとってうまくいくのは次のとおりです:

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

注:cat -vターミナルに入力し、Ctrl-左矢印またはCtrl-右矢印を押すと、実際のエスケープシーケンスをいつでも把握できます。以下は、私自身のCtrl-左矢印の出力例です。

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

.inputrc専門用語に変換するには、エスケープ記号^[をに置き換えて\e、結果を二重引用符で囲みます。


0

@ bhh1988で述べたように、Mission Controlの構成により、Ctrlキーを矢印キーで操作することができなくなりますbash。私はこれらのショートカットを邪魔したくなかったので、代わりにOption(つまりAlt)キーを使用します。現在、ドイツ語のキーボードを使用してMojaveで(それが関連するかどうかはわかりません).inputrcOption-left-arrowとOption-right-arrowを使用して単語間を移動するには、次のようにします。

"\e\e[C": forward-word
"\e\e[D": backward-word
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.