Sangría múltiples líneas rápidamente en vi

2158

Debería ser trivial, e incluso podría estar en la ayuda, pero no puedo entender cómo navegarlo. ¿Cómo sangro varias líneas rápidamente en vi?

Allain Lalonde
fuente

Respuestas:

2552

Usa el >comando. Para sangrar cinco líneas, 5>>. Para marcar un bloque de líneas y sangrarlo, Vjj>sangra tres líneas (solo Vim). Para sangrar un bloque de llaves, coloque el cursor en una de las llaves y use >%o desde cualquier lugar dentro del uso del bloque >iB.

Si está copiando bloques de texto y necesita alinear la sangría de un bloque en su nueva ubicación, use en ]plugar de solo p. Esto alinea el bloque pegado con el texto circundante.

Además, la shiftwidthconfiguración le permite controlar cuántos espacios para sangrar.

Greg Hewgill
fuente
77
Yo uso> i} (sangría interior {} bloque). Funciona en vim. No estoy seguro de que funcione en vi.
R. Martinho Fernandes
11
Mi problema (en gVim) es que el comando> sangra mucho más de 2 espacios en blanco (quiero solo dos espacios en blanco pero> sangra algo como 5 espacios en blanco)
Kamran Bigdely
28
@Kamran: Vea la shiftwidthconfiguración para saber cómo cambiar eso.
Greg Hewgill
44
@MattStevens: Puede encontrar una discusión extensa sobre este fenómeno aquí: meta.stackexchange.com/questions/9731/…
Greg Hewgill
55
A menudo sangro bloques visuales varias veces seguidas, como arreglar algunas etiquetas pegadas en un archivo XML. En lugar de volver a seleccionar el bloque en modo visual cada vez, uno puede usar 'gv' para reutilizar el último bloque visual. Referencia superuser.com/questions/220666/…
David Mann
958

Esta respuesta resume las otras respuestas y comentarios de esta pregunta, y agrega información adicional basada en la documentación de Vim y el wiki de Vim . Para ser concisos, esta respuesta no distingue entre los comandos específicos de Vi y Vim.

En los comandos a continuación, "re-sangría" significa "líneas de sangría de acuerdo con su configuración de sangría ". shiftwidthes la variable primaria que controla la sangría.

Comandos generales

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces
5>>  Indent 5 lines
5==  Re-indent 5 lines

>%   Increase indent of a braced or bracketed block (place cursor on brace first)
=%   Reindent a braced or bracketed block (cursor on brace)
<%   Decrease indent of a braced or bracketed block (cursor on brace)
]p   Paste text, aligning indentation with surroundings

=i{  Re-indent the 'inner block', i.e. the contents of the block
=a{  Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block

>i{  Increase inner block indent
<i{  Decrease inner block indent

Puede reemplazar {con }o B, por ejemplo, =iBes un comando de sangría de bloque válido. Eche un vistazo a "Sangría un bloque de código" para ver un buen ejemplo para probar estos comandos.

Además, recuerda que

.    Repeat last command

, por lo que los comandos de sangría se pueden repetir fácil y convenientemente.

Re-sangría de archivos completos

Otra situación común requiere que se corrija la sangría en un archivo fuente:

gg=G  Re-indent entire buffer

Puede extender esta idea a varios archivos:

" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall

O múltiples buffers:

" Re-indent all open buffers:
:bufdo normal gg=G:wall

En modo visual

Vjj> Visually mark and then indent three lines

En modo de inserción

Estos comandos se aplican a la línea actual:

CTRL-t   insert indent at start of line
CTRL-d   remove indent at start of line
0 CTRL-d remove all indentation from line

Comandos ex

Estos son útiles cuando desea sangrar un rango específico de líneas, sin mover el cursor.

:< and :> Given a range, apply indentation e.g.
:4,8>   indent lines 4 to 8, inclusive

Sangría utilizando marcadores

Otro enfoque es a través de marcadores :

ma     Mark top of block to indent as marker 'a'

... mover el cursor a la ubicación final

>'a    Indent from marker 'a' to current location

Variables que gobiernan la sangría

Puede configurarlos en su archivo .vimrc .

set expandtab       "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4    "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4   "Indent by 4 spaces when pressing <TAB>

set autoindent      "Keep indentation from previous line
set smartindent     "Automatically inserts indentation in some cases
set cindent         "Like smartindent, but stricter and more customisable

Vim tiene una sangría inteligente basada en el tipo de archivo. Intente agregar esto a su .vimrc:

if has ("autocmd")
    " File type detection. Indent based on filetype. Recommended.
    filetype plugin indent on
endif

Referencias

ire_and_curses
fuente
13
Tanto esta respuesta como la anterior fueron geniales. Pero hice +1 en esto porque me recordó al operador 'punto', que repite el último comando. Esto es extremadamente útil cuando se necesita sangrar un bloque completo en varios espacios de cambio (o sangrías) sin necesidad de seguir presionando >}. Muchas gracias
Amit
1
5 >> Sangría 5 líneas: este comando sangra la quinta línea, no 5 líneas. ¿Podría esto ser debido a mi configuración de VIM o es incorrecta su redacción?
Wipqozn
1
@Wipqozn: Eso es extraño. Definitivamente sangra las siguientes cinco líneas para mí, probadas en Vim 7.2.330.
ire_and_curses
8
> 42gg ​​Sangría desde donde estás hasta la línea 42.
Steve
Gran resumen! También tenga en cuenta que "sangrar dentro del bloque" y "sangrar todo el bloque" (<i {> a {etc.) también funciona con paréntesis y corchetes:> a (<i] etc. (Y mientras estoy en eso, en además de <> 's, también trabajan con d, c, y etc.)
aqn

123

Una gran selección sería:

gg=G

Es realmente rápido, y todo se sangra ;-)


1
Tengo un archivo XML y activé el resaltado de sintaxis. Escribir gg=Gsimplemente coloca cada línea a partir de la posición 1. Se han eliminado todos los espacios en blanco. ¿Hay algo más específico para XML?
pide el

2
Creo que set cindentdebería estar en vimrc o debería ejecutarse :set cindentantes de ejecutar ese comando
Amanuel Nega

3
Creo que Cindent debe establecerse primero. y @asgs, creo que esto solo funciona para los lenguajes de programación cstyle.
Amanuel Nega

110

Pruebe también esto para la sangría de sangría en C. Haz :help =para más información:

={

Eso sangrará automáticamente el bloque de código actual en el que se encuentra.

O solo:

==

para sangrar automáticamente la línea actual.


2
no funciona para mí, simplemente voltea mi cursor en la línea sobre la llave de apertura de 'el bloque de código actual en el que estoy'.
underscore_d

79

Pulsaciones de teclas para personas más visuales:

  1. Ingrese al modo de comando:
    Escape

  2. Muévase al comienzo del área para sangrar:
    hjkl

  3. Comience un bloque:
    v

  4. Muévase hasta el final del área para sangrar:
    hjkl

  5. (Opcional) Escriba el número de niveles de sangría que desee
    0..9

  6. Ejecute la sangría en el bloque:
    >


2
Esto es genial, pero usa espacios y no pestañas. ¿Alguna forma posible de arreglar esto?
Shane Reustle

12
Si está usando espacios en lugar de pestañas, entonces es probable que tenga una sangría establecida para usar espacios. =).
Kent Fredric

44
Cuando la opción 'expandtab' está desactivada (este es el valor predeterminado) Vim usa <Tab> s tanto como sea posible para hacer la sangría. (: ayuda:>)
Kent Fredric

1
La única configuración de vim relacionada con tab / space que he cambiado es: set tabstop = 3. En realidad está insertando esto cada vez que uso >>: "<tab> <space> <space>". Lo mismo con sangrar un bloque. ¿Algunas ideas?
Shane Reustle

3
Las tres configuraciones que desea ver para "espacios frente a pestañas" son 1. tabstop 2. shiftwidth 3. expandtab. Probablemente tenga "shiftwidth = 5 noexpandtab", por lo que una "pestaña" es 3 espacios, y un nivel de sangría es "5" espacios, por lo que constituye el 5 con 1 pestaña y 2 espacios.
Kent Fredric

66

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 la línea actual
==

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

=G

Para sangrar nlí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

=%

Estos son los comandos más simples pero potentes para sangrar varias líneas.


3
Esto está justo adentro vim, no vi.
rojomoke

3
No en mis cajas Solaris o AIX, no lo hace. La clave igual siempre ha sido una de mis asignaciones macro ad hoc estándar. ¿Estás seguro de que no estás viendo un enlace al vimque está vinculado vi?
rojomoke

3
Sí, en Linux, vi casi siempre es un enlace a vim. Intente ejecutar el comando: ve dentro de vi.
rojomoke

44
Me encantan este tipo de respuestas: claras, precisas y concisas. Trabajó para mí en Debian Jessie. Gracias, @SJain
digitai

1
Como uso vim, no vi, bastante emocionado, esta respuesta está aquí. Gracias.
Dan Nissenbaum

66

Además de la respuesta ya dada y aceptada, también es posible colocar un marcador y luego sangrar todo, desde el cursor actual hasta el marcador.

Por lo tanto, ingrese madonde desea la parte superior de su bloque sangrado, desplace el cursor hacia abajo todo lo que necesite y luego escriba >'a(tenga en cuenta que " a" se puede sustituir por cualquier nombre de marcador válido). Esto a veces es más fácil que 5>>o vjjj>.


1
Esto es realmente útil. Voy a tener que buscar qué funciona con esto. Sé d'a y y'a, ¿qué más?
user606723

2
Esto es muy útil ya que evita la necesidad de contar cuántas líneas desea sangrar.
ziggy

29

Ir al inicio del texto.

  • presione vpara el modo visual.
  • use up/ downflecha para resaltar el texto.
  • presione =para sangrar todas las líneas que resaltó.

28

Además de las soluciones ofrecidas, me gusta hacer las cosas un párrafo a la vez con >}


2
Sí, y esta es la razón por la que uno de mis grandes manías son los espacios en blanco en una línea que de otra manera estaría vacía: ensucian la noción de vim de un "párrafo".
aqn

28

Cuando selecciona un bloque y lo usa >para sangrar, sangra y luego vuelve al modo normal. Tengo esto en mi archivo .vimrc:

vnoremap < <gv

vnoremap > >gv

Le permite sangrar su selección tantas veces como desee.


17
Para sangrar la selección varias veces, simplemente puede presionar. para repetir el comando anterior.
sundar - Restablecer Monica

2
El problema con En esta situación es que tienes que mover los dedos. Con la solución de @ mike (la misma que uso), ya tiene los dedos en la tecla de sangría y puede seguir golpeándola para seguir sangrando en lugar de cambiar y hacer otra cosa. Usar el período lleva más tiempo porque tienes que mover las manos y requiere más reflexión porque es una segunda operación diferente.
masukomi

21

Suponga que usa 2 espacios para sangrar su código. Tipo:

:set shiftwidth=2
  • Escriba v(para ingresar al modo de edición de bloque visual)
  • Mueva el cursor con las teclas de flecha (o con h/ j/ k/ l) para resaltar las líneas que desea sangrar o desangrar.

Entonces:

  • Escriba >para sangrar una vez (2 espacios).
  • Escriba 2>para sangrar dos veces (4 espacios).
  • Escriba 3>para sangrar tres veces (6 espacios).
  • ...
  • Escriba <unindent una vez (2 espacios).
  • Escriba 2<dos veces sin sangría (4 espacios).
  • Escriba 3<tres veces sin sangría (6 espacios).
  • ...

Tienes la idea.

( Las líneas vacías no se sangrarán, lo que creo que es agradable ) .


Encontré la respuesta en la documentación (g) vim para los bloques de sangría:

:help visual-block
/indent

Si desea contar el comando, haga esto justo antes de escribir el carácter del operador: "v {move-around} 3>" (mueva las líneas 3 sangrías a la derecha).

John Sonderson
2
Yo diría que vi / vim es mayormente consistente. ¡Por ejemplo, D no se comporta igual que S e Y! :)
aqn
1
esto comienza desde el lado izquierdo del archivo ... no la posición actual del bloque
Eliethesaiyan
1
Impresionante, justo lo que estaba buscando (una forma de insertar un número específico de espacios, 4 espacios para el código de descuento, para anular mi sangría normal). En mi caso, quería sangrar un número específico de líneas en modo visual, así que shift-v para resaltar las líneas y luego :'<,'>le4insertar los espacios. ¡Gracias!
Subfuzion
1
Claramente, hay muchas maneras de resolver esto, pero esta es la más fácil de implementar, ya que los números de línea se muestran por defecto en vim y no requieren matemática.
HoldOffHunger
@HoldOffHunger Los números de línea no se muestran por defecto. Debe usar :set numberpara alternar los números de línea (están desactivados de forma predeterminada) o poner set numberen su vimrc.
DryLabRebel
Esto es engorroso, pero es el camino a seguir si formatea fuera del núcleo de VIM (por ejemplo, usando en vim-prettierlugar del motor de sangría predeterminado). De >lo contrario, el uso ralentizará el formato realizado por Prettier.
oligofren
Es curioso, lo encuentro todo menos engorroso. ¡Esto no es uni-tasker! Aprender este método tiene muchos usos más allá de la sangría.
sqqqrly
Lo encuentro mejor que la respuesta aceptada, ya que puedo ver lo que está sucediendo, las líneas que estoy seleccionando y la acción que estoy haciendo, y no solo escribo algún tipo de encantamiento vim.
user4052054
3
...¿qué? 'sangría por 4 espacios'? No, esto salta a la línea 4 y luego sangra todo desde allí hasta el final del archivo, usando el modo de sangría seleccionado actualmente (si lo hay).
underscore_d
18

La belleza de la interfaz de usuario de Vim es su consistencia. Los comandos de edición están compuestos por el comando y un movimiento del cursor. Los movimientos del cursor son siempre los mismos:

  • Ha la parte superior de la pantalla, La la parte inferior, Ma la mitad
  • nG para ir a la línea n , Gsolo al final del archivo, ggal principio
  • npara pasar a la siguiente búsqueda, Na la anterior
  • } al final del párrafo
  • % al siguiente paréntesis coincidente, ya sea entre paréntesis o tipo de etiqueta
  • enter a la siguiente línea
  • 'xpara marcar x donde x es una letra u otra '.
  • muchos más, incluidos wy Wpor palabra, $o 0en las puntas de la línea, etc., que no se aplican aquí porque no son movimientos de línea .

Entonces, para usar vim, debe aprender a mover el cursor y recordar un repertorio de comandos como, por ejemplo, >sangrar (y <"saliente").

Por lo tanto, para sangrar las líneas desde la posición del cursor hasta la parte superior de la pantalla >H, >Gsangra hasta la parte inferior del archivo.

Si, en lugar de escribir >H, escribe , dHestá eliminando el mismo bloque de líneas, cHpara reemplazarlo, etc.

Algunos movimientos del cursor se ajustan mejor con comandos específicos. En particular, el %comando es útil para sangrar un bloque HTML o XML completo. Si el archivo tiene la sintaxis resaltada ( :syn on), entonces establezca el cursor en el texto de una etiqueta (como, en la "i" de <div> y al ingresar >%sangrará hasta la etiqueta de cierre </div>.

Así es como funciona Vim: uno tiene que recordar solo los movimientos del cursor y los comandos, y cómo mezclarlos. Entonces, mi respuesta a esta pregunta sería "ir a un extremo del bloque de líneas que desea sangrar, y luego escribir el >comando y un movimiento al otro extremo del bloque" si sangría se interpreta como desplazamiento de las líneas, =si sangría se interpreta como en bonita impresión.

Juan Lanus
fuente
2
Yo diría que vi / vim es mayormente consistente. ¡Por ejemplo, D no se comporta igual que S e Y! :)
aqn
14

Hacer esto:

$vi .vimrc

Y agregue esta línea:

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

Esto es solo para un archivo cpp. Puede hacer esto para otro tipo de archivo, también simplemente modificando el tipo de archivo ...

pankaj ukumar
fuente
13

Puede usar el norm icomando para insertar texto dado al comienzo de la línea. Para insertar 10 espacios antes de las líneas 2-10:

:2,10norm 10i 

Recuerde que tiene que haber un carácter de espacio al final del comando; este será el carácter que queremos insertar. También podemos sangrar una línea con cualquier otro texto, por ejemplo, sangrar cada línea en un archivo con cinco caracteres de subrayado:

:%norm 5i_

O algo aún más elegante:

:%norm 2i[ ]

Un ejemplo más práctico es comentar el código Bash / Python / etc con el carácter #:

:1,20norm i#

Para volver a sangrar el uso en xlugar de i. Por ejemplo, para eliminar los primeros 5 caracteres de cada línea:

:%norm 5x
Nykakin
fuente
1
esto comienza desde el lado izquierdo del archivo ... no la posición actual del bloque
Eliethesaiyan
12

Una forma rápida de hacer esto usando VISUAL MODE el mismo proceso que comentar un bloque de código.

Esto es útil si prefiere no cambiar sus directivas shiftwidtho utilizar ninguna setdirectiva y es lo suficientemente flexible como para trabajar con TABS o SPACES o cualquier otro personaje.

  1. Posicione el cursor al comienzo del bloque
  2. v para cambiar a -- VISUAL MODE --
  3. Seleccione el texto a sangrar
  4. Escriba :para cambiar a la solicitud
  5. Sustitución por 3 espacios principales:

    :'<,'>s/^/ /g

  6. O reemplazando con pestañas iniciales:

    :'<,'>s/^/\t/g

  7. Breve explicacion:

    '<,'> - Dentro del rango visualmente seleccionado

    s/^/ /g - Inserte 3 espacios al comienzo de cada línea dentro de todo el rango

    (o)

    s/^/\t/g- Insertar Tabal principio de cada línea dentro de todo el rango

Eric Kigathi
fuente
12

>}o >{sangrar desde la línea actual hasta el siguiente párrafo

<}o la <{misma sangría

jash
fuente
11

Me gusta marcar texto para sangrar:

  1. vaya al comienzo de la línea de texto y luego escriba ma( aes la etiqueta del 'm'ark: podría ser cualquier letra)
  2. vaya a la línea final de texto y escriba mz(nuevamente, zpodría ser cualquier letra)
  3. :'a,'z>o :'a,'z<sangrará o sangrará (¿es esta una palabra?)
  4. Voila! El texto se mueve (las líneas vacías permanecen vacías sin espacios)

PD: puede usar la :'a,'ztécnica para marcar un rango para cualquier operación (d, y, s ///, etc.) donde puede usar líneas, números o %.

SteveO
fuente
10

:help left

En ex modepuede usar :lefto :lepara alinear líneas una cantidad especificada. Específicamente, :leftse líneas Alinear a la izquierda en la [rango]. Establece la sangría en las líneas en [sangría] (valor predeterminado 0).

:%le3o :%le 3 o :%left3o:%left 3 alineará todo el archivo rellenando con tres espacios.

:5,7 le 3 alineará las líneas 5 a 7 rellenándolas con tres espacios.

:le sin ningún valor o :le 0 se alineará con un relleno de 0.

Esto funciona en Vim y gVim.

zundarz
fuente
1
Impresionante, justo lo que estaba buscando (una forma de insertar un número específico de espacios, 4 espacios para el código de descuento, para anular mi sangría normal). En mi caso, quería sangrar un número específico de líneas en modo visual, así que shift-v para resaltar las líneas y luego :'<,'>le4insertar los espacios. ¡Gracias!
Subfuzion
9

Para mí, la solución MacVim (Visual) fue, seleccione con el mouse y presione ">", pero después de poner las siguientes líneas en "~ / .vimrc" ya que me gustan los espacios en lugar de las pestañas:

set expandtab
set tabstop=2
set shiftwidth=2

También es útil poder llamar a MacVim desde la línea de comandos (Terminal.app), por lo que tengo el siguiente directorio auxiliar "~ / bin", donde coloco un script llamado "macvim":

#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@

Y, por supuesto, en "~ / .bashrc":

export PATH=$PATH:$HOME/bin

MacPorts se mete mucho con "~ / .profile", por lo que la variable de entorno PATH puede ser bastante larga.

mda
fuente
9

5== sangrará cinco líneas desde la posición actual del cursor.

Entonces puede escribir cualquier número antes ==. Sangrará el número de líneas. Esto está en modo comando.

gg=G sangrará todo el archivo de arriba a abajo.

rohitkadam19
fuente
9

No encontré un método que utilizo en los comentarios, así que lo compartiré (creo que solo Vim):

  1. Esc para ingresar al modo de comando
  2. Muévase al primer carácter de la última línea que desea sangrar
  3. Ctrl+ Vpara comenzar a seleccionar bloque
  4. Muévase al primer carácter de la primera línea que desea sangrar
  5. Shift+ Ipara ingresar al modo de inserción especial
  6. Escriba tantos espacios / pestañas como necesite sangrar (dos por ejemplo
  7. prensa Esc y aparecerán espacios en todas las líneas

Esto es útil cuando no desea cambiar las configuraciones de sangría / tabulación vimrco recordarlas para cambiarlas durante la edición.

Para eliminar la sangría, uso el mismo Ctrl+ Vbloque de selección para seleccionar espacios y eliminarlo con D.

NickSoft
fuente
9

No sé por qué es tan difícil encontrar una respuesta simple como esta ...

Yo mismo tuve que luchar mucho para saber esto. Es muy simple:

  • Edite su .vimrcarchivo en el directorio de inicio.
  • Agrega esta línea

    set cindent
    

    en su archivo donde desea sangrar correctamente.

  • En modo normal / comando escriba

    10==   (This will indent 10 lines from the current cursor location)
    gg=G   (Complete file will be properly indented)
    
Kamlesh Karwande
fuente
8
:line_num_start,line_num_end>

Por ejemplo,

14,21> shifts line number 14 to 21 to one tab

Aumente el símbolo '>' para más pestañas.

Por ejemplo,

14,21>>> for three tabs
attaboyabhipro
fuente
1
Claramente, hay muchas maneras de resolver esto, pero esta es la más fácil de implementar, ya que los números de línea se muestran por defecto en vim y no requieren matemática.
HoldOffHunger
@HoldOffHunger Los números de línea no se muestran por defecto. Debe usar :set numberpara alternar los números de línea (están desactivados de forma predeterminada) o poner set numberen su vimrc.
DryLabRebel
7

Usando mucho Python, me encuentro con la necesidad frecuente de cambiar bloques por más de una sangría. Puede hacerlo utilizando cualquiera de los métodos de selección de bloque y luego simplemente ingrese el número de sangrías que desea saltar justo antes de>

Por ejemplo, V5j3>sangrará cinco líneas tres veces, que son 12 espacios si usa cuatro espacios para sangrías.

John La Rooy
fuente
7

Para sangrar cada línea en un tipo de archivo, Escy luego G=gg.

kapil
fuente
6

Cómo sangrar el código resaltado en vi inmediatamente por varios espacios:

Opción 1: sangra un bloque de código en vi a tres espacios con el modo Visual Block:

  1. Seleccione el bloque de código que desea sangrar. Haga esto usando Ctrl+Vel modo normal y haciendo flechas hacia abajo para seleccionar texto. Mientras está seleccionado, ingrese :para dar un comando al bloque de texto seleccionado.

  2. Lo siguiente aparecerá en la línea de comando: :'<,'>

  3. Para establecer la sangría en tres espacios, escriba le 3y presione Intro. Esto es lo que aparece::'<,'>le 3

  4. El texto seleccionado se sangra inmediatamente a tres espacios.

Opción 2: sangra un bloque de código en vi a tres espacios con el modo Visual Line:

  1. Abra su archivo en vi.
  2. Pon el cursor sobre un código
  3. Estar en modo normal y presionar las siguientes teclas:

    Vjjjj:le 3
    

    Interpretación de lo que hiciste:

    V significa comenzar a seleccionar texto.

    jjjj flechas hacia abajo cuatro líneas, resaltando cuatro líneas.

    : le dice a vi que ingresará una instrucción para el texto resaltado.

    le 3 significa sangrar texto resaltado tres líneas.

    El código seleccionado se aumenta o disminuye inmediatamente a tres espacios de sangría.

Opción 3: use el modo Bloque visual y el modo de inserción especial para aumentar la sangría:

  1. Abra su archivo en vi.
  2. Pon el cursor sobre un código
  3. En modo normal, presione las siguientes teclas:

    Ctrl+V

    jjjj
    

    (presione la barra espaciadora cinco veces)

    Esc Shift+i

    Todo el texto resaltado tiene una sangría adicional de cinco espacios.

Eric Leschinski
fuente
6

Yo uso la selección visual en modo bloque:

  • Ve al frente del bloque para moverte (en la parte superior o inferior).
  • Presione Ctrl+ Vpara ingresar al modo de bloqueo visual.
  • Navegue para seleccionar una columna delante de las líneas.
  • Presione I( Shift+ I) para ingresar al modo de inserción.
  • Escribe algunos espacios.
  • Presione Esc. Todas las líneas cambiarán.

Esto no es uni-tasker. Funciona:

  • En el medio de las líneas.
  • Para insertar cualquier cadena en todas las líneas.
  • Para cambiar una columna (use en clugar de I).
  • tirar, eliminar, sustituir, etc.
sqqqrly
fuente
Esto es engorroso, pero es el camino a seguir si formatea fuera del núcleo de VIM (por ejemplo, usando en vim-prettierlugar del motor de sangría predeterminado). De >lo contrario, el uso ralentizará el formato realizado por Prettier.
oligofren
Es curioso, lo encuentro todo menos engorroso. ¡Esto no es uni-tasker! Aprender este método tiene muchos usos más allá de la sangría.
sqqqrly
Lo encuentro mejor que la respuesta aceptada, ya que puedo ver lo que está sucediendo, las líneas que estoy seleccionando y la acción que estoy haciendo, y no solo escribo algún tipo de encantamiento vim.
user4052054
5
  • Para un bloque de código, {}: =+%

  • Para una línea seleccionada: Shift+ vseleccione usando las teclas de flecha arriba / abajo, y luego presione =.

  • Para todo el archivo: gg+ =+G

Nota: 'gg' significa ir a la línea 1, '=' es el comando de sangría y 'G' mueve el cursor al final del archivo .

Kulamani
fuente
4

Para sangrar todo el archivo por cuatro:

esc 4G=G
Miguel
fuente
3
...¿qué? 'sangría por 4 espacios'? No, esto salta a la línea 4 y luego sangra todo desde allí hasta el final del archivo, usando el modo de sangría seleccionado actualmente (si lo hay).
underscore_d