tab shiftwidth multiple indent vim vi indentation

vim - shiftwidth - ¿Cómo puedo corregir la sangría de un archivo completo en Vi?



vim tab 4 spaces (16)

En Vim, ¿cuál es el comando para corregir la sangría de todas las líneas?

Muchas veces copiaré y pegaré el código en un terminal remoto y haré que todo se desordene. Quiero arreglar esto de una sola vez.


Antes de pegar en el terminal, intente :set paste (y luego :set nopaste vez que haya terminado). Esto desactivará las características de sangría automática, ajuste de línea, etc. que están arruinando su pegado.

edición: también, debo señalar que un resultado mucho mejor que = sangría generalmente se puede obtener mediante el uso de un programa externo. Por ejemplo, ejecuto :%!perltidy todo el tiempo. También se puede usar astilo, cindent, etc. Y, por supuesto, puede asignarlos a un golpe de tecla y asignar diferentes a la misma pulsación de teclas dependiendo del tipo de archivo


El maestro de todos los comandos es

gg=G

Esto sangra todo el archivo!

Y a continuación se muestran algunos de los comandos simples y elegantes utilizados para sangrar líneas rápidamente en Vim o gVim.

Para sangrar todas las líneas debajo de la línea actual

=G

Para sangrar la línea actual

==

Para sangrar n líneas debajo de la línea actual

n==

Por ejemplo, para sangrar 4 líneas debajo de la línea actual

4==

Para sangrar un bloque de código, vaya a una de las llaves y use el comando

=%


En Vim, utilice :insert . Esto mantendrá todo su formateo y no hará autoindenting. Para más información help :insert .



Para archivos complejos de C ++, vim no siempre tiene el formato correcto cuando se usa el comando vim''s = filter. Por lo tanto, para tales situaciones, es mejor usar un formateador C ++ externo como astyle (o uncrustify ), por ejemplo:

:%!astyle

La función ''='' de Vim usa su formateador interno de manera predeterminada (lo que no siempre funciona bien), pero también se puede configurar usar un formateador externo, como astyle, configurándolo adecuadamente como se explica en esta pregunta .


Para el Editor vi, use: insertar. Esto mantendrá todo su formato y no insertará sangría automática. Una vez que haya hecho, presione escape para ver el archivo con formato real, de lo contrario verá algunos caracteres de basura. como ^ yo por ejemplo:

public static void main(String[] args) { ^I ^I System.out.println("Some Garbage printed upon using :insert"); }


Puede crear una asignación para hacer esto por usted.

Éste sangrará automáticamente todo el archivo y aún mantendrá el cursor en la posición en la que se encuentra:

nmap <leader>ai mzgg=G`z


Puede usar la aplicación / utilidad tidy para sangrar archivos HTML y XML y funciona bastante bien para sangrar esos archivos.

Prettify un archivo XML

:!tidy -mi -xml %

Prettificar un archivo HTML

:!tidy -mi -html %


Si desea reindentar el bloque en el que está sin tener que escribir ningún acorde, puede hacerlo:

[[=]]


Si no desea utilizar :set paste , hacer clic con el botón central, set nopaste , también puede pegar el contenido del portapapeles:

"*p "+p

De esa manera no tienes que salir del modo normal. Si tiene que pegar + o * depende de cómo seleccionó el texto, consulte :help quoteplus .


presiona escapar y luego escribe las combinaciones de abajo rápido:

gg=G


vi debe respetar las pestañas y los espacios, sin embargo, debe considerar que vi puede estar usando pestañas de diferente longitud que su otro editor. ¿Puedes ser más específico que "todo desordenado"?


vim-autoformat formatea sus archivos de origen utilizando programas externos específicos para su idioma, por ejemplo, rbeautify "gema para archivos Ruby", paquete js-beautify "npm para JavaScript.


1G=G Eso debería sangrar todas las líneas en el archivo. 1G te lleva a la primera línea, = comenzará la sangría automática y la G final te llevará a la última línea del archivo.


:set paste es tu amigo Yo uso masilla y termino copiando código entre ventanas. Antes de :set nopaste para :set paste (y :set nopaste ) copiar / pegar me dio ajustes por esa misma razón.


= , el comando de sangría puede tomar movimientos. Entonces, gg para obtener el inicio del archivo, = sangrar, G hasta el final del archivo, gg=G