Tirar y pegar mientras se incrementa


14

Estoy editando un archivo .sql en Vim:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),

Lo que estoy buscando hacer es tirar de la (1, 1),línea y pegarla 137 veces; sin embargo, quiero que el segundo número entre paréntesis se incremente cada vez. La salida se vería así:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),
(1, 2),
(1, 3),
...
(1, 137),

¿Hay alguna manera de hacerlo en Vim y, de ser así, qué comando usaría?

¡Gracias!

Respuestas:


11

Coloque el cursor en la (1, 1),línea y luego escriba:

qaVypt)<C-a>q135@a

Explicación

qacomienza la grabación de una macro dentro del registro a (puede elegir otra letra).

Vyp duplica la línea actual, seleccionando toda la línea (V), copiándola (y) y luego pegándola debajo (p).

t) mueva el cursor justo antes del siguiente paréntesis cerrado, de modo que esté en el segundo número.

<C-a>( Ctrly a) incrementa el número.

q finaliza la grabación de la macro.

135@avuelve a reproducir la macro almacenado en el registro a 135 veces.

Editar: Peter Rincker tiene un comando más corto:

qqYpW<c-a>q135@q

Las diferencias son:

utiliza el registro q para almacenar la macro (más rápido de escribir qqque qaporque es la misma tecla),
copia la línea con solo una pulsación de tecla Y(en lugar de dos Vy),
y mueve el cursor al segundo número con solo una pulsación de tecla W(en su lugar de t)).


44
Campo de Vim: qqyypW<c-a>q135@q. Incluso más corto si lo usa en Ylugar de yy.
Peter Rincker

9

Vims recientes han aprendido sobre el incremento de regiones visuales seleccionadas, así como la creación de una secuencia. Entonces puede hacer esto después de pegar su línea 137 veces:

1) seleccione visualmente en bloque ( Ctrl-V) el segundo 1 a partir de la línea 3.

2) presione gCtrl-A

He grabado un elenco de pantalla aquí

Descargo de responsabilidad: esto necesita un Vim 7.4.900 más o menos.


Probado con éxito en Vim 7.4.826 en Debian / sid.
Dubu

¡Su screencast ha desaparecido pero este método es INCREÍBLE! Gracias.
david_nash

2

La forma fácil de entender / fácil de recordar / fácil de adaptar a otras situaciones para hacerlo: use el complemento VisIncr (si prefiere usar una versión que realmente sea agradable con los administradores de paquetes de este siglo en lugar de tratar con vimballs , puedes obtenerlo de GitHub ). Con eso:

  • ve a la (1, 1),línea y tira de ella:Vy
  • pégalo 136 veces: 136p
  • vaya a la segunda columna de 1y márquelo verticalmente:C-vGf)h
  • ejecuta el incremento: :II
  • leer el manual para obtener información sobre las otras golosinas: :help visincr.

1

Jugaría con g^a.

Tratar 137i0^v137kg^a.


1
¡Bienvenidos a Vi y Vim ! He formateado tu respuesta usando Markdown. Sería aún mejor si edita para explicar cómo esto responde la pregunta de los OP.
D. Ben Knoble
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.