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


11

Estou aprendendo a gostar do vim, mas uma coisa que ainda não compreendi completamente é a situação de copiar e colar. Em um editor de texto trouxa, eu faria Ctrl- Ccopiar um pedaço de texto e, em seguida, editar / excluir e colar o texto em outro lugar. No entanto, no vim, não posso fazer isso porque, depois de copiar o texto y, a modificação do texto geralmente envolve de xque oblitera o texto original.

Existe alguma maneira de criar de xnão copiar o texto? Ou então, como devo usar esses recursos do vim?

Respostas:


16

Os 9 yanks anteriores são guardados nos registos chamados 1através 9. Você pode recuperar o penúltimo arranque com "1p, o anterior com "2pe assim por diante. O comando :regmostra os registros disponíveis para colagem.

Se você deseja que um puxão dure mais, use um registro de letras .

Para os comandos mais obscuros relacionados ao arranque, comece a ler em :help "no manual.


2
Além disso, o registro 0 contém o último texto arrancado (ao contrário de excluído). Então, referindo-se à pergunta original, você pode arrancar com y, continuar editando inclusive de x, e cole o texto arrancou com"0p
Nefrubyr

@ Nefrubyr, seu comentário acima é realmente a resposta mais simples, mas não é mencionado em nenhuma das três respostas existentes. Talvez você deva adicioná-lo? (I podem se você não faz.)
Wildcard

9

Os comandos que você está falando usam o chamado registro "sem nome". Destina-se apenas a uso a muito curto prazo. "Eu vou arrancar isso daqui e colocá-lo ali".

Quando você deseja se apegar a algo por mais de alguns segundos enquanto faz alguma outra coisa, deve usar registros nomeados.

Por exemplo, " a y ypuxará a linha em que o cursor está no aregistro. Nada o derrotará acidentalmente, a menos que você digite outro comando envolvendo o aregistro. Minutos, horas e até dias depois, você pode digitar " a ppara soltar a cópia arrancada da linha do aregistro abaixo daquele em que o cursor está.

(Para que isso funcione muito bem, você deve ter uma linha como set viminfo='50,\"1000no seu ~/.vimrcarquivo, para dizer a ela para lembrar coisas como registrar o conteúdo nas sessões do Vim. Você pode sair de férias entre puxar e colocar!)

Existem 26 registros nomeados (az). Se você os fornecer como maiúsculas em vez de como mostrado acima, você anexará ao conteúdo atual do registro em vez de substituí-los. Assim, você pode criar algo realmente complexo em, digamos, registrar huma peça de cada vez e depois colocar tudo de uma vez " h p.

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

Além disso, pegue uma caneca Vi .


1

Se você precisar excluir texto com d sem alterar seu registro de arrancamento (por exemplo, você já arrancou o texto que não está pronto para colar antes de excluir outro texto, por exemplo), você pode usar o registro de buraco negro _ .

Se o fizer, "_ddpor 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 teclas do que salvar em um registro de uso geral (qualquer registro de letras) e se você salvar em um registro de uso geral, pelo menos as linhas que você excluiu ainda estarão disponíveis até você substituir o registro, se a necessidade surge.

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


0

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

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.