vim: Posso fazer * somente * y executar uma cópia?

10

Estou aprendendo a gostar do vim, mas uma coisa que ainda não aceitei é a situação de copiar e colar. Em um editor de texto trouxa eu Ctrl - C copia um pedaço de texto e então edita / apaga e então cola o texto em outro lugar. No entanto, no vim não posso fazer isso porque depois de copiar o texto com y , modificar o texto geralmente envolve d e x que oblitera meu original texto.

Existe alguma maneira de fazer d e x não copiar o texto? Ou, de outra forma, como devo usar esses recursos vim?

    
por John Berryman 21.02.2011 / 19:44

4 respostas

15

Os 9 yanks anteriores são salvos em registradores chamados 1 a 9 . Você pode recordar o próximo penúltimo puxão com "1p , o anterior com "2p e assim por diante. O comando :reg mostra os registros que estão disponíveis para colar.

Se você quiser que um yank dure mais, use um registro de carta .

Para os comandos mais obscuros relacionados com o yank, comece a ler em :help " no manual.

    
por 21.02.2011 / 21:40
9

Os comandos dos quais você está falando usam o chamado registro "sem nome". Destina-se apenas para uso a muito curto prazo. "Eu vou arrancar isso daqui e colocá-lo lá" tipo de coisas.

Quando você quiser segurar algo por mais do que alguns segundos enquanto faz outra coisa, você deve estar usando registros nomeados.

Por exemplo, " a y y vai puxar a linha em que o cursor está no a register.Novy irá sobrescrever acidentalmente, a menos que você digite outro comando envolvendo o a register.Minutes, hours, even days later, você pode digitar " a p para deixar cair a cópia da linha do registro a abaixo do que o cursor está.

(Para que isso funcione muito bem, você deve ter uma linha como set viminfo='50,\"1000 no seu arquivo ~/.vimrc , para que ele se lembre de coisas como registrar conteúdo nas sessões do Vim. Você pode sair de férias entre o yank e o put !)

Existem 26 registros nomeados (a-z). Se você os der como maiúsculos em vez de como mostrado acima, você anexa ao conteúdo do registro atual em vez de substituí-los. Então, você pode construir algo realmente complexo, digamos, registre h uma parte por vez, então plop tudo de uma vez com " h p .

Observe que o nome do registro é opcional. Isto implica que pode haver muitos comandos que você já conhece e usa onde você poderia estar usando registros nomeados. Diga :help registers no Vim para ter uma ideia das possibilidades.

Além disso, obtenha uma caneca Vi .

    
por 21.02.2011 / 21:31
1

Se você precisar apagar o texto com d sem alterar o seu registro de yank (digamos, você já digitou o texto nele que você não está pronto para colar antes de excluir algum outro texto, por exemplo), você pode usar o < em> registro de buraco negro _ .

Se você fizer " _ d d por exemplo, a linha atual será imediatamente excluída e esquecida .

Na verdade, não uso esse registro com muita frequência. Não são necessários menos pressionamentos de tecla do que salvar em um registrador de uso geral (qualquer registrador de carta) e se você salvar em um registrador de uso geral, pelo menos, as linhas que você excluiu ainda estarão disponíveis até que você substitua o registrador. surge a necessidade.

Se você tende a esquecer de usar outro registro ao deletar, você pode definir uma macro invólucro para d d por exemplo como este: :noremap dd "add .

    
por 29.04.2016 / 22:21
0

Como foi apontado nos comentários para a resposta (atual) aceita, a maneira canônica de fazer isso é usar o registrador zero ( "0 ). O zero do registro sempre contém o último yank e não será substituído por d e x , então "0p sempre coloca o que você puxou, independentemente do que foi editado nesse meio tempo.

    
por 04.12.2016 / 01:38

Tags