move a seleção para um arquivo separado

10

Com o vim, como posso mover um pedaço de texto para um novo arquivo? No momento, faço isso:

  • selecione o texto
  • use :w new_file
  • selecione o texto novamente
  • elimine o texto

Existe uma maneira mais eficiente de fazer isso?

Antes

a.txt

sometext
some other text
some other other text
end

Depois de

a.txt

sometext
end

b.txt

some other text
some other other text
    
por greg0ire 23.01.2013 / 14:29

4 respostas

4

Como sobre esses comandos personalizados:

:command! -bang -range -nargs=1 -complete=file MoveWrite  <line1>,<line2>write<bang> <args> | <line1>,<line2>delete _
:command! -bang -range -nargs=1 -complete=file MoveAppend <line1>,<line2>write<bang> >> <args> | <line1>,<line2>delete _
    
por 23.01.2013 / 16:20
6

Por "mover um pedaço de texto para um novo arquivo", presumo que você queira cortar esse pedaço de texto do arquivo atual e criar um novo arquivo contendo apenas esse texto.

Vários exemplos:

  • :1,1 w new_file para criar um novo arquivo contendo apenas o texto da linha número 1
  • :5,50 w newfile para criar um novo arquivo contendo o texto da linha 5 para a linha 50
  • :'a,'b w newfile para criar um novo arquivo contendo o texto da marca a para marcar b
    • defina suas marcas usando ma e mb onde você quiser

O texto acima apenas copia o texto e cria um novo arquivo contendo esse texto. Você precisará excluir depois.

Isso pode ser feito usando o mesmo intervalo e o comando d :

  • :5,50 d para excluir o texto da linha 5 para a linha 50
  • :'a,'b d para excluir o texto da marca a para marcar b

Ou usando dd para o caso de linha única.

Se você, em vez disso, selecionar o texto usando o modo visual e, em seguida, pressionar : enquanto o texto estiver selecionado, você verá o seguinte na linha de comando:

:'<,'>

Qual indica o texto selecionado. Você pode então expandir o comando para:

:'<,'>w >> old_file

Que irá anexar o texto a um arquivo existente. Em seguida, exclua como acima.

Um forro:

:2,3 d | new +put! "

A divisão:

  • :2,3 d - excluir linhas de 2 a 3
  • | - tecnicamente isso redireciona a saída do primeiro comando para o segundo comando, mas como o primeiro comando não produz nada, estamos apenas encadeando os comandos juntos
  • new - abre um novo buffer
  • +put! " - coloca o conteúdo do registrador sem nome ( " ) no buffer
    • O estrondo ( ! ) está lá para que o conteúdo seja colocado antes da linha atual. Isso faz com que e linha vazia no final do arquivo. Sem ele, há uma linha vazia na parte superior do arquivo.
por 23.01.2013 / 15:08
0

Selecione o texto no modo visual, então pressione y para "puxar" para o buffer (copiar) ou d para "deletar" para o buffer (corte) ).

Então você pode :split <new file name> dividir sua janela vim, e pressionar p para colar o texto arrancado. Escreva o arquivo normalmente.

Para fechar a divisão novamente, passe a divisão que deseja fechar :q .

    
por 23.01.2013 / 14:32
0

Com base na resposta do @ embedded.kyle e este Q & A , acabei com este forro para anexar um seleção para um arquivo e excluir do arquivo atual. Depois de selecionar algumas linhas com Shift+V , clique em : e execute:

'<,'>w >> test | normal gvd 

A primeira parte acrescenta linhas selecionadas. O segundo comando entra no modo normal e executa gvd para selecionar a última seleção e, em seguida, excluir.

    
por 09.04.2018 / 20:49

Tags