Arrancar e colar enquanto incrementa


13

Estou editando um arquivo .sql no Vim:

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

O que estou procurando fazer é puxar a (1, 1),linha e colá-la 137 vezes; no entanto, quero que o segundo número entre parênteses seja incrementado a cada vez. A saída seria semelhante a:

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

Existe uma maneira de fazer isso no Vim e, em caso afirmativo, qual comando eu usaria?

Obrigado!

Respostas:


10

Coloque o cursor na (1, 1),linha e digite:

qaVypt)<C-a>q135@a

Explicação:

qainicia a gravação de uma macro dentro do registro a (você pode escolher outra letra).

Vyp duplica a linha atual, selecionando a linha inteira (V), copiando-a (y) e colando-a abaixo (p).

t) mova o cursor imediatamente antes do próximo parêntese fechado, para que ele fique no segundo número.

<C-a>( Ctrle a) incrementa o número.

q finaliza a gravação da macro.

135@arepete a macro armazenada no registo de 135 vezes.

Edit: Peter Rincker tem um comando mais curto:

qqYpW<c-a>q135@q

As diferenças são:

usa o registrador q para armazenar a macro (mais rápido para digitar do qqque qaporque é a mesma tecla),
copia a linha com apenas um pressionamento de tecla Y(em vez de dois Vy)
e move o cursor para o segundo número com apenas um pressionamento de tecla W(em vez de t)).


4
Golf Vim: qqyypW<c-a>q135@q. Ainda mais curto se você usar em Yvez de yy.
Peter Rincker 11/11

9

Vims recentes aprenderam sobre o incremento de regiões visuais selecionadas, bem como a criação de uma sequência. Então você pode fazer isso depois de colar sua linha 137 vezes:

1) selecionar visualmente o bloco ( Ctrl-V) o segundo 1 a partir da linha 3.

2) pressione gCtrl-A

Gravei um elenco de tela aqui

Isenção de responsabilidade: isso precisa de um Vim 7.4.900 ou mais.


Testado com sucesso no Vim 7.4.826 no Debian / sid.
2018

Seu screencast desapareceu, mas esse método é IMPRESSIONANTE! Obrigado.
David_nash

2

A maneira fácil de entender / fácil de lembrar / fácil de se adaptar a outras situações: fazê-lo: use o plug- in VisIncr (se você preferir usar uma versão que seja realmente agradável com os gerenciadores de pacotes deste século, em vez de lidar com vimballs , você pode obtê-lo no GitHub ). Com isso:

  • vá para a (1, 1),linha e puxe-a:Vy
  • cole 136 vezes: 136p
  • vá para a segunda coluna de 1e marque-a verticalmente:C-vGf)h
  • execute o incremento: :II
  • ler o manual para saber mais sobre as outras coisas: :help visincr.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.