10 votes

Format d'erreur Vim

J'ai lu la documentation, mais je suis devenu encore plus confus.
J'ai l'erreur suivante générée par le compilateur :

          rot;
          ^
"cpp\c1.cpp", line 13: error(114): identifier
          "rot" is undefined

1 error detected in the compilation of "c1.cpp".

Je sais comment détecter la ligne où la ligne d'erreur est donnée, mais j'obtiens des tas d'informations supplémentaires inutiles dans ma liste d'erreurs, et le message d'erreur est divisé en deux lignes, ce que je préférerais fusionner.

Mon format d'erreur de départ est le suivant :

:set efm=\"%f\"\\,\ line\ %l:\ error(%n):\ %m

Puisque nous y sommes, existe-t-il un moyen rapide de tester l'efm sans avoir recours au run make en permanence ?

28voto

DrAl Points 29528

Tout d'abord, je parle du débogage. Malheureusement, il n'y a pas de moyen particulièrement facile de le faire, mais une possibilité utile est d'exécuter make et de recracher la sortie dans un fichier, puis.. :

:let &makeprg="cat ~/outputfile.log"
:make

En ce qui concerne la création du format d'erreur, il faut faire quelques essais et erreurs. Vous pouvez utiliser %A, %C et %Z pour les messages multilignes et vous pouvez utiliser %-G pour ignorer des choses. L'ordre est très important et notez que parfois le %C ou même le %Z viennent avant le %A ! Dans votre cas, vous pouvez peut-être arriver à quelque chose avec l'efm ci-dessous. J'ai tendance à utiliser let &efm = et let &efm .= plutôt qu'un ensemble, car vous n'avez pas besoin d'échapper à chaque espace ou guillemet et vous pouvez l'augmenter progressivement. C'est aussi beaucoup plus lisible.

" Start of the multi-line error message (%A),
" %p^ means a string of spaces and then a ^ to
" get the column number
let &efm  = '%A%p^' . ','
" Next is the main bit: continuation of the error line (%C)
" followed by the filename in quotes, a comma (\,)
" then the rest of the details
let &efm .= '%C"%f"\, line %l: error(%n): %m' . ','
" Next is the last line of the error message, any number
" of spaces (' %#': equivalent to ' *') followed by a bit
" more error message
let &efm .= '%Z %#%m' . ','
" This just ignores any other lines (must be last!)
let &efm .= '%-G%.%#'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X