2010-05-05 17 views
6

Estoy tratando de automatizar los encabezados de comentarios de archivos. Estoy atascado tratando de descubrir cómo insertar el resultado del comando uuidgen en mi encabezado usando el autocmd de vim.vim + C++: inserte un uuid en una cláusula de guardia

Dentro de la cabecera, el texto del marcador está presente, como este: Línea

#ifndef _UUID_ 
#define _UUID_ 

// Code goes here! 

#endif // _UUID_ 

El autocmd para poblar _UUID_ en .vimrc es:

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

El problema viene en menos de r! uuidgen ¿Cómo inserto el resultado de una ejecución de comando de shell como texto en la línea autocmd? O en un comando de sustitución vi para ese asunto?

Respuesta

5

uso del sistema(), y no se olvide de masticar el resultado ->matchstr(system('uuidgen'), "[^\n\r]*")

NB: Para las plantillas más complejas, se puede utilizar como soluciones mu-template. Por ejemplo, en c-header.template, habría tenido que cambiar el valor de s:guard a la llamada a matchtr() + system().

+0

funcionado, muchas gracias! Tendrá que verificar sus plantillas en algún momento. –

1

Mi línea autocmd resultante después de la sugerencia de Luc era, por el amor posteridad:

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

Un simple "% s/_UUID_" debería ser suficiente. Sin embargo, no estoy seguro del orden en el que se ejecutan varios autocomandos. Esa es una de las razones por las que siempre prefiero confiar en las funciones (o ftplugins o vimrcs locales) en lo que respecta a los autocomandos. –

+0

@Luc Hermitte - Mi vim-fu está mejorando. Gracias por los consejos. –

Cuestiones relacionadas