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!

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 ...


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.


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.


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.


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 ).


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.


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!


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.