web-dev-qa-db-ja.com

後方キルワードをCtrl + wにバインドする

Tcshの長期使用から最近のBashの探索に切り替えようとしています。

スペースとスラッシュをWordの境界として扱うCtrl + wを除いて、お気に入りの機能をすべて移植することができました。おそらく、backward-kill-Wordです。ただし、Bashでは、readlineは最初のスペースまですべてを削除し、その間のすべてのスラッシュを削除します。

Bindを使用して.inputrcと.bashrcの両方で\ C-w:backward-kill-Wordのさまざまな組み合わせを試しましたが、希望どおりに機能させることができません。

面白いことに、仕事中のWindowsのPuTTYを使用すると、Alt + Backspaceを使用できます。これは、マニュアルにもデフォルトのバインディングであると記載されており、希望どおりの動作を生成できます。しかし、自宅のMacのTerminal.appでは、これは機能しません。 Terminal.appからログインしているFreeBSDまたはLinuxサーバーについても同じことが言えます。

そこで私はスーパーユーザーに助けを求めます。

23
Stefan M

readlineはバインドされません Ctrl-W デフォルトではターミナルドライバによって処理されるため、次のようになります。

$ stty -a
(...) werase = ^W; (...)

これを無効にするには、(~/.bashrcで)実行する必要があります。

stty werase undef
bind '"\C-w": backward-kill-Word'

.inputrcは、次の場合に読み取られるため、ここでは役に立ちません。 Ctrl-W まだweraseに割り当てられています。

また、上記のように、\C-w形式のkeyseqsは二重引用符で囲む必要があることに注意してください。


異なる端末が処理する場合があります Alt-Backspace 別の方法で。

  • PuTTYおよびGNOMEターミナル(デフォルト設定)は1b 7fESC DEL)を送信します
  • XtermとmetaSendsEscape: true1b 08ESC BS)を送信します。
  • XtermwithoutmetaSendsEscape88HTS 、またはBS最高ビットが設定されています)。

Xtermには、の動作を制御するためのいくつかの設定があります Alt キー(呼ばれる Meta XtermおよびX11一般)。 metaSendsEscapeを使用して、 Alt キー押下の前にESC(hex 1b)を付けます。設定なし(デフォルトモード)、 Alt 入力文字の最上位ビットを設定し、特殊文字を生成します。 (例えば、 Alt-N 結果はそれぞれESC nîになります。)

私が覚えている限り、Terminal.appにも同様の設定があり、Meta/Alt/whatever-Macs-useの動作を制御します。

40
user1686

grawityは、これは.inputrcファイルでは制御できないと書いていますが、それは正しくありません。

set bind-tty-special-chars off.inputrcを実行すると、特別な端末文字の動作をカスタマイズできます。

例えば:

set bind-tty-special-chars off
Control-u: kill-whole-line
Control-w: backward-kill-Word
19
fjarlq

記録のために、iTerm2に適用される答えは設定することです Alt-Backspace (または Opt ⌥- Macの場合)英数字以外の文字を区切り文字として処理する0xb1アクションを実行するために、16進コード0x7fおよびbackward-kill-Wordを送信します。

区別するために、これが私が説明している動作です。 Opt ⌥- 一度これを変更します:

echo "/example/filepath/with_non-alpha.characters@blah:meh

これに:

echo "/example/filepath/with_non-alpha.characters@blah:

そしてその後のプレス Opt ⌥-

echo "/example/filepath/with_non-alpha.characters@

echo "/example/filepath/with_non-alpha.

echo "/example/filepath/with_non-

echo "/example/filepath/with_

echo "/example/filepath/

ITerm2の設定は次のようになります。 enter image description here

したがって、PuTTYとTerminalに固有の、 grawityの答え は素晴らしいです。しかし、iTerm2の設定を適用する方法を探すのに恥ずかしい時間を費やしたので、このスーパーユーザーの投稿が最も頻繁に表示されるようです。したがって、この質問に添付された回答としてiTerm2に適用される関連情報を提供する責任があるようです。

3
TCAllen07