bashで履歴を検索するためのctrl + Rの代替手段を見つけたい。 bashでviモードを有効にできますが、検索できません。 /search
または?search
を実行しても、何も起こりません。もっと押すべきものはありますか? Enterキーを押してみたところ、次のようになりました。
$ set -o vi $ ls|grep f $ /gr -bash: /gr: No such file or directory $
コメント
回答
bash / readlineには確かにVimスタイルの検索があります。実際、コマンドラインは基本的にVimエディターの縮小版であり、かなりの数の通常モードコマンドを使用できます。これについては1秒で詳しく説明しますが、最初の検索です。必要な重要な情報は、コマンドラインで点滅しているカーソルを見つめると、Vimの挿入モードに相当することです。 Esc kbdを押して、通常モードにするにはどうすればよいですか? >もちろんです。
そこから / を押し、検索語を入力して Enter を押します。これで n kbdを使用できます。 >と N を使用して、結果を前後に移動します(デフォルトでは、n
を使用して、効果的に後方に検索します...最初から前方に検索します将来的に履歴がないため、結果は表示されません!)現在の結果をコマンドとして実行するには、もう一度 Enter を押します。
「忘れないでください」ただし、通常モードでは、探しているものが見つからず、挿入モードでテキストの入力に戻りたい場合は、Vimで通常行うことを実行してください。たとえば、 i を押すとそれが行われます。または、VimコマンドC
を使用して、カーソルの後のテキストを削除し、挿入モードに入ることができます。これは便利です。 (カーソルを最初の列を超えて移動した場合は、その前に0
を付けることができます。)または、A
、、R
、s
、s
、I
、Ctrl-C
...画像が表示されます。
挿入モードに入るさまざまなコマンドのほかに、b
、B
、e
、E
、w
、W
、0
、$
など。Yank/ delete / putもあり、yB
、c2e
、d$
など 1 最後に、u
ndoも機能します。さあ、他のことを自分で試してみてください。
ああ、少し道に迷った場合や、たまに私に起こるように、行の折り返しのファンキーさがc / lをスクランブルしている場合は、ふりをして。これにより、コマンドラインのコンテンツがVimの実際のインスタンスに取り込まれるため、完全装備の操作可能なテキストエディターで編集できます。 。完了したら、:wq
を実行して、必要なものをシェルに送信して実行します。
1 残念ながら、オペレーター+モーションコマンド(caw
、dis
、yap
など)はサポートされていません。ただし、以下の @EdNeville のコメントには、いくつかのreadline設定へのリンクがあります。すべてのop-motionコマンドと他の多くのコマンドがあります。.inputrcファイルに追加することで、コマンドラインベースのVimエクスペリエンスを実際に完成させることができます。
追加情報:set -o vi
または
を使用できます。使用可能なreadlineコマンドのいずれかを使用できます。Ctrl-R
はVimモードでも使用できるはずですが、使用できない場合は試してみてください。これを~/.inputrc
...
set editing-mode vi "\C-r": reverse-search-history "\C-s": forward-search-history
さらに良いことに、<などのその他の方法では使用できないコマンドを追加できます。 / p>
"\C-o": operate-and-get-next
これにより、履歴からコマンドを選択すると(例:Vim検索経由)Enter
の代わりにCtrl-O
を押すと、Bashがコマンドを実行し、履歴から次のコマンドを挿入して、実行できるようにします。
完全なリストについては、Bashマンページの Readlineコマンド名セクションを参照してください。
(コマンドですが、私はすでにここから離れすぎています。)
コメント
- いいですね。学習の瞬間です。
- @niklas、これがあなたの答えです
- @glennjackman私はこの機能を多用しています。本当に便利です。
- @NiklasRosencrantzうん、わかりました。質問者だけに焦点を合わせるのではなく、一般的に役立つ回答を書いてみてください。そこで、さまざまなモードからのコマンドの混合に関する追加情報を追加しました。
-
ciw
.inputrcを変更した場合: usenix.org.uk/content/bash.html#input
回答
@ B-Layerが言及したことは、bashでもzshでも同様にうまく機能します。
すでにVIMを使用しているため、およびneovim
またはvim8
を使用している場合は、:terminal
を試すこともできます。 vim
でデフォルトのターミナルを開きます。
次に、vimコマンドを使用して、端末コマンドの出力をナビゲートしたり、端末コマンドの履歴をナビゲートしたりできます。
参照
<C-r>
はemacsモードであり、学びたいと思います。 viモード。<C-r>
は単なる再帰検索です。特にbash固有の拡張機能である可能性があるため、emacsとviの関係がわからない(私の記憶はその詳細があいまいです)。/
の使用を思いとどまらせるわけではありませんが、それぞれに(異なる)用途があるだけです。