2010-11-02 21 views
0

Lorsque je travaille dans vim, mon répertoire de travail actuel (./) contient toutes mes sources. Je construis dans un objdir, appelons-le ./builddir/. Lorsque je construis à partir de vim, en utilisant makeprg=make\ -C\ builddir, les avertissements et les erreurs du compilateur ont tous un préfixe de ../, ce qui signifie que vim amène le curseur à un fichier qui n'existe pas.Séparer srcdir et objdir avec vim et gcc

Si j'essaie une tactique différente, lancer vim à partir de l'objdir, alors je ne peux pas faire des commandes comme gf ou :e myfile.h simplement.

Existe-t-il un terrain d'entente où tout cela fonctionnera, comme donner à vim un second répertoire à partir duquel il cherchera s'il ne trouve pas les fichiers dans le répertoire de travail actuel? Ou peut-être que gcc utilise un préfixe différent?

Répondre

1

La solution la plus simple serait de filtrer les sorties avec sed pour remplacer les chemins d'accès en sortie. (J'ai implémenté une chose très similaire pour convertir les noms de chemins cygwin en noms de chemins Windows pour la saveur win32 de vim).

Quelque chose comme:

:let &makeprg .= '2>&1 | sed "s#^\.\./##g"' 

(Il peut être \| et non |, je ne me souviens pas)

+0

Je ne peux pas faire ce travail tout. J'ai vérifié que ma ligne de commande fonctionne en dehors de vim, mais je ne peux pas faire le travail d'échappement, ne définissant pas makeprg directement, ni en utilisant l'instruction let que vous avez. –

+0

Ok, j'ai eu ce travail en faisant de la commande un script bash, et en l'appelant via makeprg. Un autre échec pour vim. –

+0

En fait, l'utilisation d'un script bash est une mauvaise idée - il tamponne trop l'entrée, ce qui n'est pas utile dans ce cas. Mais j'ai trouvé la syntaxe: 'let & makeprg. =" -C build_ \ 'hg qtop \' _DBG.OBJ 2> & 1 \\\ | sed 's, \\. \\ ./ ,, g' "' (et j'ai vérifié tous mes fuites - il apparaît correctement). –