質問
bash の現在行で正規表現文字列の置換を実行する方法はありますか?
長いコマンドラインを入力した後で、その行のどこかの単語を変更したいことに気づく、という状況によく遭遇します。
私の現在のアプローチは、行を終了して、 を押すことです。 Ctrl+あ (行の先頭に移動するには)、# を挿入して (行をコメントアウトするには)、Enter キーを押してから、 ^oldword^newword
構文 (^oldword^newword
oldword を newword に置き換えた後、前のコマンドを実行します)。
しかし、これを達成するには、より良い (より速い) 方法が必要です。(ほとんどの場合 ssh セッションを使用しているため、マウスは使用できません)。
おそらくこれには emacs のようなキーコマンドがあるのでしょうが、私は知りません。
編集:viモードを使ってみました。何か奇妙なことが起こりました。私は大好きな vim ユーザーですが、大好きな bash を使用するのに深刻な問題がありました。私の潜在意識に焼き付けられていた指の動きが突然動かなくなりました。私はすぐに emacs モードに戻り、お気に入りのエディタとして emacs を試してみることを検討しました (ただし、同じことがまた起こるかもしれません)。
解決
残念ながら、これより良い方法はありません。キーストロークを行うのにうんざりしている場合は、マクロを使用してキーストロークを削減できます。以下を追加してください ~/.inputrc
:
"\C-x6": "\C-a#\C-m^"
"\C-x7": "\C-m\C-P\C-a\C-d\C-m"
ここで、新しい bash インスタンスで (またはリロード後) .inputrc
現在のシェルで C-x C-r
)、次のことができます。
- 偽のコマンドを入力します (例:
ls abcxyz
). - Ctrl+x を押してから 6 を押します。マクロは
#
行の先頭にコメント行を実行し、最初の行を入力します。^
. - 修正内容を入力します (例:
xyz^def
). - Ctrl+x を押してから 7 を押します。マクロは置換を完了し、前の (コメントされた) 行に進み、コメント文字を削除して、マクロを再度実行します。
決してエレガントとは言えませんが、readline で得られる最高のものだと思います。
他のヒント
ksh、vi モードでは、コマンド モードで「v」を押すと、現在のコマンド ラインの内容で完全な vi セッションが生成されます。その後、vi コマンドの全範囲 (この場合はグローバル検索と置換) を使用して編集できます。viから:wqを実行すると、編集したコマンドが実行されます。bash にも同様のものが存在すると確信しています。bash は以前のバージョンを拡張する傾向があるため、おそらく同様のものがあるでしょう。
こんにちは、
代わりに vi モードを使用してみてはどうでしょうか?set -o vi と入力するだけです
次に、変更したい単語に移動し、その単語の内容に応じて cw または cw を実行するだけでよいでしょうか。
おっと、コマンド履歴の前の行に ESC k to o を追加するのを忘れていました。
普段エディターには何を使っていますか?
乾杯、ロブ
編集:最初の返信で言い忘れたのは、vi の "ex" モードのときに入力するコマンドを使用して、bash の vi コマンド ラインを考える必要があるということです。結腸に入った後。
最悪なのは、h (左) と l (右) という古代の vi コマンドを使用してコマンド履歴を移動する必要があることです。ただし、w (または W) を使用すると、複数の単語をバウンスできます。
ただし、慣れてしまえば、あらゆる種類のコマンドが利用できるようになります。ESC / my_command を入力すると、履歴が最新のものから順に遡って、テキスト my_command を含むコマンド ラインの最初の出現が検索されます。それが見つかったら、n を使用して次の出現箇所などを見つけることができます。N を押すと検索方向が逆になります。
bash のマニュアル ページを読んで、vi モードで何が利用できるのかを確認してみます。上矢印と下矢印が ESC k に置き換えられ、次に j に置き換えられるという事実を乗り越えると、vi モードは bash でのコマンドライン編集に emacs モード以上の機能を提供することがわかります。
私見ではナチュリーです!(-:
Emacs?80メガで常にスワップしています!
乾杯、ロブ