2010-09-14 4 views
5

J'essaie de faire fonctionner makeprg et errorformat avec VIM et jslint, et n'arrive pas à obtenir le format d'erreur correct pour la vie de moi ... J'utilise la version nodejs de jslint qui produit des résultats comme:Vim errorformat et jslint

1 116,9: The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype. 
    for (var k in o) 

Je veux essentiellement de faire correspondre le numéro de la ligne et la colonne et l'erreur et utiliser le fichier en cours pour le nom du fichier. Quelqu'un sait-il comment faire ça? Pour être clair, je cherche l'errorformat pour que cette commande fonctionne. Actuellement, mon fichier .vimrc a

augroup js 
    set makeprg=jslint\ % 
    set errorformat=%E%>%l,%c:%m,%Z 
augroup END 

qui ne fonctionne tout simplement (le JSLint fonctionne très bien, mais le errorformat est faux) ...

Répondre

2

je fait juste coincé dans mon JSLint makeprg plus tôt aujourd'hui, et naturellement je avais besoin d'un soutien quickfix.

J'ai créé une branche de node-jslint qui génère les erreurs de JSLint dans un format de type GCC. Le efm est: %f:%l:%c:%m. Si vous pouvez utiliser node.js, je recommande d'utiliser node-jslint (surtout si vous travaillez sur un projet node.js/CommonJS). Comme pour votre problème d'origine: Je ne pense pas que %> est nécessaire. Si la suppression de cela ne fonctionne pas, essayez simplement ce qui suit:

set efm=%l,%c: %m 
+0

Je ne pouvais pas le format d'erreur au travail, mais je suis passé à la fourche de JSLint (plutôt que reid) et cela fonctionne parfaitement ... Merci –

1

Je ne suis pas sûr à 100% sur cette version. J'en ai utilisé un que j'ai téléchargé et j'ai juste changé la source de jslint.js pour la sortir juste pour moi. Ma ligne ressemble à quelque chose.

var i=0;i<JSLINT.errors.length;i+=1){var e=JSLINT.errors[i];if(e){print(a[0]+':'+e.line+':'+e.reason); 

Espérons que cela vous aidera à obtenir un format de travail.

0

Je ne l'ai jamais utilisé cette option avant, mais les exemples dans l'aide semblent indiquer qu'il devrait y avoir un %m supplémentaire à la fin de votre modèle, ou peut-être vous avez juste besoin d'échapper à la virgule:

set errorformat=%E%>%l\\,%c:%m,%Z%m 

Mise à jour: En fait, il semble y avoir deux nombres dans votre chaîne d'erreur, 1 suivi d'un espace, puis . Peut-être que cela fonctionnerait:

set errorformat=%E%>%n\\ %l\\,%c:%m,%Z%m 
+0

Nope, ne fonctionnait pas ... –

+0

encore pas de chance ... –

8

Un vieux fil, mais pour tous ceux qui viennent à travers elle, comme moi:

Pour la version actuelle du nœud JSLint installé par NPM (v0.1.2), la sortie d'erreur se présente comme suit:

filename.js 
#1 Missing 'use strict' statement. 
    y = x // Line 2, Pos 3 
#2 Expected 'y' at column 5, not column 3. 
    y = x // Line 2, Pos 3 

J'utilise la EFM suivante pour analyser les erreurs:

autocmd FileType javascript set efm=%-P%f, 
        \%E%>\ #%n\ %m,%Z%.%#Line\ %l\\,\ Pos\ %c, 
        \%-G%f\ is\ OK.,%-Q 
+0

Merci. J'ai lutté avec ça pendant des jours! – Telemachus

+0

Cet efm a également fonctionné pour la v0.1.4 –

+0

Fonctionne bien! Comment diable avez-vous trouvé cela? Je suis deuxième Télémaque! – bluekeys

6

Un très vieux fil, mais ceci est un suivi de @dule's excellent answer. Il est vraiment juste un coup sec, mais il peut être utile à d'autres aussi (m'a fallu un certain temps avec TFM pour travailler dehors, alors pourquoi ne pas partager?):

setlocal makeprg=jslint\ % 
setlocal errorformat=%-P%f, 
        \%A%>%\\s%\\?#%*\\d\ %m,%Z%.%#Line\ %l\\,\ Pos\ %c, 
        \%-G%f\ is\ OK.,%-Q 

Il y a deux différences, aussi bien dans la troisième ligne .Premièrement, je remplace la correspondance codée en dur initiale d'un seul espace par un motif qui correspond à zéro ou à un espace (c'est-à-dire rend l'espace facultatif). Je devais le faire, en raison de la sortie suivante de jslint:

... First 8 errors trimmed 
#9 Expected '$' at column 9, not column 7. 
    $('img#placeholder').attr('src', pic); // Line 15, Pos 7 
#10 Expected '$' at column 9, not column 7. 
    $('img#placeholder').attr('alt', desc) // Line 16, Pos 7 

Regardez de très près, et vous le verrez. Pour les erreurs 1-9, il y a un espace au début de la ligne. Pour 10 ... n, pas d'espace. Une petite chose, mais cela signifie que la fenêtre quickfix ne fonctionne pas correctement pour les erreurs 10 et plus. Pouah. (Btw, j'ai considéré la réponse "Ne pas faire plus de 9 erreurs dans un fichier JS donné, mais cela semblait un peu trop" queue remuant le chien. "Aussi, maintenant je sais plus que je l'ai fait il y a quelques heures à propos de scanf.)

la deuxième différence est que je l'ai remplacé %E avec %A et le matcher %n avec un motif d'ignorer ce nombre. Ceci est essentiellement pour des raisons esthétiques. le faire @ la façon de Dule, vous obtenez cette sortie dans la fenêtre quickfix : - Je sais que %A donc, en utilisant, yo

showPic.js|5 col 7 error 1| Expected 'event' at column 9, not column 7. 
showPic.js|9 col 7 error 2| Expected 'var' at column 9, not column 7. 

que je fais, et je ne ont pas besoin le rappel qu'ils sont toutes les erreurs veulent pas le nombre d'erreurs là-bas. u obtenir cette simple sortie:

showPic.js|5 col 7| Expected 'event' at column 9, not column 7. 
showPic.js|9 col 7| Expected 'var' at column 9, not column 7. 
+0

Je voyais le même problème (avec des erreurs> la ligne 9 n'est pas formatée correctement) et cette réponse l'a corrigé! Cela devrait être la réponse acceptée. – rowanu