Soy consciente de que en Vim a menudo puedo repetir un comando simplemente agregando un número delante de él. Por ejemplo, uno puede eliminar 5 líneas de la siguiente manera:
5dd
A menudo también es posible especificar un rango de líneas para aplicar un comando, por ejemplo
:10,20s:hello:goodbye:gc
¿Cómo puedo realizar una 'edición vertical'? Me gustaría, por ejemplo, insertar un símbolo en particular, digamos una coma, al comienzo (omitiendo espacios en blanco, es decir, lo que obtendría si escribe una coma después de Shift-I en modo comando) de cada línea en un determinado rango. ¿Cómo se puede lograr esto (sin recurrir al período inferior-período-inferior-período-inferior)?
^\(\s*\)
captura el espacio en blanco inicial y lo guarda en un registro, que luego puede leer\1
.Ctrl- vingresa al modo visual en bloque. A continuación, puede moverse (a lo hjkllargo, como de costumbre) y, si desea insertar algo en varias líneas, use Shift- i.
Entonces para el texto:
si presiona Ctrl- vcon el cursor sobre el 1, presione jdos veces para bajar dos columnas, entonces Shift- i,ESC, su texto se vería así:
(la inserción de varias líneas tiene un pequeño retraso, y no se procesará hasta DESPUÉS de presionar ESC).
fuente
i
sin la tecla shift?Para eso está el comando: norm (al):
fuente
Si ya está usando el '.' para repetir tu último comando mucho, entonces encontré que esta es la solución más conveniente hasta ahora. Le permite repetir su último comando en cada línea de un bloque visual utilizando
fuente
.
opera en línea en modo visual. Creo que el modo visual en este caso a veces puede ser conveniente para seleccionar un rango de línea. Pero los comandos y las macros son más flexibles y potentes en este caso.Creo que la forma más fácil de hacer esto es
1) grabar una macro para una línea, llámela 'a'; en este caso uno teclea
2) seleccione el bloque de líneas al que desea aplicar la macro
3) use la función 'norma' para ejecutar la macro 'a' sobre este bloque de líneas, es decir,
fuente
Creo que lo más fácil es grabar una macro y luego repetirla tantas veces como quieras. Por ejemplo, para agregar una coma al comienzo de cada línea, escriba:
para repetir eso 5 veces, ingresas
fuente
Yo uso el modo visual de bloque . Esto le permite realizar inserciones / ediciones en varias líneas (también conocido como 'ediciones verticales').
fuente
Con su edición ya guardada en el
.
operador, haga lo siguiente::norm .
fuente
Además de las macros, como ya se respondió, para el caso específico de insertar una coma en un rango de líneas (digamos de la línea 10 a la 20), puede hacer algo como:
Es decir, puede crear una coincidencia de grupo numerada con \ (y \) y usar \ 1 en la cadena de reemplazo para decir "reemplazar con el contenido de la coincidencia".
fuente