:grep/ :vimgrepcả 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 :cnextvà :cprevious. Cá nhân tôi sử dụng unimpaired.vim cung cấp ]q& [qánh xạ cho :cnextvà :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/ :vimgrepnhư 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 vimrctệp của bạn để cung cấp :Cdo/ :Cfdocá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 grepkhông đủ tốt cho nhu cầu tìm kiếm của bạn. Bạn có thể thay đổi :grepchươ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 vimrctệp của mình theo hướng dẫn trong rgtrang man của:
set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m
Lưu ý: Có thể muốn sử dụng -Scờ, 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ờ :grepsẽ 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 :Ggreptrì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