web-dev-qa-db-ja.com

Vimの検索の一致をリストするにはどうすればよいですか?

ヒットしたときに一致したものをリストしたい:

/example

すべての一致が一度にどこにあるかがわかります。

    " put in your ~/.vimrc file
    " START search related configs and helps
    "
    " ignore case when searching
    set ignorecase

    " search as characters are entered, as you type in more characters, the search is refined
    set incsearch

    " highlight matches, in normal mode try typing * or even g* when cursor on string
    set hlsearch

    " yank those cheat commands, in normal mode type q: than p to paste in the opened cmdline
    " how-to search for a string recursively
    " :grep! "\<doLogErrorMsg\>" . -r
    "
    " how-to search recursively , omit log and git files
    " :vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`
    " :vimgrep /srch/ `find . -type f -name '*.pm' -o -name '*.pl'`
    "
    " how-to search for the "srch" from the current dir recursively in the Shell
    " vim -c ':vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`'
    "
    " how-to highlight the after the search the searchable string
    " in normmal mode press g* when the cursor is on a matched string

    " how-to jump between the search matches - open the quick fix window by
    " :copen 22

    " how-to to close the quick fix window
    " :ccl

    " F5 will find the next occurrence after vimgrep
    map <F5> :cp!<CR>

    " F6 will find the previous occurrence after vimgrep
    map <F6> :cn!<CR>

    " F8 search for Word under the cursor recursively , :copen , to close -> :ccl
    nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>

    " omit a dir from all searches to perform globally
    set wildignore+=**/node_modules/**

    " use Perl regexes - src: http://andrewradev.com/2011/05/08/vim-regexes/
    noremap / /\v
    "
    " STOP  search related configs and helps
3
Yordan Georgiev
:g//p

長い形式で:

:global/regular-expression/print

パターン/正規表現を省略すると、Vimは以前の検索用語を再利用します。

雑学:grep ツールは、このコマンドシーケンスにちなんで命名されました。

209
too much php

以下を行うこともできます。

g/pattern/#

必要なパターンと行番号が印刷されます。

49
Taurus Olson

このリストを見て、マッチ間をすばやくジャンプしたい場合は、

:vimgrep example %

または

:grep example %

これにより、「エラーリスト」にすべての一致が入力され、:copenを使用してすべてをクイックフィックスバッファーにリストしたり、特定の行でEnterキーを押してその一致にジャンプしたり、:cn:cpで行き来します。

詳細な説明については、 同様の質問に対する私の回答 を参照してください

42
Paul Ivanov

新しいものを学びました:Location List
タイプ:lvim foo %は、現在のファイルでfooを検索し、fooを含むすべての一致をlocation listに入力します。
タイプ:lopenクイックフィックスウィンドウでロケーションリストを開きます。これは通常どおり完全にナビゲートできます。
つかいます :lnext/:lpreviousからリストへ(最高のエクスペリエンスのためにtpope/unimpairedマッピングを使用)

33
freeo

別の可能性は、インクルードファイル検索コマンドを使用することです。

[I

これにより、カーソルの下にあるWordのすべての出現がリストされます。ただし、現在のファイルに含まれているファイルも検索されるため、必要以上に多くなる可能性があります。

しかし、このコマンドの素晴らしい点は、検索結果の表示には、各一致の行番号に加えて、一致の数のカウントも表示されることです。

:help include-search

たくさんのバリエーションを見ることができます。

についてのメモ

:g//p

これはさらに減らすことができます

:g//

他の人が言ったように、p(rint)がデフォルトのアクションです。

15
dekeguard

:set hlsearchを使用すると、すべての一致が黄色で強調表示され、ファイルの一致を簡単にスキャンできます。それはあなたが望むものではないかもしれませんが、検索後、:g // pはリストされた一致を与えます

10
Kevin

現在の検索パターンと一致するニースquickfixウィンドウを取得できます

:vim // %
:copen

以前に/patternだけを使用して複雑な検索パターンを作成した場合に非常に便利

編集:これは、すべての開いているバッファでも機能することがわかりました

:bufdo vimgrepadd // %
:copen
8
user1859022

これについて詳しく説明するには...の代わりに

/example
:g//p

直接書くこともできます

:g/example/p

または、p(rint)が:g(lobal)コマンドのデフォルトのアクションであるため、これを

:g/example

そして、p(rint)の代わりに、他のアクションが可能です。 d(エレテ)。 :help:globalを参照してください

8
user55400
g/pattern

:set numberがある場合、上記のコマンドは行番号も表示します。

:set numberがない場合は、

g/pattern/#

行番号が表示されます。

5
Sagar Jain

このためのコードを書きました。実際にvimgrepの問題を回避します。名前のないファイルでも機能します。使いやすいです。

function! Matches(pat)
    let buffer=bufnr("") "current buffer number
    let b:lines=[]
    execute ":%g/" . a:pat . "/let b:lines+=[{'bufnr':" . 'buffer' . ", 'lnum':" . "line('.')" . ", 'text': escape(getline('.'),'\"')}]"
    call setloclist(0, [], ' ', {'items': b:lines}) 
    lopen
endfunction

パターンで呼び出すと、すべての一致を含むロケーションウィンドウが開きます。

これはコマンドかもしれません

command! -nargs=1 Mat call Matches(<f-args>)

したがって、必要なことは:Mat pattern

また、次のマッピングを使用して、現在の視覚的な選択の一致を取得します。

vnoremap Y "xy:call Matches(@x)<CR>
0
user2679290

すべての検索結果をリストするには、Ctrl-f:

nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>
0
Fisher