Como tecer as palavras de uma string em um bloco de strings no vim?

0

Dada uma string e um bloco de strings, por exemplo

String:

Use three words.

Bloco:

This is the first string of another block of strings.
This is the second string of another block of strings.
This is the third string of another block of strings.

Agora quero unir / tecer a string e o bloco palavra por linha, de modo que o novo bloco fique assim:

This is the first string of another block of strings.
Use

This is the second string of another block of strings.
three

This is the third string of another block of strings.
words.

O que eu faço até agora é

:'<,'>s/\s/\r\r\r

em que '<,'>s é um intervalo abrangendo a string Use three words. . Isso me dará cada palavra da string em uma nova linha:

Use


three


words.

Então eu uso Ctrl+v para selecionar o bloco, copiá-lo e colá-lo de forma que eu receba:

This is the first string of another block of strings.
Use
     This is the second string of another block of strings.
three
     This is the third string of another block of strings.
words.

E o eu manualmente trazê-lo para a forma que eu preciso com muito se v , w e x de uso.

Como posso fazer isso de maneira mais eficiente com instruções simples de copiar e colar no vim?

    
por lord.garbage 23.02.2015 / 17:28

2 respostas

2

Você pode enviar o texto a partir do buffer de corte com a colagem de troca - colando em trocas de seleção, portanto, dwVP exclui tudo, menos a palavra excluída.

Comece com

Use three words.
This is the first string of another block of strings.
This is the second string of another block of strings.
This is the third string of another block of strings.

e faça

:normal ggdd    " three-word line in the cut buffer, cursor on first "This" line
:normal pdwVPo<ESC>j  " dwVP is cut a word and exchange-paste it back for the rest of the line
:normal pdwVPo<ESC>j  " do it again
:normal pdwVPo<ESC>j  " again

Por apenas três, eu não daria qq, mas ggddqqpdwVPo<ESC>jq@q@@ é menor.

    
por 24.02.2015 / 11:09
0

Eu começaria como você dividindo a frase em novas linhas, mas depois disso eu

  • Numere cada linha para ambos os blocos
  • Cole uma parte completamente na outra
  • classificar no número
  • remova os números

Isso pode parecer com isso

  • Blok1 - :%s/\s/\r/g
  • Blok1 - %s/^/\=line('.')*1000+1
  • Blok2 - %s/^/\=line('.')*1000
  • Copie todo o Blok2 para o buffer de Blok1
  • sort n
  • %s/\v^\d+
por 24.02.2015 / 08:00