2

VIM を使用してテキスト ファイル内の特定の文字列を検索するにはどうすればよいですか? 検索文字列のインスタンスを含むすべての行を出力しますか?

お知らせ下さい。

ありがとう!

4

4 に答える 4

5

Vim の組み込みglobalツールを使用できます。ウィンドウの下部にすべての一致の行が出力されます。これの例は次のとおりです。:g/searchterm/Enter

ファイル内のどこに一致するかを把握するために、まだ有効になっていない場合は、行番号を有効にすると役立つ場合があります。これを行うコマンドは次のとおりです。:set numberEnter

次のコマンドを実行すると、追加情報が表示されます。:help globalEnter

編集:

結果を独自のウィンドウにリダイレクトする場合はvim.wikia.com、コマンド シーケンスの使用をお勧めします

:redir @a         redirect output to register a
:g//              repeat last global command
:redir END        end redirection
:new              create new window
:put! a           paste register a into new window

これは vimscript として非常に簡単にスクリプト化できますfunction。Vim 関数を適切にスクリプト化する方法を学ぶために、 Steve Losh - Learn Vimscript the Hard Wayチュートリアルを見たことがない場合は、チェックすることを強くお勧めします。

于 2013-02-24T04:51:27.020 に答える
4

それを行う別の可能性があります:g

現在のファイルのすべての行を単語で取得したいとしますfoo

次のように入力できます。

qzq:g/foo/y Z Enter

上記の行を実行した後、それらの行はレジスタに格納されますz"zpどこかに貼り付けるか、後で処理することができます。

すぐに何をしますか:

qzqz:レジスタをクリアする

:g/foo/y Z:一致したすべての行をヤンクして登録しますz

于 2013-02-25T00:07:32.567 に答える
3

:g[lobal]マイクの回答のコマンドに加えて、いくつかの代替手段があります。

  • :il[ist] foo現在のバッファ内のfoo コメントのように見えない行を含むすべての行を一覧表示します(:il[ist]!コメントも一致させたい場合に使用します)。

    リストが表示されているとき、ヒット<CR>してそれを消すか、またはヒット:して Ex コマンドを発行できます::5<CR>行 5 にジャンプし、:5t3行 3 の後に行 5 をコピーするなど。

    リストは一時的なものであることに注意してください。そのリストをもう一度表示したい場合は、コマンドを再発行する必要があります。

    使用法:

    :il foo<CR>
    :23<CR>
    
  • :vim[grep] bar % | cw[indow]bar現在のバッファに含まれるすべての行をクイックフィックス ウィンドウに取り込みます。

    :h quickfixそれを使用する方法を知るために読んでください。すばやく、ヒット<CR>して結果:cnにジャンプ、次の結果:cpにジャンプ、前の結果にジャンプ…</p>

    使用法:

    :vim bar % | cw<CR>
    (navigate to the result you want in the quickfix window 
     with arrows, `jk`, line numbers, search…)
    <CR> 
    

    Vim の internal のようなメソッドの代わりに:grep bar % | cw[indow]、システムの which を使用することもできます。grepgrep

    クイックフィックス ウィンドウの内容は、エラー リストを操作する次のコマンド:vimまたは:grepその他のコマンドまで変更されないことに注意してください。:makeこれは、クイックフィックス ウィンドウを非表示にして、同じリストで再び開くことができることを意味します。

于 2013-02-24T08:18:55.927 に答える
0

たとえば、「qqq」を検索した後、次のコマンドでその文字列を含む行のみが表示されます。

:v//d

"v"は前の検索 ("//")を含まない行に一致し、"d" はそれらを削除します。マイナスの「g」です。
必要な線だけがきれいに表示されます。特定のものに興味がある場合は、「mm」とマークします。
それらを表示し終わったら、「u」を使用して削除を元に戻し、ファイルを元に戻します (忘れる必要はありません)。
その後、「n」でそれらの行間を移動するか、「'm」でマークされた行に移動します。

于 2014-11-24T16:18:17.117 に答える