
Tengo el siguiente SQL:
update am.PERMISSIONS set PRM_ORDER = 35 PRM_VISIBLE = b'1' where PRM_ID = 3;
update am.PERMISSIONS set PRM_ORDER = [35] PRM_VISIBLE = b'1' where PRM_ID = 7;
update am.PERMISSIONS set PRM_ORDER = [40] PRM_VISIBLE = b'1' where PRM_ID = 10;
update am.PERMISSIONS set PRM_ORDER = [45] PRM_VISIBLE = b'1' where PRM_ID = 11;
...
entre corchetes selecciono el bloque visual, donde quiero aumentar cada número en 5. ¿Cómo hago esto?
Respuesta1
Resalte visualmente el texto entre paréntesis:
Ctr+ V2jl
Incrementa cada número en cinco:
:norm 5
Ctr+ V Ctr+ A Explicación:
:norm
ejecuta todo el comando en modo normal. El Ctr+ Ves necesario, de lo contrario el cursor volvería al principio de la línea.
Ctr+ Aaumenta un número en 1 y esto se hace 5 veces. El rango visual se inserta automáticamente después de presionar los dos puntos.
EDITAR: Como señaló correctamente Stéphane, el código anterior incrementa el primer número encontrado en cualquier línea. Aquí hay una mejor solución:
%s/\[\zs\d\+\ze\]/\=(submatch(0)+5)
Suma cinco a todos los números enteros entre paréntesis. Los \zs
y \ze
se utilizan para excluir los corchetes de la coincidencia y submatch
devuelven el número coincidente.
Respuesta2
No es necesario salir del modo visual para aumentar los números, solo useg
5 g Ctrl-a
5 ......... 5 times
g ......... globally
Ctrl-a .... increase numbers
En realidad he aprendido este truco en unvimgolfdesafío.
Respuesta3
Estos dos comandos son idénticos e incrementarán todos los números.dentro una selección visual (¡incluso en un rectángulo!).
:'<,'>s/\%V\d\+\%V/\=submatch(0)+1/g
:s/\%V\d\+\%V/\=submatch(0)+1/g
picado::s
/
\%V
\d\+
\%V
/
\=submatch(0)+1
/
g
Es \%V
un comparador de ancho cero que coincide en cualquier lugar dentro de la selección actual (o última).
De la ayuda de vim:
\%V Match inside the Visual area. When Visual mode has already been
stopped match in the area that gv would reselect.
This is a /zero-width match. To make sure the whole pattern is
inside the Visual area put it at the start and just before the end of
the pattern, e.g.:
/\%Vfoo.*ba\%Vr
This also works if only "foo bar" was Visually selected. This:
/\%Vfoo.*bar\%V
would match "foo bar" if the Visual selection continues after the "r".
Only works for the current buffer.
Desafortunadamente, esto no es tan inteligente ctrl-a
porque no comprende los números negativos.