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.

Chris Jones
la source

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.

romainl
la source
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
Greg Bell
la source
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
1

Écrit le 30 octobre 2017

Je recommanderais d'installer le plugin vim-unimpaired

C'est également une grande référence sur les listes vim de manière plus générale.

Syntastic utilise la locationsliste. Commandes ci-dessous (les mappages marqués d'un astérisque proviennent du unimpaired.vimplugin mentionné ci-dessus).

entrez la description de l'image ici

arcseldon
la source
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 )

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

Je pense que la meilleure façon d'utiliser la liste des emplacements est d'utiliser la combinaison du plugin Denite + unite-location: https://github.com/chemzqm/unite-location

Arthur Sult
la source