Błąd nawigacji lokalizacji w Vim Syntastic

11

Mam Syntastic zainstalowany w Vimie i doskonale wykrywa błędy (głównie w kodzie Pythona, nad którym pracuję). Jeśli przeskakuję normalnie w pliku, widzę błędy na pasku stanu, gdy kursor znajduje się nad odpowiednią linią.

Nie mogę zrozumieć, jak nawigować bezpośrednio między błędami.

Rozumiem, że syntastic ładuje błędy do listy lokalizacji Vima i mogę sprawić, że się pojawią :lopen, przełącz się do tego okna, wybierz linię i wciśnij Enteri przejdź do głównego okna w prawej linii.

To, co chciałbym zrobić, to nie mieć otwartej listy, po prostu edytuj plik z błędami i naciśnij skrót klawiaturowy, aby przejść do dowolnego miejsca następnego ostrzeżenia / błędu.

Czy to jest możliwe? Dokumenty to sugerują :lNexti :lprevioussą istotne, ale dostają mnie E553: No more items.

Chris Jones
źródło

Odpowiedzi:

12

:lne[xt]i :lp[revious]są poprawnymi skrótami.

Ale :lN[ext]to nie to samo, co :lne[xt]: jest alternatywą dla :lp[revious].

Otrzymany komunikat wynika z faktu, że te polecenia nie zawijają się po osiągnięciu ostatniego lub pierwszego błędu.

Polecenia wymienione w pytaniu przeskakują do poprzedniego błędu, ale możliwe, że już jesteś przy pierwszym błędzie i nic wcześniej nie było . używaj właściwych poleceń, pamiętaj, że nie zawijają się, a będziesz dobry.

Przeczytaj :h location-listpełną listę poleceń.

romainl
źródło
Czy istnieje sposób, aby je owinąć?
BallpointBen
Nie, nie ma sposobu, aby je zawinąć. Istnieją jednak różne rozwiązania oparte na opakowaniach w tym wątku i inne w postaci wtyczek. Moja własna wtyczka vim-qf ma takie . Implementacja jest tutaj, jeśli nie chcesz pełnoprawnej wtyczki tylko dla kilku mapowań.
romainl
6

Jeśli na liście jest tylko jeden problem, :llprzejdź do niego.

Oto poprawka dla twojego .vimrc, która sprawi, że klucze zostaną zmapowane :lnexti będą :lprevdziałać poprawnie w przypadku tylko jednego problemu (przeskakując do niego). Zmień nmappings na końcu na preferowaną sekwencję klawiszy.

(od https://github.com/scrooloose/syntastic/issues/32 )

" Fix syntastic error jumping
function! <SID>LocationPrevious()
  try
    lprev
  catch /^Vim\%((\a\+)\)\=:E553/
    llast
  endtry
endfunction

function! <SID>LocationNext()
  try
    lnext
  catch /^Vim\%((\a\+)\)\=:E553/
    lfirst
  endtry
endfunction

nnoremap <silent> <Plug>LocationPrevious    :<C-u>exe 'call <SID>LocationPrevious()'<CR>
nnoremap <silent> <Plug>LocationNext        :<C-u>exe 'call <SID>LocationNext()'<CR>
nmap <silent> e[  <Plug>LocationPrevious
nmap <silent> e]  <Plug>LocationNext
Greg Bell
źródło
Jest to brzydkie, jeśli zostanie wykonane przed zapełnieniem listy lokalizacji lub po zapełnianiu bez błędów. Zobacz moją odpowiedź na poprawkę.
Tom Hale,
1

Napisane 30 października 2017 r

Polecam zainstalowanie wtyczki bez wad

Jest to również świetne odniesienie na listach vimów bardziej ogólnie.

Syntastic korzysta z locationslisty. Polecenia poniżej (mapowania oznaczone gwiazdką pochodzą z unimpaired.vimwyżej wymienionej wtyczki).

wprowadź opis zdjęcia tutaj

arcseldon
źródło
0

Zezwól na zawijanie od pierwszej do ostatniej lokalizacji błędu (i odwrotnie):

" Allow :lprev to work with empty location list, or at first location
function! <SID>LocationPrevious()
  try
    lprev
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

" Allow :lnext to work with empty location list, or at last location
function! <SID>LocationNext()
  try
    lnext
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

Wychwytuje to następujące błędy:

E42: No Errors
E776: No location list

I potulnie mówi: Location list empty

(Kredyt na lcd074 )

Tom Hale
źródło
W rzeczywistości istnieje mniej powtarzalne rozwiązanie, ale można by to zrobić z `echo" Pusta lista lokalizacji ".
Tom Hale,