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?

Respostas:


44

Você pode fazer

:100,200w filename

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


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.


8

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


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

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.


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