Đếm số lần xuất hiện trong Vim mà không đánh dấu bộ đệm đã thay đổi


111

Để biết có bao nhiêu lần một mẫu tồn tại trong bộ đệm hiện tại, tôi thực hiện:

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

Nó cung cấp số lần xuất hiện của mẫu, nhưng rõ ràng là cồng kềnh và cũng có tác dụng phụ là đặt trạng thái 'đã thay đổi'.

Có cách nào thanh lịch hơn để đếm không?

Câu trả lời:


166

Để tránh thay thế, hãy để trống mẫu thứ hai và thêm cờ “n”:

:%s/pattern-here//gn

Đây được mô tả như một mẹo chính thức .


8
thậm chí nhiều hơn rườm rà, nhưng ít nhất nó bây giờ là chính thức rằng không có cách nào thanh lịch ...
Paul Oyster

53
Nếu bạn đã thực hiện tìm kiếm bằng cách sử dụng /, nó chỉ trở thành:% s /// gn
Peter Gibson

Vì vậy, chỉ cần thêm nó vào .vimrc của bạn
JESii

3
Tôi thấy ánh xạ sau khá hữu ích: nnoremap <leader>n :%s///gn <CR>để đếm số lần xuất hiện của tìm kiếm cuối cùng
Ikar Pohorský

1
Không có cách nào để biến số đếm này thành một biến đúng không? Đó là những gì tôi cần ...
Steven Lu

8
:help count-items

Trong VIM 6.3, đây là cách bạn thực hiện.

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

Trong VIM 7.2, đây là cách bạn thực hiện:

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

Tôi có một tệp lớn và làm theo cách này nhanh hơn nhiều so với grep.
Jai Prakash

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

Nó không chính xác là lệnh vim, nhưng nó sẽ cung cấp cho bạn những gì bạn cần từ vim.
Bạn có thể ánh xạ nó thành lệnh nếu bạn cần sử dụng nó thường xuyên.


7
Đơn giản hơn:!grep -c "pattern" %
Iazel

2

Vimscript IndexedSearch tăng cường các lệnh tìm kiếm Vim để hiển thị "Tại trận đấu #N trong số M kết quả phù hợp".


1

Đặt con trỏ vào từ bạn muốn đếm và thực hiện như sau.

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

Xem :h c_ctrl-r_ctrl-w


-1

vimgrep là bạn của bạn ở đây:

vimgrep pattern %

Trình diễn:

(1 of 37)

7
Điều này không tính số lần xuất hiện, nhưng đếm các dòng có chứa mẫu. Vì vậy, nếu ô hình mẫu hai lần trên một dòng, nó sẽ chỉ được tính một lần.
sotto
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.