2012-03-20 9 views
6

Deseo integrar el formateador de código fuente Uncrustify con Vim. Cualquiera de las dos opciones siguientes será suficiente.Vim autocmd (guardar archivo, ejecutar el formateador de código, volver a cargar el archivo)

  1. Formatee el código que estoy editando actualmente (es decir, cuando se presiona gq).
  2. Formatee el código cuando guarde el archivo y luego vuelva a cargar el archivo formateado en la ventana actual de Vim.

Opción 1 es preferible. Intenté

set formatprg=uncrustify\ -c ~/misc/uncrustify.cfg --no-backup 

i.e. Llamo Uncrustify con opciones de línea de comando. Esto no funciona. Vi da el error E518: Unknown option: ~/misc/uncrustify.cfg.

Para la opción 2, He intentado lo siguiente en el archivo vimrc

autocmd bufwritepost *.cpp ! ~/bin/uncrustify -c ~/misc/uncrustify.cfg --no-backup <afile> 

El archivo tiene el formato después de que el salvar, pero tengo que recargar manualmente el archivo en Vim.

Respuesta

4

Ha intentado espacios en blanco que escapan:

:set formatprg=uncrustify\ -c\ ~/misc/uncrustify.cfg\ --no-backup

ACTUALIZACIÓN

uncrustify impresiones "de análisis: 170 bytes ..." Mensaje a stderr lo que necesitamos para redirigirlo a /dev/null:

:set formatprg=uncrustify\ -c\ ~/misc/uncrustify.cfg\ -l\ CPP\ --no-backup\ 2>/dev/null

gq opera en líneas, por lo que puede seleccionar las líneas necesarias en modo visual y ejecutar gq. Por ejemplo, si quiere reformatear todo el archivo, ejecute ggVGgq.

Más información en :help gq

+0

Eso elimina el error VI. También tuve que agregar la opción -l para especificar el idioma como CPP, ya que la entrada a uncrustify es de stdin. Sin embargo, presionar gq en vi no formatea el archivo. Si lo presiono de nuevo, entonces la única línea actual se formatea y la siguiente línea se agrega al archivo que se está editando: "Análisis: 57 bytes (57 caracteres) desde stdin como idioma CPP". Creo que lo que me falta es cómo configurar el comando formatprg para leer todo el archivo y, en segundo lugar, evitar el resultado de la línea anterior al archivo que se está editando. – user1280213

+0

@ user1280213 He actualizado la respuesta, espero que ayude – galymzhan

+0

Gracias. Eso ayudó. – user1280213

Cuestiones relacionadas