変更されたバッファにマークを付けずにVimで出現回数を数える


111

現在のバッファにパターンが存在する回数を知るために、私は次のことを行います。

:%s/pattern-here/pattern-here/g

これはパターンの発生回数を示しますが、明らかに煩雑であり、「変更済み」ステータスを設定するという副作用もあります。

数えるよりエレガントな方法はありますか?

回答:


166

置換を回避するには、2番目のパターンを空のままにして、「n」フラグを追加します。

:%s/pattern-here//gn

これは公式のヒントとして説明されています


8
さらに厄介ですが、少なくとも今ではエレガントな方法がないことが公式になっています...
ポールオイスター

53
すでに/を使用して検索を実行した場合、それは:%s /// gnになります
Peter Gibson

したがって、.vimrcに追加するだけ
JESii

3
私は次のマッピングで非常に便利だとわかりました:nnoremap <leader>n :%s///gn <CR>最後の検索の出現回数を数える
IkarPohorský

1
このカウントを変数に入れる方法はありませんか?それが私に必要なものです...
Steven Lu

8
:help count-items

VIM 6.3では、次のようにします。

:set report=0
:%s/your_word/&/g    # returns the count without substitution

VIM 7.2では、次のようにします。

:%s/your_word/&/gn   # returns the count, n flag avoids substitution

私は大きなファイルを持っていて、このアプローチに従うことはgrepよりもはるかに高速でした。
Jai Prakash

5
:!cat %| grep -c "pattern"

それは正確にはvimコマンドではありませんが、vimから必要なものを提供します。
頻繁に使用する必要がある場合は、コマンドにマップできます。


7
もっと簡単に:!grep -c "pattern" %
Iazel 2014年



-1

vimgrepはあなたの友達です:

vimgrep pattern %

ショー:

(1 of 37)

7
これは発生をカウントしませんが、パターンを含む行をカウントします。したがって、パターンが連続して2回発生しても、1回だけカウントされます。
sotto
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.