Movendo linhas entre janelas divididas no vim

2

Eu tenho dois arquivos, digamos a.txt e b.txt , na mesma sessão do vim e divido a tela, então tenho o arquivo a.txt na janela superior e b.txt na janela inferior.

Eu quero mover linhas aqui e ali de a.txt para b.txt : eu seleciono uma linha com Shift + v , então eu passo para b.txt na janela inferior com Ctrl + w , cole com p , volte para a.txt com < kbd> Ctrl + w e eu posso repetir a operação quando chegar a outra linha que eu queira mover.

Minha pergunta: existe uma maneira mais rápida de dizer vim "enviar a linha em que estou (ou o teste que eu selecionei) para a outra janela" ?

    
por brad 24.11.2015 / 13:28

1 resposta

5

Isso soa como um bom caso de uso para uma macro. Macros são comandos que podem ser gravados e armazenados em um registrador Vim. Cada registro é identificado por uma letra de a a z.

Gravação

De Gravar teclas para trabalhos repetidos - Dicas do Vim

To start recording, press q in Normal mode followed by a letter (a to z). That starts recording keystrokes to the specified register. Vim displays “recording” in the status line. Type any Normal mode commands, or enter Insert mode and type text. To stop recording, again press q while in Normal mode.

Para esta macro em particular, escolhi o registro m (for move) para armazená-lo.

Eu pressionei q m para gravar os seguintes comandos:

  • d d para apagar a linha atual (e salvá-la no registrador padrão)
  • Ctrl W j para ir para a janela abaixo
  • p para colar o conteúdo do registro padrão
  • e Ctrl W k para retornar à janela acima.

Quando eu digitei q para finalizar a gravação da macro, o conteúdo do registro m foi:

dd^Wjp^Wk

Uso

  • Para mover a linha atual, simplesmente digite @ m no modo Normal.
  • Para repetir a macro em uma linha diferente, @ @ pode ser usado para executar a macro usada mais recentemente.
  • Para executar a macro 5 vezes (isto é, mover a linha atual com as quatro linhas abaixo), use 5 @ m ou 5 @ @ .
por 24.11.2015 / 14:17

Tags