2009-08-31 13 views
8

区切り文字bash(またはreadline)を単語の区切りに変更したいとします。具体的に私は、テキストbashの単語区切り文字を変更する

ls some-file 

を持っていると私はそれだけで'-'文字までの全体some-fileテキストではなくを削除Alt-Backspaceを押すとなるように、'-'は言葉を区切るないようにしたいです。これにより、--group-directories-firstのような長いフラグの削除も迅速かつ簡単になり、1つのキー・プレスだけを必要とします。

これはzshがどのように動作するのかと思いますが、私はbashを同じように動作させたいと思います。

+0

' - '文字はコマンドラインで特別な意味を持ちますので、デフォルトの動作は驚くべきことではありません。あなたがそれを変更することができれば、副作用はありますか? 'ls -al some-file'と入力したとします。すべてを削除しますか? – pavium

+0

@paviumその場合、 'some-file'を最初に削除したいのですが、もう一度' -al'を削除したいと思っています。 – spatz

+1

superuser.comで[回答](http://superuser.com/questions/547130/bash-readline-for-move-forward-by-whitespace-delimited-word)が見つかりました。 – Ekans

答えて

7

ctrl-wはあなたの望むものとまったく同じです。

+0

マニュアルのその部分を何百回も読んだので、私はそれを逃したとは思わない。ありがとう:) – spatz

+3

ちょっと試してみたところ、スラッシュは区切り文字として無視されているので、少しでも最適ではないことに気づくでしょう。 '' \ ew ":unix-filename-rubout'行を'/etc/inputrc'に追加しましたが、M-eはハイフンを無視して単語を削除しますが、スラッシュを区切り文字として扱います。 – spatz

3

stty werase設定がctrl-Wに割り当てられている場合、ctrl-Wのbashキーマッピングは機能しません。あなたが "stty -a"を実行し、 "werase =^W"が優先され、単語の境界が何であるかというttyのアイディアを使用すると、 ttyの単語境界の考え方は通常空白ですが、bashのbackward-kill-word関数には - と/が含まれています。

あなたはAltキーを押しながらBackspaceキーがWERASE設定と同じことを行うようにしたい場合は、あなたがこれを行うことができます: バインド ' "\ M- \ CH":UNIX-ワードラブアウト' バインド「"\ M-を\ c-? ":unix-word-rubout '

また、Ctrl-WをAlt-Backspaceで実行させたい場合は、次のようにします。 stty werase undef#これを行わない限り、bashは無視します次のバインドコマンド バインド '"\ Cw":backwards-kill-word'

+1

OPとは無関係ですが、 'stty werase undef'が私の問題を完全に修正しました!ありがとう! –

1

これは便利なことがあります:Ctrl-rは逆方向i検索(履歴と現在の行)を開始します。スペースを逃してエスケープしてもう一度argに戻るには、最初のスペースを打った後にもう一度ctrl-rを押してください。その後、オプションで行の残りの部分を削除することができます。

特に長いパスの引数(たとえばcpやdiff)を扱っていて、最初の引数の終わりを変更する必要がある場合に特に便利です。

これを行うには\ M-bを試しましたが、スラッシュで止まります。

関連する問題