vi / vim, como escrever várias linhas em um novo arquivo

30

Eu tenho um monte de linhas que quero gravar em um arquivo diferente.
Como eu posso fazer isso?

Michael Durrant
fonte

Respostas:

44

Você pode fazer

:100,200w filename

É claro que 100.200 é o intervalo de linhas que você deseja escrever.

Bernhard
fonte
Os endereços são inclusivos ou exclusivos?
Marcin
3
Inclusive. Também é inclusivo se você usar padrões:: / ^ something /, / ^ else / w nome do arquivo ou marcas: 'a,' nome do arquivo bw inclui as linhas marcadas 'a' e 'b'.
22612 Bruce Ediger
Oi @ Bernhard, e se eu quiser cortar linhas do arquivo atual.
Ravi Sevta
19

O mais geral:

  1. Mova o cursor para a primeira linha do grupo que você deseja escrever. Acerto m e asequencial. Isso é "marca de referência denominada 'a'".

  2. Mova o cursor para a última linha do grupo, pressione 'm' e 'b'. '

  3. Mude para o modo de comando hit: como uma sequência :'a,'b w filename, pressione return.

Isso funcionará no vi, nvi e vim.

Outro método, funciona no vim mais moderno:

  1. Coloque o cursor na primeira linha do grupo de linhas que você deseja escrever. Clique Vem "para iniciar o bloco visual de linhas".

  2. Mova o cursor para a parte inferior do grupo de linhas. O Vim será destacado com vídeo reverso em cada linha.

  3. Escreva. Clique :para entrar no modo de linha de comando. Isso fornecerá um prompt na parte inferior da tela que se parece com: :'<,'> Isso significa do início do bloco visual até o fim. Digite we o nome do arquivo e pressione Enter.

Você pode adicionar linhas simples ao final do arquivo, colocando o cursor na linha que deseja escrever e digitando: :.w >> filenamee pressionando return.

Os comandos "escrever um grupo de linhas" também funcionam com ">> filename" em vez de apenas "filename". O ">>" faz com que o vi ou o vim sejam anexados ao arquivo, em vez de apenas gravá-lo.

Bruce Ediger
fonte
8

Para adicionar à resposta de Bernhard, você também pode selecionar uma região usando o modo visual e depois entrar :w filename.

noffle
fonte
8

Se você souber os números de linha que deseja escrever, poderá fazê-lo na linha de comando:

vim -c "100,200w new_file.txt" -c wq original_file.txt
Akavall
fonte
1

Um pequeno truque é usar o número da linha relativa. Por exemplo:: + 0, + 99w nome do arquivo, escreva as próximas 100 linhas no nome do arquivo.

Guokai Ma
fonte
Isso não substituirá o arquivo original? O OP gostaria de gravar em um arquivo diferente.
SabreWolfy
1
@SabreWolfy Não; talvez você tenha perdido 'filename' após os números das linhas. Acabei de testar sua versão e funcionou.
felwithe