Sangrar varias líneas rápidamente en vi

Resuelto Allain Lalonde asked hace 16 años • 34 respuestas

Debería ser trivial e incluso podría estar en la ayuda, pero no sé cómo navegar por él. ¿Cómo puedo sangrar varias líneas rápidamente en vi?

Allain Lalonde avatar Oct 25 '08 10:10 Allain Lalonde
Aceptado

Utilice el >comando. Para sangrar cinco líneas, 5>>. Para marcar un bloque de líneas y aplicarle sangría, Vjj>para sangrar 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 bloque use >iB.

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

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

Greg Hewgill avatar Oct 25 '2008 03:10 Greg Hewgill

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

En los siguientes comandos, "volver a sangrar" significa "sangrar líneas según su configuración de sangría ". shiftwidthes 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

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

Además, recuerda que

.    Repeat last command

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

Volver a sangrar archivos completos

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

gg=G  Re-indent entire buffer

Puede ampliar 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 insertar

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

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 usando marcadores

Otro enfoque es mediante 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 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

  • Sangrar un bloque de código
  • Cambiar bloques visualmente
  • Sangría del código fuente
  • :help =
ire_and_curses avatar Mar 06 '2011 17:03 ire_and_curses

Una gran selección sería:

gg=G

Es muy rápido y todo queda sangrado ;-)

Johan avatar Jan 20 '2009 21:01 Johan