Da, am renunțat la grep & the_silver_searcher (ag) pentru ripgrep.

Indiferent dacă sunteți forțat să utilizați VIM la locul de muncă sau sunteți un fan VIM nebun ca mine, care sunt obsedat de productivitate, căutarea cuvintelor cheie la nivel de proiect este o cerință de bază de care are nevoie orice dezvoltator în arsenalul editorului lor. Și ne așteptăm să se aprindă rapid. ⚡️

Folosesc VIM de aproximativ 3 ani acum. Și venind dintr-un Sublim de bază, necesitatea căutării la nivel de proiect a fost esențială.

ripgrep și Ack.vim au fost lucruri pe care le-am adoptat devreme după experiențele mele neîmplinite cu grep și the_silver_searcher (ag). Nu m-am uitat înapoi de atunci.

Acest articol este rezultatul experimentării cu diferite instrumente de căutare și îmbunătățiri incrementale pe care le-am făcut într-o perioadă de timp până când s-a simțit corect.

De ce ack.vim & ripgrep?

  1. Rapid: Am lucrat la proiecte Symfony și JavaScript cu mii de fișiere și este foarte rapid. Iată un scurt comparaţie cu alte instrumente de căutare.
    Punctul meu de referință pentru viteză este „nu ar trebui să se simtă niciodată lent”. Am observat o îmbunătățire extraordinară după ce m-am mutat de la grep, the_silver_searcher și ack.
  2. Navigare rapidă: ack.vim se ocupă de completarea listei Quickfix, care vă permite să vă deplasați în mod convenabil prin toate acele rezultate ale căutării în diferite fișiere.
  3. Valori implicite sensibile: ripgrep implicit consideră gitignore și omite automat fișierele / directoarele ascunse și fișierele binare.

Prezentare generală

ack.vim este un plugin VIM care acționează ca un wrapper pentru a căuta cuvinte cheie și a popula lista Quickfix pentru navigarea rezultatelor.

ripgrep (rg) este un instrument din linia de comandă care ack.vim va folosi intern pentru a efectua căutarea efectivă la nivel de proiect.

Pași

Pasul 1: Instalați ripgrep

Daca preferi homebrew ca și mine, rulați următoarele pentru a instala rg:

brew tap burntsushi/ripgrep https://github.com/BurntSushi/ripgrep.git
brew install burntsushi/ripgrep/ripgrep-bin

Iată un script automat pe care o folosesc ca parte a mea dotfiles.

Dacă preferați orice alt mod de instalare, consultați oficialul ripgrep instalare secțiune.

Pasul 2: Instalați ack.vim

Pentru a instala ack.vim folosind vim-plug manager de pachete, adăugați următoarele în vimrc:

Plug 'mileszs/ack.vim'

sau consultați ack.vim’s instalare secțiune.

Pasul 3: Configurați ack.vim pentru a utiliza rg

Adăugați următoarea configurație în vimrc:

" ack.vim --- {{{

" Use ripgrep for searching ⚡️
" Options include:
" --vimgrep -> Needed to parse the rg response properly for ack.vim
" --type-not sql -> Avoid huge sql file dumps as it slows down the search
" --smart-case -> Search case insensitive if all lowercase pattern, Search case sensitively otherwise
let g:ackprg = 'rg --vimgrep --type-not sql --smart-case'

" Auto close the Quickfix list after pressing '<enter>' on a list item
let g:ack_autoclose = 1

" Any empty ack search will search for the work the cursor is on
let g:ack_use_cword_for_empty_search = 1

" Don't jump to first match
cnoreabbrev Ack Ack!

" Maps <leader>/ so we're ready to type the search keyword
nnoremap <Leader>/ :Ack!<Space>
" }}}

" Navigate quickfix list with ease
nnoremap <silent> [q :cprevious<CR>
nnoremap <silent> ]q :cnext<CR>

Notă: let g:ackprg definește comanda pe care ack.vim o va executa intern.
Rețineți, de asemenea, că folosim rg aici cu câteva opțiuni. Uită-te la man rg pentru a modifica opțiunile care pot satisface cerințele dvs.

Pentru a explora opțiunile pentru ack.vim, consultați următoarele documentație.

Utilizare

Acum, că suntem gata, iată cele mai frecvente cazuri de utilizare:

Căutați un cuvânt sub cursor

Apăsați / urmat de enter.
De când am stabilit let g:ack_use_cword_for_empty_search = 1, Ack revine la cuvântul curent sub cursorul pentru căutare, deci nu este nevoie să tastați acel cuvânt.

Apăsați / urmat de cuvânt (fără ghilimele) și introduceți.
Întrucât folosim majuscule și minuscule cu ripgrep, aceasta va face o căutare nesensibilă la majuscule, dacă cuvântul este cu minuscule, iar o căutare sensibilă la majuscule.

Cum am facut cautarea la nivel de proiect a VIM
căutare de cuvinte cu ack.vim

Apăsați / urmat de un model regex între ghilimele și introduceți.

1612001945 803 Cum am facut cautarea la nivel de proiect a VIM
căutare regex cu ack.vim

Ack.vim completează rezultatele din lista Quickfix, care se deschide ca o fereastră de jos separată. Există mai multe moduri de a naviga în lista de rezultate:

  • Puteți naviga prin lista de corecții rapide folosind j/k și apăsați enter pentru a închide lista de corecții rapide. VIM vă va duce la locația exactă a cuvântului găsit.
  • De asemenea, puteți utiliza tastele rapide ]q sau [q. VIM va muta cursorul la rezultatul următor / anterior și va deschide fișierul într-un tampon nou, dacă este necesar.
    Pentru a închide lista de corecții rapide după ce ați terminat, puteți merge fie în fereastra de jos a corecției rapide, cât și închide-o sau pur și simplu rulați :cclose
  • Pentru a deschide lista de corecții rapide, executați :copen

Notă de închidere

Și iată, o căutare și o navigare fără probleme pentru următoarea dvs. căutare de cuvinte cheie la nivel de proiect!

Dacă sunteți blocat oriunde, căutați documentele / problemele ack.vim și ripgrep respective în depozitele respective sau trimiteți-mi un mesaj. Distribuiți configurația cu care vă mândriți, astfel încât să îi poată ajuta pe alții să-i îmbunătățească.

Iată-le pe ale mele dotfiles.