Sangría automática / código de formato para Vim?

35

Estoy tratando de usar Vim cada vez más cuando puedo. Uno de mis mayores vínculos entre Vim y un IDE como Aptana es la capacidad de sangrar automáticamente.

¿Hay algún medio de formateo automático de código (HTML, CSS, PHP) para que esté correctamente sangrado?

Si es así, ¿cómo instalas esto en vim? No entiendo mucho los complementos. Traté de revisar este hilo y me confundió más: ¿Cómo cambiar el comportamiento de sangrado automático de vim?

chrisjlee
fuente
¿Podría aclarar qué idioma está tratando de sangrar? Esperaría que si ya es compatible con vim, ya debería sangrarse automáticamente sin más esfuerzo. De lo contrario, debería poder obtener un complemento.
Edd Steel
idealmente Html / css y php
chrisjlee

Respuestas:

54

Para sangrar todo el archivo automáticamente:

gg
=G

Explicado:

  • gg - ir al comienzo del archivo
  • G - ir al final del archivo
  • =- sangría
tomashin
fuente
2
¿Podrías romperlo? ¿Qué es típicamente g por sí mismo? y = G?
chrisjlee
@Chris ver la edición
takeshin
1
Buena pista, nunca supe esto. Sin embargo, hace un trabajo de basura con bash.
Sparhawk
¿Cómo ejecutar gg=Gdesde shell sin abrir el archivo?
WM
@takeshin, ¿puede explicarlo mucho más? ¿Necesitamos escribirlo en el archivo o ejecutarlo en la terminal
Kasun Siyambalapitiya
14

No sé sobre el formato automático del código existente, pero si está escribiendo código y necesita una sangría automática:

  • :set autoindent(o :set ai) activará la sangría automática
  • Ctrl- dpara desangrar (saliente AKA) su código
  • Tabulación o espacios para sangrar: yo personalmente uso tabulación
  • :set tabwidth=4(o :set tw=4) controlará cuántos espacios debe sangrar un código en una pestaña
  • los >> comando sangrará la línea actual. Si lo prefieres con un número, di 4>>que sangrará 4 líneas, comenzando con la línea actual.
  • Del mismo modo, el <<comando desangrará una línea

Espero que esto te de un buen comienzo.

Hai Vu
fuente
77
Para sangrar automáticamente el código existente, úselo ={motion}en modo normal; por ejemplo =G, sangrará todo el código desde la línea actual hasta el final del archivo. ==sangrará la línea actual.
Edd Steel
1
también asegúrese de que se cargan los complementos de sangría (por ejemplo, con :filetype indent on)
jw013
2
set tw = 4 establece TEXTWIDTH en 4
Steffen Roller el
4

Sangría automática *.sh

Simplemente agregue las siguientes líneas en ~/.vimrc

filetype indent on
set smartindent
autocmd BufRead,BufWritePre *.sh normal gg=G
Rahul Patil
fuente
¿Esto se aplica solo a la edición con vim o todas las herramientas del editor?
WM
1
~./vimrcsolo aplicable para vim editor.
Rahul Patil
2

Este complemento facilita el formateo de su código. Integra formateadores externos y tiene un respaldo en la funcionalidad de sangría de vim.

https://github.com/Chiel92/vim-autoformat

Además, observe la diferencia entre formateo y sangría. La sangría solo corrige el espacio en blanco antes de cada línea, mientras que el formateo también se ocupa de cualquier otra cosa, como el espacio en blanco alrededor de los operadores, etc.

Chiel ten Brinke
fuente
2

Cree / edite el ~/.vimrcarchivo y agregue la siguiente línea:

set autoindent
Akshat Maheshwari
fuente
2
Esto no agrega nada a las respuestas existentes ...
jasonwryan
@jasonwryan En realidad, la respuesta de Hai Vu menciona :set autoindentque habilita la sangría automática solo para el archivo actual. Agregarlo en el .vimrcarchivo habilita la sangría automática de forma permanente.
Akshat Maheshwari
su comentario ya está mencionado en la respuesta de Rahul, así que piense antes de publicar
Indrajeet Gour
0

En bash hago esto:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3

Esto elimina los comentarios y reinventa el script "bash way". no funcionará si el script contiene HEREDOCS pero si hace esto:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3

funcionará con cualquier script pero todo el script estará sangrado por 4 espacios. ¡siéntase libre de modificar pero cite mi nombre en su script y publíquelo! :RE

Zibri
fuente
Creo que esto puede estar perdiendo el punto de la pregunta; en lugar de sangrar un conjunto de líneas, creo que el OP deseaba sangrar automáticamente dentro de VIM para una variedad de idiomas. Como comentario, puede lograr esto un poco más directamente sedsi lo desea: cat script_to_be_reindented.sh | sed 's#^# #g'(er, bueno, SO markdown está reemplazando los espacios con una pestaña, pero obtiene el punto)
eacousineau
0

El autoformato / sangría de vim funciona bastante bien. Primero, ponga esta línea en su ~/.vimrc:

filetype plugin indent on

Luego abra un archivo en vim y escriba gg=G

( ggmueve el cursor a la primera línea. =ejecuta el comando de sangría. Gle dice al comando de sangría que se ejecute desde aquí hasta la última línea).

Si el autoformato se ve realmente mal, como si cada línea se dejara con sangría, ejecute :scriptnamesy compruebe si .../indent/html.vim(o cualquier idioma que esté usando) está en la lista. De lo contrario, asegúrese de que ~/.vimrcsea ​​correcto. O si ejecutó :filetype plugin indent ondesde la línea de comando vim, deberá volver a abrir el archivo:e

Wisbucky
fuente