Câu trả lời:
Như tài liệu nói:
Vim has two ways to find matches for a pattern: Internal and external.
Tóm lại, :vimgrep
sử dụng cơ chế grep của Vim để đọc và tìm trong tệp. :grep
sử dụng một lệnh bên ngoài để đạt được cùng một công việc.
Các /
tìm kiếm là cho bộ đệm hiện tại mà thôi, trong khi :[vim]grep
tìm kiếm thông qua một mô hình các tập tin, cho phép bạn tìm kiếm trong toàn bộ một dự án cùng một lúc.
Có một cái nhìn :h grep
để biết thêm thông tin.
Một lợi ích của :[vim]grep
việc /?
này là các kết quả được đưa vào danh sách quickfix (hoặc danh sách vị trí nếu bạn sử dụng :l[vim]grep
), điều này có nghĩa là bạn có thể lấy danh sách tất cả các kết quả khớp bằng cách sử dụng :cl
. Sau đó, bạn có thể sử dụng một số để đi thẳng đến kết quả bạn muốn từ danh sách.
Điều đó cũng có nghĩa là bạn có thể sử dụng cùng một lệnh để tìm kiếm bộ đệm hiện tại :[vim]grep pattern %
như tìm kiếm toàn bộ cơ sở mã của bạn :[vim]grep pattern path
để có một số đối xứng đẹp với nó.
Hơn nữa, sau đó bạn có thể phân nhánh và sử dụng Silver Surfer / Ripgrep để cung cấp cho bạn tìm kiếm rất mạnh mẽ. Đây có thể được ánh xạ đến :[vim]grep
lệnh.
Có 3 ưu điểm chính tôi thấy
Sử dụng một regex
công cụ / cú pháp nhất quán : Sử dụng :grep/vimgrep
cho phép bạn xác định một grepprg
, có thể được xác định, grep/ack/ag
v.v ... Sử dụng công cụ này bạn có thể tìm kiếm bộ đệm hiện tại hoặc nhiều bộ đệm / tệp, sử dụng một regex
công cụ nhất quán . Mặt khác, nếu bạn sử dụng tùy chọn vim/pattern
, bạn sẽ bị kẹt trên công cụ regex mặc định của vim, có cú pháp khác so với extended regular expression
cú pháp. Vì vậy, bất cứ khi nào bạn phải tìm kiếm một biểu thức, bạn sẽ phải suy nghĩ / ghi nhớ xem bạn nên sử dụng \)
hay chỉ )
và những khác biệt khác. Điều này có thể rất khó chịu ( /programming/3864467/whats-the-difference-b between-vim-regex-and-n normal-regex )
vimgrep điền vào danh sách quickfix / location : bằng cách sử dụng :grep/vimgrep
cho phép bạn điền vào danh sách tìm kiếm. ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).
Nếu bạn muốn sử dụng danh sách vị trí, bạn có thể sử dụng ]q
phím tắt để điều hướng nó nếu bạn có plugin không nhìn thấy Tim-Popes ( https://github.com/tpope/vim-unimpaired )
tìm kiếm phức tạp trong khi trong vim : thông thường nếu bạn phải thực hiện các tìm kiếm phức tạp, bạn có thể phải sử dụng dòng lệnh. Tuy nhiên, nếu bạn xác định greprg
đúng và sử dụng một lệnh như [1]
: vim / mẫu1 / find . -type f
Bạn có thể thực hiện các tìm kiếm rất phức tạp và hiển thị kết quả tìm kiếm trong location list
hoặc quickfix list
.
[1] http://vimcasts.org/episodes/search-mult Môn-files-with-vimgrep /