web-dev-qa-db-ja.com

grep -nの結果から、その特定の行でvimを開くにはどうすればよいですか? (キーボードのみを使用)

grep "keyword" -nを実行すると、次の結果リストが表示されます。

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

見つかった行のファイル(リストの2番目のファイルなど)を開くにはどうすればよいですか?

マウスを使用して出力をコピーし、vimの後にコピーしてから、コピーした行番号に+を追加します。 (つまり、マウスコピーを使用してvim a/b/c +70を記述し、ファイル名を取得し、別のマウスコピーを使用して行番号を取得することを意味します。

キーボードショートカットでそれを行う方法はありますか?

8
CIsForCookies

2つのこと:

  1. Vimはgrepをサポートしています。

    Vimを開いて :grep keyword ... を実行すると、Vimは quickfix list に結果を入力し、最初のファイルにジャンプします。その後、 :cc n (およびその他のコマンド)を使用して、n番目のクイックフィックスエントリにジャンプできます。

  2. Grepの出力を使用して、前述のクイックフィックスリストを作成できます。

    vim -q <(grep -n keyword ...)
    

    次に、上記のクイックフィックスナビゲーションコマンドを使用します。

どちらも、手動でgrepの出力をいじるよりも簡単です。

(2)の代わりに、grepの出力をファイルに保存し、代わりにVimを開く必要がないと思われる場合は、代わりにそのファイルを使用できます。

grep ... | tee log
vim -q log
12
muru

@muruが答えたように、grepのサポートが既にない場合は、そうすることができます:

:cexpr system("grep -n keyword")

別のコマンド、git grepなどで使用できます。

また、バッファで出力を開き、「cbuffer」を使用できます。

それについてのマニュアルの quickfix セクションを参照してください。

2
max630