単語 (変数) を強調表示して検索するのを楽しんでい#ますが、現在のファイルに何回出現するかを単純に教えてくれる単一のコマンドを実行できれば幸いです。私は次のことを見つけました
:%s/dns_name_change_flag/&/gn
しかし、それはタイピングしすぎです。上記のワンライナーをマップして、カーソルの下の単語を使用する方法はありますか?
単語 (変数) を強調表示して検索するのを楽しんでい#ますが、現在のファイルに何回出現するかを単純に教えてくれる単一のコマンドを実行できれば幸いです。私は次のことを見つけました
:%s/dns_name_change_flag/&/gn
しかし、それはタイピングしすぎです。上記のワンライナーをマップして、カーソルの下の単語を使用する方法はありますか?
なしでこれを行う方法がわかりませんexecute
。次のマップは、単語境界パターン (および)F5
を使用して、カーソル下の単語の出現回数をカウントします。<cword>
\\<
\\>
:map <f5> :execute ":%s@\\<" . expand("<cword>") . "\\>\@&@gn"<CR>
:map <F2> "zyiw:exe "%s/".@z."//gn"<CR>
この行 (「:」なし) を .vimrc に追加すると、vim を起動するたびに F2 がマップされます。
「内部ワード」を z レジスタにヤンクし、バッファ全体で検索を実行して出現回数を出力します。
このアプローチは、単語自体ではなく、単語の一部のみである単語の出現もカウントするという点で、Thor によって与えられたものとは異なります。例: 'an' を検索すると 'and' もカウントされます。
これも役立つかもしれません:
「カーソルの下にある単語の出現箇所をすべてリストする簡単な方法は、[I (C などの言語を使用している場合は、このファイルとインクルード ファイル内の現在のキーワードを含む各行を表示します)」と入力します。
シーケンスを外部の grep コマンドにマップできます。例えば:
:nmap fg :execute '!fgrep --count <cword> %'<CR>
これにより、通常モードのコマンドが にマップされfgます。このコマンドは、外部プロセスで現在のファイルに対してfgrepを実行し、カーソルの下にある単語のインスタンスをカウントします。
これは、現在のバッファではなく、現在のファイルに作用します。:write
単語カウントが正確になる前に、ファイルがディスクに書き込まれていることを確認する必要があります (例: )。
そのためのプラグインを作成しました: SearchPosition ; 現在の検索パターンと現在の単語/選択のマッピングを提供し、一致が発生した場所もリストします。
1 match after cursor in this line, 8 following, 2 in previous lines;
total 10 for /\<SearchPosition\>/
検索レジスタを変更しない機能があります@/
fun! CountWordFunction()
try
let l:win_view = winsaveview()
exec "%s/" . expand("<cword>") . "//gn"
finally
call winrestview(l:win_view)
endtry
endfun
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <F3> :CountWord<CR>
すでに単語を検索している場合は、入力するだけです
:%~n