vi [m] leu o intervalo de linhas de outro arquivo


9

No Linux, editando file_Bno vim, quero adicionar a linha 10-25 de file_A. Exemplo: um tem um conjunto inteiro de documentos HTML com o mesmo cabeçalho e sim, pode-se criar um modelo e começar a partir daí, mas ainda assim:

Estou procurando uma maneira simples [e elegante] de inserir um intervalo de linhas de um arquivo e adicioná-lo ao arquivo que estou editando no momento. No vim.

As soluções que encontrei até agora, mas não são exatamente o que estou procurando, são

  • dentro file_B do comando :read file_Aadicionará * todo o arquivo_A * no arquivo_B. Demais
  • existe copiar e colar dentro do vim - mas, para isso, deve-se abrir file_A
  • dentro de file_A :10,25w! file_B'enviará' o intervalo de linhas especificado para file_B.
    Isso parece muito próximo de copiar e colar
  • é possível abrir várias janelas no vim
    Mas, como trabalho em uma tela de 8 polegadas, várias janelas dificultam a orientação

Como não consegui encontrar uma solução confortável, pergunto-me se apenas entendi mal alguma coisa ou as maneiras que encontrei até agora são comumente usadas e tomadas como a maneira padrão.


Veja esta pergunta SO , a resposta de @ Bernhard foi a resposta aceita para essa pergunta por lá também!
Slm

@ slm Eu estava ciente desta resposta, mas como não a coloquei na lista de soluções que encontrei, obrigado pela dica. Ainda estou procurando por algo construído dentro vim. Mas isso parece fora de alcance. E realmente me pergunto se isso só é possível através de comandos externos, porque, até vimagora, cheguei a poucas restrições até aqui.
erch

@ cellar.dweller Você pode criar algum tipo de função, se realmente quiser algo mais fácil.
Bernhard

Respostas:


11

A melhor solução que posso encontrar é ligar sede combinar externamente isso com:read !

:r !sed -n -e '10,25p' fileB

Não funciona aqui - mas por quê? Primeiro, obrigado por sua ajuda. O que eu recebo é 'E34: nenhum comando anterior' [traduzido aproximadamente] como se o vim tentasse repetir um comando. Pelo que entendi, passo a passo: :ré a abreviação de readin vim. Eu não tenho conhecimento sobre sede como usá-lo. Claro, eu substituído fileBcom o arquivo real :)
erch

@ cellar.dweller Minha resposta foi atualizada por alguém, obtive o mesmo erro por esse código. Eu rolei de volta. Veja se isso funciona para você.
Bernhard

@ Stephanie É bom encurtar as respostas, mas sua sugestão não funcionou.
21413 Bernhard

Agora funciona! Para adicionar um pouco de myslef: começando com :10retc. colocará o conteúdo da linha dez em [enquanto houver ]. Funciona perfeitamente agora. Ótimo. Muito obrigado!
erch

2
OPA, desculpe. Esqueceu a expansão do vim! Deveria ter sido :r!sed 10,25\!d. Observe que você não precisa das -easpas ou das cotações, para que possa escrevê-las :r!sed -n 10,25ptambém. :r sed '10,$\!d;25q'para evitar a leitura do arquivo inteiro.
Stéphane Chazelas
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.