Câu trả lời:
Câu trả lời của Quincy là tốt, nhưng có một cách chính xác để làm điều này mà không cần chỉnh sửa bộ đệm:
:%s/pattern//ng
Điều này sẽ in một thông báo như thế 3 matches on 2 lines, và sẽ không có thay đổi nào được thực hiện đối với bộ đệm của bạn.
Các nlá cờ làm cho :substitutelệnh in số lượng các trận đấu thay vì thực hiện một thay thực tế; các glá cờ cho phép báo cáo của nhiều trận đấu trên mỗi dòng.
Một điều khác có thể hữu ích cho trường hợp sử dụng của bạn là in tất cả các dòng khớp với một mẫu:
:global/pattern/print
có thể rút ngắn thành:
:g/pattern
Đây là một trong những cách sử dụng đơn giản nhất của :globallệnh (có sức mạnh đáng kinh ngạc). Nó chỉ đơn giản là in ra tất cả các dòng khớp pattern, và sau đó (nếu có nhiều hơn một dòng) bạn nhấn Enterhoặc gõ một lệnh khác để làm cho nó biến mất.
Một chút chuyện nhỏ: Lệnh này là nguồn gốc của tên grep, vì nó thường được mô tả là g/re/p, trong đó reviết tắt của "biểu thức chính quy".
g/re/pthực sự là từ ed, không vi. Grep có trước vi vài năm.
nnoremap <leader>n :%s///gn<CR>bản đồ. Vì vậy, tôi nhấn <leader>nđể đếm sự xuất hiện của mẫu tìm kiếm trước đó. Tôi sử dụng điều này đáng ngạc nhiên thường xuyên.
:%s/pattern//nCác ncờ cuối cùng nói với :slệnh để báo cáo số lượng các trận đấu và không thực sự thay thế. Đọc :h :s_flagsđể biết thêm chi tiết.
gn?
gnếu bạn cảm thấy có thể có nhiều hơn một trận đấu trên mỗi dòng, điều này thường đúng. Đối với mục đích của câu hỏi tuy nhiên cờ nlà quan trọng hơn.
Đầu tiên sử dụng /để tìm kiếm một regex, sau đó
:%s///gn
Điều này giống như câu trả lời của Dhurva, ngoại trừ câu trả lời a.) Dễ sử dụng hơn (vì bạn có thể xem trước kết quả của regex của mình trước tiên) và b.) Kết hợp trên toàn cầu với gcờ để đếm tất cả các lần xuất hiện.
Nhờ PR này https://github.com/vim/vim/pull/4317 , mỗi lệnh tìm kiếm hiển thị số liệu thống kê tìm kiếm (như vị trí trận đấu hiện tại và số lượng trận đấu) trong vim 8.1.1270. Hãy chắc chắn để loại bỏ Skhỏi biến shortmess.
:%s/pattern//g
Bạn sẽ thấy số lượng thay thế trong thanh trạng thái. Đó là bao nhiêu lần patternxuất hiện. Sau đó chỉ cần nhấn uđể hoàn tác thay thế.
Một ánh xạ tôi đã thêm vào .vimrc của mình dựa trên các câu trả lời ở đây:
" count nr of occurrences of word under cursor
nnoremap <leader>c :%s/<c-r><c-w>//gn<cr>
" count nr of occurrences of visual selection
vnoremap <leader>c :<c-u>%s/<c-r>*//gn<cr>
Một chút giải thích, hy vọng sẽ hữu ích cho các vimmer mới hơn:
<c-r><c-w> chèn từ dưới con trỏ vào dòng lệnh, tiện dụng trong nhiều trường hợp.
Các <c-u>là cần thiết để loại bỏ các tự động chèn vào '<,'>
khi nhấn :trong chế độ hình ảnh và đi vào dòng lệnh. Thanh
*ghi chứa lựa chọn trực quan (cuối cùng), <c-r>*
chèn nội dung của thanh *ghi vào dòng lệnh (cũng có thể được sử dụng trong chế độ chèn).
:h count-items