Erreur de navigation dans l'emplacement dans Vim Syntastic


11

J'ai installé Syntastic dans Vim et il trouve parfaitement les erreurs (principalement dans le code Python sur lequel je travaille). Si je saute normalement dans le fichier, je vois les erreurs dans la barre d'état lorsque le curseur se trouve sur une ligne appropriée.

Ce que je ne peux pas comprendre, c'est comment naviguer directement entre les erreurs.

Je comprends que la syntaxe charge les erreurs dans une liste d'emplacements Vim et je peux les faire apparaître avec :lopen, basculer vers cette fenêtre, choisir une ligne et cliquer Enteret être redirigé vers la fenêtre principale sur la droite.

Ce que je voudrais faire cependant, c'est que la liste ne soit pas ouverte, il suffit de modifier le fichier avec des erreurs et d'appuyer sur un raccourci clavier pour passer à l'emplacement du prochain avertissement / erreur.

Est-ce possible? Les documents suggèrent cela :lNextet :lprevioussont pertinents, mais ils me comprennent E553: No more items.

Réponses:


12

:lne[xt]et :lp[revious]sont les bons raccourcis.

Mais ce :lN[ext]n'est pas la même chose :lne[xt]: c'est une alternative à :lp[revious].

Le message que vous obtenez est dû au fait que ces commandes ne se terminent pas lorsque vous atteignez la dernière ou la première erreur.

Les commandes que vous avez répertoriées dans votre question sautent toutes les deux à l'erreur précédente, mais il est probable que vous soyez déjà sur la première erreur et qu'il n'y a rien avant . utilisez les bonnes commandes, gardez à l'esprit qu'elles ne s'enroulent pas et vous serez bon.

Lisez la :h location-listliste complète des commandes.


Existe-t-il un moyen de les faire envelopper?
BallpointBen

Non, il n'y a aucun moyen de les envelopper. Il existe différentes solutions basées sur le wrapper dans ce fil et plus sous forme de plugins, cependant. Mon propre plugin vim-QF a ceux . L'implémentation est si vous ne voulez pas d'un plugin à part entière juste pour quelques mappages.
romainl

6

S'il n'y a qu'un seul problème dans la liste, vous :lly naviguerez.

Voici un correctif pour votre .vimrc qui rendra les clés mappées :lnextet :lprevfonctionnera correctement dans le cas d'un seul problème (en y sautant). Modifiez les nmappings à la fin à votre séquence de touches préférée.

(depuis 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

C'est moche s'il est exécuté avant que la liste des emplacements ne soit remplie pour la première fois, ou après un remplissage sans erreur. Voir ma réponse pour un correctif.
Tom Hale



0

Autoriser le bouclage du premier au dernier emplacement d'erreur (et vice versa):

" 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

Cela intercepte les erreurs suivantes:

E42: No Errors
E776: No location list

Et dit doucement: Location list empty

(Crédit à lcd074 )


En fait, il existe une solution moins répétitive mais cela pourrait être dû à `echo" Liste d'emplacements vide "`.
Tom Hale

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.