Liczenie wystąpień w Vimie bez oznaczania zmienionego bufora


111

Aby wiedzieć, ile razy wzorzec istnieje w bieżącym buforze, robię:

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

Podaje liczbę wystąpień wzoru, ale jest oczywiście uciążliwy, a także ma efekt uboczny w postaci ustawienia „zmienionego” statusu.

Czy istnieje bardziej elegancki sposób liczenia?

Odpowiedzi:


166

Aby uniknąć zamiany, pozostaw drugi wzorzec pusty i dodaj flagę „n”:

:%s/pattern-here//gn

Jest to opisane jako oficjalna wskazówka .


8
jeszcze bardziej uciążliwe, ale przynajmniej jest teraz oficjalne, że nie ma eleganckiego sposobu ...
Paul Oyster

53
Jeśli już przeprowadziłeś wyszukiwanie przy użyciu /, stanie się po prostu:% s /// gn
Peter Gibson

Więc po prostu dodaj go do swojego .vimrc
JESii

3
Bardzo przydatne znalazłem następujące mapowanie: nnoremap <leader>n :%s///gn <CR>policzyć wystąpienia ostatniego wyszukiwania
Ikar Pohorský

1
Nie ma sposobu, aby ta liczba przeszła do zmiennej, prawda? Tego właśnie potrzebuję ...
Steven Lu

8
:help count-items

Oto jak to zrobić w VIM 6.3.

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

W VIM 7.2, tak byś to zrobił:

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

Miałem duży plik i takie podejście było znacznie szybsze niż grep.
Jai Prakash

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

Nie jest to dokładnie polecenie vim, ale da ci to, czego potrzebujesz od vima.
Możesz przypisać go do polecenia, jeśli chcesz go często używać.


7
Mówiąc prościej:!grep -c "pattern" %
Iazel


1

Umieść kursor na słowie, które chcesz policzyć i wykonaj następujące czynności.

:%s/<c-r><c-w>//gn

Widzieć :h c_ctrl-r_ctrl-w


-1

vimgrep jest twoim przyjacielem tutaj:

vimgrep pattern %

Przedstawia:

(1 of 37)

7
To nie liczy wystąpień, ale liczy wiersze zawierające wzór. Więc jeśli wzorzec wystąpi dwa razy w linii, zostanie policzony tylko raz.
sotto
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.