Jak używasz funkcji quickfix w Vimie?

125

Jestem całkiem nowym użytkownikiem Vima i odkryłem, że jego krzywa uczenia się jest dość stroma (przynajmniej dla mnie). Właśnie zainstalowałem ten skrypt Vima do sprawdzania błędów JavaScriptLint, który pokazuje błędy w oknie quickfix vima po zapisaniu bufora.

Jednak nie wiem, co dalej. Jak „przewinąć” wszystkie błędy? Jak zamknąć „okno” quickfix? Jak sprawić, by sprawdzał błędy po wprowadzeniu zmian w kodzie?

Przeglądałem dokumentację vim quickfix, ale ilość poleceń jest przytłaczająca i nie mogę znaleźć tego, czego chcę. Każda pomoc będzie mile widziana.

Pytanie poboczne: czy istnieje sposób na sprawdzenie javascriptlint pod kątem błędów js dla kodu znajdującego się w pliku .html?

Dzięki!

hora
źródło

Odpowiedzi:

148

Jak powiedziałeś, istnieje wiele poleceń dla quickfix, ale zwykle używam tylko niewielkiej ich części:

:copen " Open the quickfix window
:ccl   " Close it
:cw    " Open it if there are "errors", close it otherwise (some people prefer this)
:cn    " Go to the next error in the window
:cp    " Go to the previous error in the window
:cnf   " Go to the first error in the next file
:.cc   " Go to error under cursor (if cursor is in quickfix window)

Zwykle używam tego z :makei :vimgrep, więc nie mogę komentować narzędzia do sprawdzania kłaczków Javascript, ale powinno to dać ci coś na początek.

Jeśli chodzi o ogólne użycie JavascriptLint, nie jestem programistą javascript, ale wygląda na to, że skrypt udostępnia funkcję o nazwie „JavascriptLint”, więc jeśli chcesz wywołać ją ręcznie, możesz użyć :call JavascriptLint(). Jednak działa na dyskowej kopii pliku, więc najpierw trzeba go zapisać. Jeśli (i tylko jeśli) wiersz poleceń jsldziała na plikach html, powinieneś być w stanie użyć :call JavascriptLint()pliku html, aby sprawdzić wewnętrzny skrypt javascript. Możesz też:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

aby to zautomatyzować. Jeśli jslnie obsługuje plików html, to (bez łatania aplikacji lub poproszenia autora o zmianę), prawdopodobnie jest to przegrana przyczyna ...

DrAl
źródło
Dzięki, te polecenia to dobry początek, będę musiał się trochę pobawić i przyzwyczaić do tego, jak to działa. Jeśli użyję: cn, aby przejść do błędu w oknie qf, czy mogę przejść do okna z moim kodem bez wychodzenia z okna qf? Czy może przeskoczyć do wiersza, w którym występuje błąd? Twoja sugestia użycia: call działa, jednak podąża za linkami <script src>, czego nie chcę.
hora
@hora: :cnnie powinno zamykać okna qf, ale przełączy się do okna zawierającego błąd: czy to jest to, co masz na myśli przez „skok”? Możesz szybko przełączyć się z powrotem za pomocą Ctrl-W plub :wincmd p, więc możesz zrobić :command! CN :cn | wincmd p<CR>lub coś takiego (niesprawdzone). Powinno to dać :CNpolecenie, które prowadzi do następnego błędu bez wychodzenia z okna quickfix. Alternatywnie możesz zrobić coś takiego :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(ponownie nieprzetestowane) i użyć Enter, aby wybrać błąd bez wychodzenia z okna quickfix.
DrAl
1
Dla początkującego „Możesz też zrobić:„ gdzieś tam ”, żeby to zautomatyzować” nie znaczy wiele. Oznacza to, że pokazany wiersz kodu musi być umieszczony w ~ / .vimrc (_VIMRC w systemie Windows AFAIK) i od następnego uruchomienia VIM-a za każdym razem, gdy plik jest zapisywany, polecenie to będzie wywoływane. Dobrze?
Беров
63

Najprostszym sposobem, aby poruszać się po liście quickfix (lub listę lokalizacji, dla tej sprawy) jest wtyczki .unimpaired

Gdy okno quickfix jest wypełniana, [qi ]qiść do przodu i do tyłu (odpowiednio) na liście quickfix. [Qi ]Qprzejdź do początku i końca (co jest szczególnie przydatne, jeśli masz tylko jedną pozycję na liście; to sprawia, że ​​Vim narzeka [qi ]q). Tak więc przepływ pracy wygląda następująco:

  1. Uruchom dowolną komendę wypełniającą listę quickfix
  2. Wpisz, [Qaby przejść do pierwszego elementu
  3. Przewiń kolejne pozycje (jeśli są) za pomocą [qi]q

Jeśli używasz Syntastic, otrzymasz listę lokalizacji zamiast listy quickfix. Nie ma problemu; Wystarczy użyć [L, ]L, [l, i ]lw ten sam sposób.

unimpairedma mnóstwo innych przydatnych odwzorowań też - [ei ]e„bańki” linie w górę iw dół, [<Space>i ]<Space>wstawić puste wiersze powyżej i poniżej, itd. Byłem zaskoczony, nikt nie wspomniał tu wcześniej; prawdopodobnie dlatego, że istniał dopiero w styczniu 2010 r., chociaż pytanie zadano w 2009 r.

Chip Hogg
źródło
27

Umieść następujące dwie linie w swoim pliku .vimrc:

map <C-j> :cn<CR>
map <C-k> :cp<CR>

Teraz możesz poruszać się po błędach za pomocą ctrl-j i ctrl-k, co naśladuje standardowe polecenia ruchu w dół i w górę j i k.

Amit Moscovich
źródło
1
<c-j>czasami (zależy od terminala ?!) jest błędne lub całkowicie nie działa, ponieważ oznacza to samo co <NL> // najłatwiejszy w użyciu, <c-n>a <c-p>zamiast tego // w przeciwnym razie: stackoverflow.com/questions/8304421/…
eli
Postanowiłem wykorzystać F8 i F9, tak: noremap <F7> :cprevious<CR>i noremap <F8> :cnext<CR>w.vimrc
Flimm
Używam już <C-j>i <C-k>do nawigowania między podziałami vima i panelami tmux za pomocą nawigatora vim tmux . Kombinacje <C-M-j>i <C-M-k>może być alternatywą.
Paul Rougieux
24

Możesz także użyć :cc 2(lub dowolnej innej liczby), aby przejść do, w tym przypadku, drugiego błędu w oknie quickfix. Nawigacja za pomocą :cn, :cc 4itd będzie umieścić kursor na danej linii.

Andy Stewart
źródło
8

Najlepszym sposobem integracji sprawdzania składni JavaScript jest użycie wtyczki Syntastic Vim , która używa listy lokalizacji Vima (która jest równoległa do quickfix ).

Napisałem odpowiedzi na to pytanie i to pytanie wyjaśniające, jak to zrobić, a także jak uzyskać przeglądanie kodu źródłowego / listę tagów dla Vima za pomocą społecznościowej jshint.com (co jest o wiele lepsze niż JSLint IMO) i Mozilla's DoctorJS (dawniej jsctags ).

Ory Band
źródło
8

Może ta opcja nie istniała, gdy pisano to pytanie (a może sam siebie zawstydzam, ponieważ jest coś w moim, .vimrcco sprawia, że ​​tak się dzieje), ale kiedy dostaję Quickfix List, po prostu nawiguję po nim jik następnie wciskam <CR>(tj. Klawisz Enter) aby przejść do tego miejsca w pliku.

Następnie, aby wrócić do Quickfix Listwpisywania Ctrl+W j „przesuń okno w dół” i wracam.

Wreszcie, kiedy skończę, po prostu piszę :q, tak jakbym chciał zamknąć każde normalne okno.

LondonRob
źródło
To właśnie chciałbym zrobić, ale otrzymuję komunikat „Nie można wprowadzać zmian, 'modyfikowalne' jest wyłączone”.
rtf
1
Prawdopodobnie nadpisałeś swój klawisz Enter. Miałem na przykład nmap <CR> o<Esc>, więc mogłem dodawać nowe linie w trybie normalnym.
Taavi Ilves
6

okno quickfix działa jak każde inne okno Vima: j w dół wiersza, k w górę wiersza,: cn, aby przejść do następnego błędu / ostrzeżenia, itp.

eksperyment!

po prostu ktoś
źródło
1
+1 za eksperymenty, tak prawie wszystkiego się nauczyłem.
hora
4

Oprócz świetnej odpowiedzi @DrAl na temat otwierania i zamykania szybkiego okna oraz nawigacji między wpisami, stworzyłem obraz pokazujący niektóre inne polecenia szybkiej naprawy.

Każda grupa 3 plików poniżej reprezentuje zestaw wyników quickfix, np. Z vimgrep. Cnever and colder to przeglądanie historycznych zestawów wyników. wprowadź opis obrazu tutaj

run_the_race
źródło