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


9

実行grep "keyword" -nして次の結果リストを取得すると、

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

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

マウスを使用して出力をコピーし、後でコピーして、コピーした行番号をvim追加+します。(つまりvim a/b/c +70、マウスコピーを使用してファイル名を取得し、別のマウスコピーを使用して行番号を取得します(または、十分短い場合は手動でコピーします)。

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


あなたはそのようなものを試すことができます:echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset
Arkadiusz Drabczyk

2
また、Vimをより効率的に使用したい場合は、ViおよびVim Stack Exchange 専用サイトをチェックしてください。
muru

回答:


14

2つのこと:

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

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

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

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

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

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

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

grep ... | tee log
vim -q log

git statusで同じメソッドを使用しようとすると、
失敗し

3
@CIsForCookies grep -n<filename>:<line>: ...)と同じ形式にはなりません。私はGit の一時的なプラグインを使用していますが、それは問題です:Gstatus。目的のファイルに移動してEnterキーを押します。
muru

ところで、私は〜/ .bashrc grep aliasを常に色を使用するように編集しましたが、何らかの理由で-q >()オプションを壊しました...
CIsForCookies

2

@muruが答えたように、grepがまだサポートされていない場合は、そうすることができます。

:cexpr system("grep -n keyword")

git grepたとえば、別のコマンドで使用できます。

また、出力をバッファで開いて「cbuffer」を使用することもできます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.