sangria - Vim: sangría con un espacio(sin espacios de ancho de cambio)
sangria preparada refresco (6)
La sangría predeterminada de los comandos de sangría VIM por espacios de ancho de cambio
p.ej
>> Indent line by shiftwidth spaces
<< De-indent line by shiftwidth spaces
¿Hay alguna forma de sangrar con uno o n (donde n! = Ancho de cambio) espacio (s)?
Una forma de hacerlo es seleccionar verticalmente una columna en el bloque con Ctrl+V
, luego, I
para insertar verticalmente y luego escribir un space
y <Esc>
. Pero hay una manera mejor?
Coloque marcas (''a'' y ''b'') entre el código que desea sangrar:
<position cursor at top of block>
m a
<position cursor at bottom of block>
m b
Realice un comando de reemplazo de modo que cada carácter de nueva línea entre sus marcas se reemplace por el número de espacios deseados (en este ejemplo, 2 espacios):
:''a,''bs/^/ /g
No estoy seguro de que haya una mejor manera. Pero, hay algunas maneras en que podrías hacerlo (que de todos modos puedo pensar) ...
Su solución Visual Block
Como dijo: presione Ctl-V
seleccione las líneas que desea, presione I
para insertar e ingrese la cantidad de espacios.
Buscar
Similar a lo anterior pero un poco más flexible: puede usar con el comando vip
''seleccionar párrafo'', o cualquier rango realmente: presione v
o vip
o lo que tenga que seleccionar el rango, y el tipo :s/^/{n spaces}
donde {n espacios} es el número de espacios que desea insertar.
Es un poco más detallado, pero funciona bastante bien para casi cualquier rango. Diablos, si quisieras hacer todo el archivo, podrías hacer Ctl-A
o lo que tienes (dependiente del sistema operativo) y aplicar sangría a todo el archivo (o simplemente omitir todo el modo visual y simplemente hacerlo en modo comando ... como en :1,$s/^/{n spaces}
Tenga en cuenta que no tiene que incluir la tercera barra en s /// ya que no está poniendo etiquetas al final.
Global
Tal vez quieras solo sangrías que coincidan con algún patrón. Diga ... Todas las líneas que contienen foo. No hay problema: escriba :g/foo/s/^/{n spaces}
Global es especialmente útil si se trata de secciones de varias líneas con un patrón similar. Puede escaparse al terreno de modo normal y seleccionar las líneas que desea y :g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}
sangría en consecuencia:: :g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}
. Poco más complicado con ese Ctl-V{Enter}
adicional Ctl-V{Enter}
al final, pero útil bajo ciertas circunstancias.
Use tabstop y shiftwidth
Sí, si lo haces mucho, lo haré :set ts=2
y :set et
y :set sw=2
y usa >>
y <<
todas formas ...
Hacer una función
De acuerdo, así que aún no es lo suficientemente breve y por alguna razón necesitas hacer esto mucho y no puedes soportar jugar con las configuraciones de sw
, et
y ts
. No hay problema, solo escribe una función rápida y dale un mapeo de localleader
:
function! AddSpace(num) range
let s:counter = 0
let s:spaces = ''''
while s:counter < a:num
let s:spaces .= '' ''
let s:counter = s:counter + 1
endwhile
execute a:firstline .'',''. a:lastline .''s/^/''. s:spaces
endfunction
:map <LocalLeader>i :call AddSpace(3)Ctl-V{enter}
Tal vez solo saber más de una forma de hacerlo es mejor que solo saber uno. Después de todo, a veces la mejor solución depende del problema :)
Para cambiar el número de caracteres de espacio insertados para la sangría, use la opción shiftwidth
:
:set shiftwidth = <number>
Mire aquí para más details .
También puede agregar eso a su archivo .vimrc
.
Si estoy entendiendo correctamente, podrías usar:
ctrl + V, jj luego '': le n'', donde n es el número de espacios para sangrar.
Tuve que degradar por un número determinado de espacios, amount
, dentro de un script de vim. Esto funcionó:
let sw_setting = &shiftwidth
set shiftwidth=1
exe "normal v" . amount . "<"
let &shiftwidth = sw_setting
Un efecto secundario es que restablece la última selección del modo visual. En su lugar, es posible que desee editar la línea exe...
de modo que ejecute "<<" veces repetidas en modo normal. Es decir: en lugar de normal v3<
, normal <<<<<<
, si la amount
es 3.
Sangra un bloque de código en vi por tres espacios con modo Visual Block:
Seleccione el bloque de código que desea sangrar. Haga esto usando Ctrl + V en modo normal y flecha abajo para seleccionar texto. Mientras está seleccionado, ingrese ":" para dar un comando al bloque del texto seleccionado.
Lo siguiente aparecerá en la línea de comando
:''<,''>
Para establecer la sangría en 3 espacios, escriba
le 3
y presione enter. Esto es lo que aparece:::''<,''>le 3
El texto seleccionado se sangra inmediatamente a 3 espacios.
Sangra un bloque de código en vi por tres espacios con modo Visual Line:
- Abra su archivo en VI.
- Pon el cursor sobre algún código
Estar en modo normal, presione las siguientes teclas:
Vjjjj:le 3
Interpretación de lo que hizo:
V
significa comenzar a seleccionar texto.
jjjj
flechas hacia abajo 4 líneas, resaltando 4 líneas.
:
le dice a vi que ingresará una instrucción para el texto resaltado.
le 3
significa sangría texto resaltado 3 líneas.