Estoy tratando de usar Vim cada vez más cuando puedo. Uno de mis mayores agarres entre Vim y un IDE como Aptana es la capacidad de sangría automática .
¿Existe algún medio de formateo automático del código (HTML, CSS, PHP) para que tenga la sangría adecuada?
Si es así, ¿cómo se instala esto en vim? entiendo mucho los complementos. Intenté revisar este hilo y me confundió más: ¿Cómo cambiar el comportamiento de sangría automática de vim?
Comentarios
- ¿Podría aclarar qué idioma está tratando de sangrar? Esperaría que si ‘ es compatible con vim, ya debería aplicar sangría automática sin más esfuerzo. Si no es así, debería poder obtener un complemento.
- idealmente Html / css y php
Respuesta
Para sangrar todo el archivo automáticamente:
gg =G
Explicado:
-
gg
– ir al principio del archivo -
G
– ir al final del archivo -
=
– sangría
Comentarios
- ¿Podría desglosarlo? ¿Qué es g típicamente por sí solo? y = G?
- @Chris ver la edición
- Buena pista, nunca supe esto. Sin embargo, hace un trabajo basura con bash.
- ¿Cómo ejecutar
gg=G
desde el shell sin abrir el archivo? - @takeshin ¿puedes por favor explíquelo mucho más, ¿necesitamos escribirlo en el archivo o necesitamos ejecutarlo en la terminal?
Respuesta
No sé sobre el formato automático del código existente, pero si está escribiendo código y necesita sangría automática:
-
:set autoindent
(o:set ai
) activará la sangría automática - Ctrl – d para anular la sangría (También conocido como anular la sangría) de 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 una pestaña debe sangrar el código - El comando
>>
sangrará la línea actual. Si lo prefijo un número, diga4>>
y luego sangrará 4 líneas, comenzando con la línea actual. - Asimismo,
<<
comando eliminará la sangría de una línea
Espero que esto le dé un buen comienzo.
Comentarios
- Para aplicar sangría automática al código existente, use
={motion}
en modo normal, p. ej.=G
aplicará sangría a todo el código desde la línea actual hasta el final del archivo.==
sangrará la línea actual. - también asegúrese de que los complementos de sangría se estén cargando (por ejemplo, con
:filetype indent on
) - set tw = 4 establece el TEXTWIDTH en 4
Respuesta
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
Comentarios
- ¿Esto se aplica solo a la edición con vim o con todas las herramientas de edición?
-
~./vimrc
solo se aplica al editor vim.
Respuesta
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 formatear y sangrar. Sangrar solo corrige los espacios en blanco antes de cada línea, mientras que el formateo también se ocupa de cualquier otra cosa, como espacios en blanco alrededor de los operadores, etc.
Responder
Cree / edite el archivo ~/.vimrc
y agregue la siguiente línea:
set autoindent
Comentarios
- Esto no agrega nada a las respuestas existentes …
- @jasonwryan En realidad Hai Vu ‘ La respuesta menciona
:set autoindent
que habilita la sangría automática solo para el archivo actual. Agregándolo en el.vimrc
habilita la sangría automática de forma permanente. - Su comentario ya fue mencionado por la respuesta de Rahul ‘, así que piense antes de publicar
Respuesta
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
(gg
mueve el cursor a la primera línea. =
ejecuta el comando indent. G
le dice al comando indent que se ejecute desde aquí hasta la última línea.)
Si el autoformato se ve realmente mal, como si cada línea tuviera sangría, ejecute :scriptnames
y compruebe si .../indent/html.vim
(o cualquier idioma que esté usando) está en la lista. Si no es así, asegúrese de que su ~/.vimrc
sea correcto. O si ejecutó :filetype plugin indent on
desde la línea de comandos de vim, deberá volver a abrir el archivo :e
Respuesta
Para reformatear el script bash, la solución gg = G propuesta no funciona bien en VIM, independientemente de si configura el script para que sea de tipo shell. En cambio, esto funciona;
shfmt -i 2 -ci script.sh
Para identificar todas las líneas con 2 espacios y corregir el formato de lo contrario.
Responder
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». funciona 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 el script completo tendrá una sangría de 4 espacios. siéntase libre de modificar pero cite mi nombre en su guión y publíquelo. : D
Comentarios
- Creo que esto puede estar perdiendo el sentido 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. Aparte, es posible que pueda lograr esto un poco más directamente con
sed
si así lo desea:cat script_to_be_reindented.sh | sed 's#^# #g'
(er, bueno, SO Markdown está reemplazando los espacios con una pestaña, pero obtienes el punto) - Todo lo que hace esta respuesta es insertar espacios en el frente de la línea y restablecer toda la alineación. Lo mismo (excluyendo la rebaja) se puede hacer con
sed -i 's|^[ \t]\+| |' script.sh
(es decir, 4 espacios dentro de| |
pero este sitio web filtra varios espacios en uno) .