bashでViモードで履歴検索を実行する方法

bashで履歴を検索するためのctrl + Rの代替手段を見つけたい。 bashでviモードを有効にできますが、検索できません。 /searchまたは?searchを実行しても、何も起こりません。もっと押すべきものはありますか? Enterキーを押してみたところ、次のようになりました。

$ set -o vi $ ls|grep f $ /gr -bash: /gr: No such file or directory $ 

コメント

  • readlineのviモードで本当に機能していませんか?最新バージョンのbashで問題なく動作します。
  • @ D.BenKnobleはい、そうですが、<C-r>はemacsモードであり、学びたいと思います。 viモード。
  • <C-r>は単なる再帰検索です。特にbash固有の拡張機能である可能性があるため、emacsとviの関係がわからない(私の記憶はその詳細があいまいです)。 /の使用を思いとどまらせるわけではありませんが、それぞれに(異なる)用途があるだけです。

回答

bash / readlineには確かにVimスタイルの検索があります。実際、コマンドラインは基本的にVimエディターの縮小版であり、かなりの数の通常モードコマンドを使用できます。これについては1秒で詳しく説明しますが、最初の検索です。必要な重要な情報は、コマンドラインで点滅しているカーソルを見つめると、Vimの挿入モードに相当することです。 Esc もちろんです。

そこから / を押し、検索語を入力して Enter を押します。これで n N を使用して、結果を前後に移動します(デフォルトでは、nを使用して、効果的に後方に検索します...最初から前方に検索します将来的に履歴がないため、結果は表示されません!)現在の結果をコマンドとして実行するには、もう一度 Enter を押します。

「忘れないでください」ただし、通常モードでは、探しているものが見つからず、挿入モードでテキストの入力に戻りたい場合は、Vimで通常行うことを実行してください。たとえば、 i を押すとそれが行われます。または、VimコマンドCを使用して、カーソルの後のテキストを削除し、挿入モードに入ることができます。これは便利です。 (カーソルを最初の列を超えて移動した場合は、その前に0を付けることができます。)または、A、、RssICtrl-C ...画像が表示されます。

挿入モードに入るさまざまなコマンドのほかに、bBeEwW0$など。Yank/ delete / putもあり、yBc2ed$など 1 最後に、u ndoも機能します。さあ、他のことを自分で試してみてください。

ああ、少し道に迷った場合や、たまに私に起こるように、行の折り返しのファンキーさがc / lをスクランブルしている場合は、ふりをして。これにより、コマンドラインのコンテンツがVimの実際のインスタンスに取り込まれるため、完全装備の操作可能なテキストエディターで編集できます。 。完了したら、:wqを実行して、必要なものをシェルに送信して実行します。

1 残念ながら、オペレーター+モーションコマンド(cawdisyapなど)はサポートされていません。ただし、以下の @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コマンドを使用して、端末コマンドの出力をナビゲートしたり、端末コマンドの履歴をナビゲートしたりできます。

参照

  1. http://vimcasts.org/episodes/neovim-terminal/
  2. https://neovim.io/doc/user/nvim_terminal_emulator.html
  3. https://github.com/vim/vim/blob/master/runtime/doc/terminal.txt

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です