Pregunta Sangrar varias líneas rápidamente en vi


Debería ser trivial, e incluso podría ser una ayuda, pero no puedo encontrar la manera de navegarlo. ¿Cómo sangro múltiples líneas rápidamente en vi?


1968
2017-10-25 03:27


origen


Respuestas:


Utilizar el > mando. Para sangrar 5 líneas, 5>>. Para marcar un bloque de líneas y sangrarlo, Vjj> para sangrar 3 líneas (solo vim). Para aplicar sangría a un bloque de llaves, coloque el cursor sobre una de las llaves y use >%.

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

También el shiftwidth configuración le permite controlar la cantidad de espacios para sangrar.


2321
2017-10-25 03:28



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

En los comandos a continuación, "volver a sangría" significa "sangría líneas de acuerdo con su ajustes de sangría" shiftwidth es la variable principal 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

Puedes reemplazar { con } o B, p.ej. =iB es un comando de sangría de bloque válido. Echa un vistazo a "Sangrar un bloque de código" para un buen ejemplo para probar estos comandos.

Además, recuerda que

.    Repeat last command

, por lo que los comandos de sangría pueden repetirse fácil y cómodamente.

Volver a indentificar archivos completos

Otra situación común es que se debe corregir 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 búferes:

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

En modo visual

Vjj> Visually mark and then indent 3 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 su cursor.

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

Sangría usando 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 configurar estos 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


886
2018-03-06 17:29



Una gran selección sería

gg=G

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


116
2018-01-20 21:11



También prueba esto para C-sangría indentación, hacer :help = para más información:

={

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

O solo:

==

para auto-sangrar la línea actual.


105
2017-10-25 04:21



Key-Presses para más personas visuales:

  1. Ingrese el modo de comando:
    Escapar 

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

  3. Comience un bloque:
    v

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

  5. (Opcional) Escriba la cantidad de niveles de indentación que desea
    0..9

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


73
2017-10-25 09:16



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 ma donde quieras la parte superior de tu bloque sangriento, baja el cursor todo lo que necesites y luego escribe >'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>.


62
2017-10-25 04:00



El maestro de todos los comandos es
gg=G

Esto sangra todo el archivo!

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 aplicar sangría a todas las líneas debajo de la línea actual

=G

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 uno de los refuerzos y use el comando

=%

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


60
2018-04-18 18:41



Ir al comienzo del texto

  • prensa v para el modo visual.
  • utilizar arriba/abajo flecha para resaltar el texto.
  • prensa = para sangrar todas las líneas que destacó.

29
2017-11-04 22:57



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


27
2017-10-25 04:08



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

vnoremap < <gv

vnoremap > >gv

Te permite sangrar tu selección tantas veces como quieras.


25
2018-02-15 05:42