Sangrar varias líneas rápidamente en vi
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?
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 shiftwidth
configuración le permite controlar cuántos espacios sangrar.
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 ". 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
Puede reemplazar {
con }
o B
, por ejemplo, =iB
es 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 =
Una gran selección sería:
gg=G
Es muy rápido y todo queda sangrado ;-)