Vim: como colar um bloco de texto no final de várias linhas?

26

Digamos que eu tenha um bloco de texto assim:

// Comment1
// Comment2
// Comment3

Eu quero acrescentar cada uma dessas linhas ao final de três linhas de código correspondentes:

foo = 1;
bar = 2;
baz = 3;

Para que o resultado final seja

foo = 1; // Comment1
bar = 2; // Comment2
baz = 3; // Comment3

Existe uma maneira fácil de fazer isso no Vim?

    
por Tim 21.06.2011 / 19:44

3 respostas

30

Use o modo de bloqueio visual ( Ctrl + v ) para selecionar um conjunto de linhas, então y ou d eles.

Então, se você selecionou as linhas foo, bar, baz use o modo de bloco visual novamente para selecionar a primeira coluna das linhas de comentário e, em seguida, Shift + p place (ou se você selecionou as linhas de comentário, selecione a última coluna das linhas foo bar baz e p elas no lugar.

Pegar o jeito do posicionamento pode exigir um pouco de prática, mas quando você tiver o talento, estará voando. Quando você tiver um bloco selecionado, você também pode usar Shift + A para anexar, e. espaços para o bloco (quando acrescentar, o novo texto aparecerá apenas na linha superior, mas quando você apertar esc aparecerá magicamente em todas as linhas selecionadas). Da mesma forma, Shift + i fará o mesmo no início do bloco selecionado em cada linha.

Você precisará limpar as linhas vazias depois disso.

Há também um grande episódio de vimcasts mostrando essas técnicas com mais detalhes.

    
por 21.06.2011 / 19:56
1

Bem, se é fácil ou não, você me diz. Navegue até // Comment 1 , pressione dd para excluir. Navegue até a linha com foo = 1; e pressione p para colar abaixo da linha. Mova para foo novamente e clique em J para ingressar na linha. Tada.

    
por 21.06.2011 / 19:49
0

O seguinte fará exatamente o que você descreve:

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@

Dependendo do que você realmente precisa fazer (em oposição ao exemplo), na prática, pode ser mais simples bloquear o bloco "// Comment1" etc. ( Ctrl v ), yank ( y ), vá para o final do bloco de código e cole.

    
por 21.06.2011 / 20:14