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

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, diga 4>> 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) .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *