Estoy aprendiendo a que me guste vim, pero una cosa que aún no he aceptado completamente es la situación de copiar y pegar. En un editor de texto muggle Ctrl, Ccopiaría un fragmento de texto y luego editaría / eliminaría y luego pegaría el texto en otro lugar. Sin embargo, en vim no puedo hacer esto porque después de copiar el texto y, la modificación del texto a menudo implica dy xborra mi texto original.
¿Hay alguna forma de hacer dy xno copiar el texto? O de lo contrario, ¿cómo debo usar estas características de vim?
y
, continuar editando incluyendod
yx
, y pegar el texto arrancado con"0p
Los comandos de los que habla utilizan el denominado registro "sin nombre". Está destinado solo para uso a muy corto plazo. "Voy a tirar de esto desde aquí y ponerlo por allá" tipo de cosas.
Cuando desee aferrarse a algo durante más de unos segundos mientras va y hace otra cosa, debe usar registros con nombre.
Por ejemplo, " a y ytirará de la línea en la que se encuentra el cursor en el
a
registro. Nada lo golpeará accidentalmente, a menos que escriba otro comando que involucre ela
registro. Minutos, horas, incluso días después, puede escribir " a ppara soltar esa copia arrancada de la línea dela
registro debajo del que está el cursor.(Para que esto funcione realmente bien, debe tener una línea como
set viminfo='50,\"1000
en su~/.vimrc
archivo, para decirle que recuerde cosas como registrar contenidos en las sesiones de Vim. ¡Luego puede irse de vacaciones entre tirar y poner!)Hay 26 registros con nombre (az). Si los da en mayúsculas en lugar de como se muestra arriba, agrega los contenidos del registro actual en lugar de reemplazarlos. Por lo tanto, puede construir algo realmente complejo, por ejemplo, registrar
h
una pieza a la vez, y luego dejarlo todo de una vez con " h p.Tenga en cuenta que el nombre del registro es opcional. Esto implica que puede haber muchos comandos que ya conoce y usa donde podría estar usando registros con nombre. Digamos
:help registers
en Vim para tener una idea de las posibilidades.Además, consigue una taza Vi .
fuente
Si necesita eliminar texto con d sin alterar su registro de extracción (por ejemplo, ya ha introducido texto que no está listo para pegar antes de eliminar algún otro texto, por ejemplo), puede utilizar el registro de agujero negro
_
.Si lo hace, "_ddpor ejemplo, la línea actual se eliminará inmediatamente y se olvidará.
En realidad, no uso este registro muy a menudo. No requiere menos pulsaciones de teclas que guardar en un registro de propósito general (cualquier registro de letras) y si guarda en un registro de propósito general, al menos, las líneas que ha eliminado aún están disponibles hasta que sobrescriba el registro, si surge la necesidad.
Si se tiende a olvidar de utilizar otro registro al borrar, puede definir una macro envoltorio para dd, por ejemplo, así:
:noremap dd "add
.fuente
Como se señaló en los comentarios a la respuesta aceptada (actual), la forma canónica de hacerlo es usar el registro cero (
"0
). El registro cero siempre contiene el último yank, y no se sobrescribirá cond
yx
, por"0p
lo tanto, siempre coloca lo que haya quitado, independientemente de lo que se haya editado mientras tanto.fuente