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?


@ 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.


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.


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.

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.