ファイル内の単語の出現回数をカウントする方法はありますか?


68

単語またはパターンがファイルに出現する回数をカウントすることは可能ですか?これは、関数が呼び出された回数などを調べるのに役立つ場合があります。


回答:


94

Quincyの答えは問題ありませんが、バッファーを編集する必要のない正確な方法があります。

:%s/pattern//ng

これによりのようなメッセージ3 matches on 2 linesが出力され、バッファは変更されません。

このnフラグは、:substitute実際の置換を実行する代わりに、コマンドに一致の数を出力させます。このgフラグは、行ごとに複数の一致のレポートを有効にします。


ユースケースに役立つもう1つのことは、パターンに一致するすべての行を印刷することです。

:global/pattern/print

次のように短縮できます。

:g/pattern

これは、この:globalコマンドの最も単純な使用法の1つです(これは驚くほど強力です)。一致するすべての行を単に出力し、pattern(複数行がある場合)Enter別のコマンドを押すか入力して、行を消します。

トリビアのビット:このコマンドは、名前の由来であるgrepとして、それは一般的に説明されるように、g/re/pどこ、re「正規表現」の略です。


2
+1これはかなり良い回答であり、その場で同時に合理的に詳述されています。ほとんどの質問でそのような答えが得られることを期待しましょう!:)
yo

素晴らしい答えと素晴らしいトリビア!
BiBi

私はこれをおそらく年に2〜3回やらなければならず、構文を覚えてはいけないので、毎回検索マシンに伝えます。この明確な答えに感謝したかったのは、それが私のために何度も訪れており、数年前から、そのひどいwikiaページを救ってくれたからです!(ウィキアではなく、ページのコンテンツ)
ウィル

1
マイナービット:コマンドg/re/pは実際にはからedではなくからviです。Grepはviを数年前に作成します。
ウィル

私が持っているnnoremap <leader>n :%s///gn<CR>マッピングを。そこで<leader>n、前に検索したパターンの出現回数を数えるために押します。これは驚くほど頻繁に使用します。
ロルフ

15

:%s/pattern//nn最後のフラグは、:s実際に置換ではなく一致の数を報告するようにコマンドに指示します。:h :s_flags詳細をお読みください。


4
じゃないgn
yo

1
@yo 'はい、gは単なる別のフラグですが、g1行に複数の一致があると思われる場合も使用したいでしょう。ただし、質問の目的上、フラグnはより重要です。
ドゥルヴァサーガル

5

最初に/正規表現を検索するために使用し、次に

:%s///gn

これは、a。)使いやすい(正規表現が最初に一致した結果をプレビューできるため)およびb。)すべての出現gをカウントするフラグとグローバルに一致することを除いて、Dhurvaの答えと同じです。



2

:%s/pattern//g

ステータスバーに置換の数が表示されます。それは何回pattern現れます。次に、を押しuて置換を元に戻します。


1

ここでの回答に基づいて.vimrcに追加したマッピング:

" count nr of occurrences of word under cursor
nnoremap <leader>c :%s/<c-r><c-w>//gn<cr>

" count nr of occurrences of visual selection
vnoremap <leader>c :<c-u>%s/<c-r>*//gn<cr>

少し説明がありますが、できれば新しい初心者に役立つでしょう:

  • <c-r><c-w> コマンドラインのカーソルの下に単語を挿入します。多くの場合に便利です。

  • <c-u>自動的に挿入を削除するために必要とされる'<,'> 押すと:ビジュアルモードでは、コマンドラインに行きます。 *レジスタ(最後)の視覚的な選択を含んでいる、<c-r>* 内容インサート*(挿入モードでも使用することができる)コマンドラインでレジスタ。

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