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

32

Digamos que eu tenha um bloco de texto como este:

// Comment1
// Comentário2
// Comment3

E eu quero acrescentar cada uma dessas linhas ao final das 3 linhas de código correspondentes:

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

Para que o resultado final seja

foo = 1; // Comment1
bar = 2; // Comentário2
baz = 3; // Comment3

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

Tim
fonte
@ Limlim, infelizmente não. De tempos em observações de tempo como o seu aparecer em questões Vim, mas verificar isso: meta.stackexchange.com/q/25925/160504
sidyll
A melhor comunidade para esta pergunta é vi.stackexchange.com #
thinwybk 23/11

Respostas:

36

Utilizar o modo de bloco visual ( Ctrl+ v) para seleccionar um conjunto de linhas, em seguida, quer you deles.

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

Pegar o jeito do posicionamento pode exigir um pouco de prática, mas quando você tiver a habilidade, estará voando. Quando você seleciona um bloco, também pode usar Shift+ Apara acrescentar, por exemplo, espaços ao bloco (ao anexar, o novo texto aparecerá apenas na linha superior, mas quando você pressionar esc, ele aparecerá magicamente em todas as linhas selecionadas) . Da mesma forma, Shift+ ifará o mesmo no início do bloco selecionado em cada linha.

Você precisará limpar as linhas vazias depois.

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

ações
fonte
1
Acho que essa solução :set ve=allé muito versátil. Pessoalmente, uso o plug-in UnconditionalPaste ( vim.org/scripts/script.php?script_id=3355 ), pois ele se adapta às minhas necessidades um pouco melhor.
precisa saber é o seguinte
1

Bem, se é fácil ou não, você me diz. Navegue para // Comment 1, clique ddpara excluir. Navegue até a linha com foo = 1;e pressione p, para colar abaixo da linha. Mova para cima foonovamente e pressione Jpara entrar na linha. Tada.

TLP
fonte
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 direto selecionar com bloco os // // Comment1 "etc. block ( Ctrlv), yank ( y), vá para o final do código bloquear e colar.

Jeet
fonte