:grep
/ :vimgrep
cả hai sử dụng danh sách quickfix để lưu trữ vị trí. Như bạn đã nhận thấy vim sẽ tự động chuyển sang lần xuất hiện đầu tiên (sử dụng !
để tránh hành vi này). Chỉ cần sử dụng :cnext
để đi đến vị trí tiếp theo trong danh sách quickfix.
Lệnh Quickfix
:cnext
/ :cprevious
để điều hướng quickfix tiến và lùi trong danh sách quickfix
:cfirst
/ :clast
để chuyển đến đầu và cuối danh sách quickfix
- Sử dụng
:copen
để mở cửa sổ quickfix. Sử dụng <cr>
để nhảy đến một mục
- Sử dụng
:cclose
để đóng cửa sổ quickfix
- Sử dụng
:cc
để hiển thị lỗi hiện tại.
:colder
/ :cnewer
để nhảy danh sách quickfix cũ hơn / mới hơn
Tôi muốn giới thiệu bạn tạo ánh xạ cho :cnext
và :cprevious
. Cá nhân tôi sử dụng unimpaired.vim cung cấp ]q
& [q
ánh xạ cho :cnext
và :cprevious
.
Nếu bạn muốn cửa sổ quickfix mở tự động, hãy đặt phần sau vào vimrc
:
augroup autoquickfix
autocmd!
autocmd QuickFixCmdPost [^l]* cwindow
autocmd QuickFixCmdPost l* lwindow
augroup END
Có một tập Vimcasts về chủ đề này: Tìm kiếm nhiều tệp với: vimgrep .
Tìm kiếm và thay thế trên toàn dự án
Nếu bạn đang sử dụng :grep
/ :vimgrep
như một cách để thực hiện tìm kiếm trên toàn dự án và thay thế thì tôi khuyên bạn nên sử dụng :cdo
/ :cfdo
(trong Vim 7.4.980+).
:grep 'foo'
:cfdo %s/foo/bar/g|w
Nếu phiên bản Vim của bạn không có :cdo
/ :cfdo
đặt các lệnh sau trong vimrc
tệp của bạn để cung cấp :Cdo
/ :Cfdo
các lệnh thay thế.
if !exists(':cdo')
command! -nargs=1 -complete=command Cdo try | sil cfirst |
\ while 1 | exec <q-args> | sil cn | endwhile |
\ catch /^Vim\%((\a\+)\)\=:E\%(553\|42\):/ |
\ endtry
command! -nargs=1 -complete=command Cfdo try | sil cfirst |
\ while 1 | exec <q-args> | sil cnf | endwhile |
\ catch /^Vim\%((\a\+)\)\=:E\%(553\|42\):/ |
\ endtry
endif
Sử dụng một chương trình thay thế cho :grep
Đôi khi grep
không đủ tốt cho nhu cầu tìm kiếm của bạn. Bạn có thể thay đổi :grep
chương trình của mình thông qua 'grepprg'
cài đặt (cũng có thể cần thay đổi 'grepformat'
). Cá nhân tôi sử dụng ripgrep bằng cách thêm phần sau vào vimrc
tệp của mình theo hướng dẫn trong rg
trang man của:
set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m
Lưu ý: Có thể muốn sử dụng -S
cờ, ví dụ: set grepprg=rg\ -S\ --vimgrep
để sử dụng tìm kiếm "trường hợp thông minh" (tìm kiếm không phân biệt chữ hoa chữ thường khi tất cả các chữ cái viết thường).
Bây giờ :grep
sẽ sử dụng rg
để tìm kiếm. ví dụ :grep foo -t js
.
Đây là một vài chương trình grep thay thế để xem xét: ack , ag , ripgrep và git grep
( Fugitive.vim cung cấp :Ggrep
trình bao bọc)
Để được trợ giúp thêm xem:
:h :grep
:h 'grepprg'
:h quickfix
:h :cnext
:h :copen
:h :ccl
:h :cc
:h :colder
:h :cdo
:h :cfdo