4

bashの現在の行でregexp-stringreplaceを実行する方法はありますか?

長いコマンドラインを入力してから、その行のどこかで単語を変更したいという状況に陥ることがよくあります。

私の現在のアプローチは、行を終了し、Ctrl+ A(行の先頭に移動する)、#(行をコメントアウトする)を挿入し、Enterキーを押してから、^oldword^newword構文を使用する(^oldword^newwordoldwordをnewwordに置き換えた後に前のコマンドを実行する)ことです。 )。

しかし、これを達成するには、より良い(より速い)方法が必要です。(私はほとんどの場合sshセッションに参加しているため、マウスは使用できません)。

おそらく、これにはemacsのようなキーコマンドがいくつかありますが、私にはわかりません。

編集:私はviモードを使用してみました。何か奇妙なことが起こった。私は愛情のあるvimユーザーですが、愛するbashを使用するのに深刻な問題がありました。私の潜在意識に焼き付けられたすべての指の動きが突然機能しなくなりました。私はすぐにemacsモードに戻り、emacsを私のお気に入りのエディターとして試してみることを検討しました(私は推測しますが、同じことが再び起こる可能性があります)。

4

3 に答える 3

3

G'day、

代わりにviモードを使用するのはどうですか?set-oviと入力するだけです

次に、変更したい単語に移動して、単語の内容に応じてcwまたはcWを実行しますか?

おっと、コマンド履歴の前の行にESC ktooを入力するのを忘れました。

エディターには通常何を使用しますか?

乾杯、ロブ

編集:元の返信で言い忘れたのは、viで「ex」モードになっているとき、つまりコロンを入力した後に入力したコマンドを使用して、bashのviコマンドラインを考える必要があるということでした。

最悪なのは、h(左側)とl(右側)の古代のviコマンドを使用してコマンド履歴を移動する必要があることです。ただし、w(またはW)を使用して単語間をバウンスすることができます。

ただし、慣れると、あらゆる種類のコマンドを使用できるようになります。たとえば、ESC / my_commandと入力すると、履歴を振り返り、最新のものから順に、テキストmy_commandを含むコマンドラインの最初の出現箇所を見つけます。それが見つかったら、nを使用して次の発生などを検索し、Nを使用して検索の方向を逆にすることができます。

私はbashのmanページを読んで、viモードで何が利用できるかを確認します。上矢印と下矢印がESCk、次にjに置き換えられているという事実を克服すると、viモードがbashでのコマンドライン編集にemacsモード以上のものを提供することがわかります。

私見はきちんと!(-:

Emacs?80メガと絶えず交換!

乾杯、ロブ

于 2008-08-26T14:40:23.683 に答える
3

ksh の vi モードでは、コマンド モードで「v」を押すと、現在のコマンド ラインの内容で完全な vi セッションが開始されます。次に、vi コマンドの全範囲を使用して編集できます (この場合はグローバル検索と置換)。viから:wqすると、編集したコマンドが実行されます。bashにも同様のものが存在すると確信しています。bash は前任者を拡張する傾向があるため、おそらく似たようなものがあります。

于 2008-08-26T15:33:57.987 に答える
1

残念ながら、いいえ、本当に良い方法はありません。キーストロークの作成にうんざりしている場合は、マクロを使用してキーストロークを削減できます。以下を に追加します~/.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)、次のことができます。

  1. 偽のコマンド (例: ls abcxyz) を入力します。
  2. Ctrl-x を押してから 6 を押します。マクロ#は行の先頭に a を挿入し、コメント行を実行して、最初の^.
  3. 訂正を入力します (例: xyz^def)。
  4. Ctrl-x を押してから 7 を押します。マクロは置換を完了し、前の (コメント化された) 行に移動して、コメント文字を削除し、再度実行します。

正確にはエレガントではありませんが、readline で得られる最高のものだと思います。

于 2008-09-22T05:02:38.877 に答える