2010-05-05 7 views
6

Je suis en train d'automatiser les en-têtes de commentaire de fichier. Je suis coincé en essayant de comprendre comment insérer le résultat de la commande uuidgen dans mon en-tête en utilisant vm's autocmd.vim + C++: insérer un UUID dans une clause de garde

l'intérieur de l'en-tête, le texte de l'espace réservé est présent, comme celui-ci:

#ifndef _UUID_ 
#define _UUID_ 

// Code goes here! 

#endif // _UUID_ 

La ligne de autocmd pour remplir _UUID_ en Vimrc est:

autocmd bufnewfile *.h exe "1,$s/_UUID_/" . r!uuidgen ."/g" 

Le problème vient en moins r! uuidgen. Comment puis-je insérer le résultat d'une exécution shell-commande en tant que texte dans la ligne autocmd? Ou dans une commande de substitution vi d'ailleurs?

Répondre

5

système d'utilisation(), et ne pas oublier de tronquer le résultat ->matchstr(system('uuidgen'), "[^\n\r]*")

NB: Pour les modèles plus complexes, vous pouvez utiliser des solutions comme mu-template. Par exemple, dans c-header.template, vous auriez dû changer la valeur de s:guard à l'appel de matchtr() + system().

+0

, Travaillé un grand merci! Devra vérifier vos modèles parfois. –

1

Ma ligne de autocmd résultant après la suggestion de Luc était, pour l'amour de la postérité:

autocmd bufnewfile *.h exe "1,$g/_UUID_/s/_UUID_/" . matchstr(system('uuidgen'), "[^\n\r]*") 
+0

Un simple "% s/_UUID_" devrait suffire. Cependant, je ne suis pas sûr de l'ordre dans lequel plusieurs autocommandes sont exécutées. C'est l'une des raisons pour lesquelles je préfère toujours me fier aux fonctions (ou ftplugins, ou vimrcs locales) où les autocommandes sont concernées. –

+0

@Luc Hermitte - Mon vim-fu s'améliore. Merci pour les conseils. –