버퍼를 변경하지 않고 Vim에서 발생 횟수 계산


111

현재 버퍼에 패턴이 몇 번이나 존재하는지 알기 위해 다음을 수행합니다.

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

패턴의 발생 횟수를 제공하지만 분명히 번거롭고 '변경됨'상태를 설정하는 부작용도 있습니다.

더 우아한 계산 방법이 있습니까?

답변:


166

대체를 방지하려면 두 번째 패턴을 비워두고 "n"플래그를 추가합니다.

:%s/pattern-here//gn

이것은 공식적인 팁으로 설명됩니다 .


8
더 번거롭지 만 우아한 방법이 없다는 것은 적어도 공식적입니다 ...
Paul Oyster

53
/를 사용하여 이미 검색을 수행 한 경우 다음과 같이됩니다. % s /// gn
Peter Gibson

그러니 당신의 .vimrc에 추가
JESii

3
나는 매우 유용한 다음 매핑을 발견 : nnoremap <leader>n :%s///gn <CR>마지막 검색의 발생 계산
IKAR Pohorský

1
이 카운트를 변수에 넣을 수있는 방법이 없죠? 그건 ... 내가 원하는 무엇
스티븐 루

8
:help count-items

VIM 6.3에서 수행하는 방법은 다음과 같습니다.

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

VIM 7.2에서 수행하는 방법은 다음과 같습니다.

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

나는 큰 파일을 가지고 있었고이 접근 방식을 따르는 것이 grep보다 훨씬 빠릅니다.
자이 프라 카시

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

정확히 vim 명령은 아니지만 vim에서 필요한 것을 제공합니다.
자주 사용해야하는 경우 명령에 매핑 할 수 있습니다.


7
더 간단하게:!grep -c "pattern" %
Iazel

2

vimscript IndexedSearch 는 "M 개 일치 중 #N 일치"를 표시하도록 Vim 검색 명령을 향상시킵니다.


1

세고 싶은 단어에 커서를 놓고 다음을 실행합니다.

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

보다 :h c_ctrl-r_ctrl-w


-1

vimgrep은 여기에서 당신의 친구입니다 :

vimgrep pattern %

쇼 :

(1 of 37)

7
이것은 발생 횟수를 계산하지 않지만 패턴을 포함하는 행을 계산합니다. 따라서 패턴이 한 줄에 두 번 발생하면 한 번만 계산됩니다.
sotto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.