2011-01-03 24 views
7

Estoy tratando de hacer que AStyle trabaje con Vim para que pueda usar la tecla "=" para volver a aplicar sangría a varias secciones de código. Por ejemplo, me gustaría poder escribir mi =iB habitual para sangrar el bloque actual de código utilizando AStyle en lugar del indentador incorporado.Usando AStyle en Vim

Intenté simplemente configurar equalprg = astyle en mi vimrc, pero el problema es que astyle solo recibe el bloque seleccionado pero cree que está recibiendo un archivo completo. Por lo tanto, la sangría está completamente desactivada cuando intento solo sangrar una clase anidada.

Sé que siempre puedo volver a formatear un archivo completo a la vez, pero ¿hay alguna manera de usar astyle en vim que reproduce completamente el comportamiento de formato original de vim (todos mis = funcionan comandos de movimiento y puntos de bonificación para autoindentificación usando Astyle también!)?

+1

Probablemente deberías usar ''formatprg'' en lugar de'' equalprg'', y 'gq' en lugar de' = '. Esto me parece más apropiado. Sin embargo, esto no resolverá tu problema. – Benoit

Respuesta

3

A menos que exista una versión de AStyle que tenga una opción de formato de archivo parcial, deberá aplicar la sangría extra después de ejecutar AStyle.

No estoy seguro de cómo se puede hacer esto con los movimientos.

Con selección visual, se pudiera tomar la sangría de la primera línea, pase el código para equalprg, y luego añadir que la sangría a todas las líneas:

vnoremap = <Esc>`<dwgv=`<<C-v>`>I<C-r>"<Esc> 

lo descomponen:

vnoremap -- so we can use = for equalprg 
<Esc>`< -- stop selecting and go to beginning of line at beginning of selection 
dw -- grab the initial indentation 
gv= -- reselect and indent as normal 
`<<C-v>`> -- block select the selection 
I<C-r>"<Esc> -- insert the initial indentation 

¿Quizás puedas hacer algo similar con los movimientos?

0

Solo funciona para formateadores que tienen una opción de formato de archivo parcial, como ya se ha indicado idbrii. Un ejemplo de un formateador que hace esto es clang-format.

Una forma de integrar esto en vim es usando vim-autoformat. Con este complemento puede viB y luego presionar su clave de formato autodefinida, como <F3>. Esto solo formateará el bloque de código interno seleccionado.