2010-05-05 12 views
6

Sto tentando di automatizzare le intestazioni dei commenti dei file. Sono bloccato cercando di capire come inserire il risultato del comando uuidgen nella mia intestazione usando autocmd di vim.vim + C++: inserire un uuid in una clausola di protezione

All'interno l'intestazione, il testo segnaposto è presente, in questo modo: la linea

#ifndef _UUID_ 
#define _UUID_ 

// Code goes here! 

#endif // _UUID_ 

L'autocmd di popolare _UUID_ in Vimrc è:

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

Il problema sta arrivando in meno di r! uuidgen. Come posso inserire il risultato di un'esecuzione di comando shell come testo nella riga autocmd? O in un comando di sostituzione vi per quella materia?

risposta

5

Usa system(), e non dimenticate di chomp il risultato ->matchstr(system('uuidgen'), "[^\n\r]*")

NB: Per i modelli più complessi, è possibile utilizzare le soluzioni come mu-template. Ad esempio, in c-header.template, avresti dovuto modificare il valore di s:guard nella chiamata a matchtr() + system().

+0

funzionato, molte grazie! Dovrà controllare i tuoi modelli qualche volta. –

1

mio conseguente linea autocmd dopo il suggerimento di Luc era, per l'amor posteri:

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

Un semplice "% s/_UUID_" dovrebbe essere sufficiente. Tuttavia, non sono sicuro dell'ordine in cui vengono eseguiti più autocommands. Questo è uno dei motivi per cui preferisco sempre fare affidamento su funzioni (o ftplugin o vimrcs locali) in cui sono interessati gli autocomandi. –

+0

@Luc Hermitte - Il mio vim-fu sta migliorando. Grazie per i suggerimenti. –