回答:
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
「正規表現」の略です。
g/re/p
は実際にはからed
ではなくからvi
です。Grepはviを数年前に作成します。
nnoremap <leader>n :%s///gn<CR>
マッピングを。そこで<leader>n
、前に検索したパターンの出現回数を数えるために押します。これは驚くほど頻繁に使用します。
このPR https://github.com/vim/vim/pull/4317のおかげで、各検索コマンドはvim 8.1.1270で検索統計(現在の一致位置や一致数など)を表示します。必ずS
変数から削除してくださいshortmess
。
:%s/pattern//g
ステータスバーに置換の数が表示されます。それは何回pattern
現れます。次に、を押しu
て置換を元に戻します。
ここでの回答に基づいて.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>*
内容インサート*
(挿入モードでも使用することができる)コマンドラインでレジスタ。
:h count-items