web-dev-qa-db-ja.com

Vimで一致数を表示

Googleには素敵な機能がありますChrome=検索を実行すると、検索しているキーワードの一致数がわかります。しかし、Vimにはそのような機能はありません機能。一部の人々は%s/pattern//gn または類似:

http://vim.wikia.com/wiki/Count_number_of_matches_of_a_pattern
Vimでの一致数をカウントできません

しかし、それは本当にかなり長いです!! 「*」、「%」を押すか、「/」と「?」を使用して検索を行ったときの数を探しています。

何か案が?

53
Rafid

プラグイン インデックス検索

最新バージョン こちら

27
SergioAraujo

直接的な方法はわかりませんが、:%s///が最後の検索をデフォルトのパターンとして使用する方法を利用できます。

:nmap ,c :%s///gn

その後、検索を実行して,cを押し、一致の数を報告できます。

唯一の問題は、*#'smartcase'を無視することです。そのため、*を使用した後、結果が数回ずれる可能性があります。これを回避するには、*の後に/を実行します。UpENTER そして,c

21
DrAl

@Alの回答への1つの追加:vimにステータスラインに自動的に表示させたい場合は、vimrcに以下を追加してみてください:

let s:prevcountcache=[[], 0]
function! ShowCount()
    let key=[@/, b:changedtick]
    if s:prevcountcache[0]==#key
        return s:prevcountcache[1]
    endif
    let s:prevcountcache[0]=key
    let s:prevcountcache[1]=0
    let pos=getpos('.')
    try
        redir => subscount
        silent %s///gne
        redir END
        let result=matchstr(subscount, '\d\+')
        let s:prevcountcache[1]=result
        return result
    finally
        call setpos('.', pos)
    endtry
endfunction
set ruler
let &statusline='%{ShowCount()} %<%f %h%m%r%=%-14.(%l,%c%V%) %P'
13
ZyX

ここに安価な解決策があります... Vimで[すべて検索と置換]を使用しました。派手なスクリプトはありません。私はXを検索してすべてをXに置き換えました。最後に、Vimは「9892行の2134置換」を報告します。 Xは2134回登場。 :q!を使用してください保存せずにファイルを終了します。大丈夫です。

6
mh2parker

あなたはすでに十分な答えを持っていますが、この問題にはまだもう1つのアプローチがあるようです。

これは実際、私が数日前に対処しなければならなかったものです。カウントするWordの下にカーソルがあるときにマッピングにヒットし、一致数を返すように、関数とマッピングを追加しました。

関数:

" Count number of occurances of a Word
function Count(Word)
    let count_Word = "%s/" . a:Word . "//gn"
    execute count_Word
endfunction

そしてマッピング:

" Count current Word 
nmap <Leader>w <Esc>:call Count(expand("<cword>"))<CR>
3
alfredodeza

または、@ Alが示唆することから、キーの組み合わせをマップして行の大部分を記述し、実際のパターンが挿入される位置にカーソルを移動することができます。

:nmap、c ^ [:%s /// gn ^ [OD ^ [OD ^ [OD ^ [OD

「^ [」はどこですか Ctrl+ V、Esc そして '^ [OD'は Ctrl+ V、Left

次に、 '、c'を押すとコマンドモードになり、パターンを入力し、カーソルを2番目の '/'の上に置いて、パターンを挿入する準備ができます。

このプラグインはまさにそれを行います。 https://github.com/osyo-manga/vim-anz

Vimで単語を検索すると、ステータスラインに単語数が表示されます。また、検索された単語の隣に表示するオプションもあります。 this_is_my_sample_Word(3/12)、またはthis_is_my_sample_Word(7/12) 。これは基本的に言うと、これは12回のオカレンスのうち3番目または7番目のオカレンスです。

1
csebryam
:vim[grep][!] /{pattern}/[g][j] {file} ...

VimgrepはVimの組み込み正規表現検索エンジンを使用するため、Vimの標準の検索コマンドのパターンを再利用できます。したがって、最初に/ {pattern} /を使用して、通常の方法で検索パターンをテストします。

次に、以下を入力します。

:vim /CTRL+r//g %

ここで、CTRL+r/は、最初のスラッシュの後に最後の検索パターンを挿入します。ステータス行に(1 of max)が表示されます。ここで、maxは{pattern}の最大一致数です。次に、:cnext:cprevを使用して次と前の一致を検索し、:cfirst:clastを使用して最初と最後の一致を検索します。これらの4つのコマンドは、再実行して実行を高速化できます。

0
Peter Farfel