Con frecuencia, en los archivos de configuración puedo copiar y pegar un bloque de líneas, luego quiero hacer pequeños cambios en ese bloque. Después de pegar, uso xpara eliminar los caracteres que quiero eliminar, luego paso a pegar el siguiente bloque. Excepto que xpone los caracteres eliminados en el portapapeles, así que tengo que volver a copiar el bloque de líneas.
¿Hay alguna manera de hacer esto sin entrar en modo de inserción?
cut-copy-paste
register
durron597
fuente
fuente

Respuestas:
Sus opciones son:
_. Por ejemplo, para eliminar una línea que escribiría"_dd. Esto se elimina sin afectar el portapapeles."ayyluego para pegar, escribiría"ap"0pCorre
:help registerspara obtener más detalles sobre los primeros 3fuente
xqué usarlo"_xentonces?x, probablemente debería aprender a eliminar eliminaciones como lasdt)que elimina hasta el próximo paréntesis cercanod2Wque elimina las siguientes dos fichas separadas por espacios en blanco. Entonces podrías hacer algo como"_di{dentro de una región arriostrada, que es algo que hago todo el tiempo. En modo normal, esto significa " eliminar todo dentro de esta región arriostrada en el agujero negro "nnoremap x "_xa mi~/.vimrc(explicación aquí: stackoverflow.com/questions/54255/… ).xno pone cosas en el portapapeles, las coloca en un registro . Si no le dice en qué registro colocarlo, lo coloca en el registro sin nombre, que por supuesto sobrescribe los contenidos anteriores. Entonces, en lugar de eso, dígale qué registro usar:," REGISTER xdonde REGISTER es cualquier letra individual. Luego usa el mismo prefijo de registro de cotización ppara pegar desde ese registro. (Nota: las minúsculas reemplazan su contenido; las mayúsculas se agregan).También hay dos registros especiales
"0y"1."0es el ytexto yanked ( ) más reciente , que permanecerá incluso si elimina algún texto con otro comando (like x)."1es el texto eliminado más recientemente, siempre que ese texto no sea pequeño (una línea). Entra un pequeño texto eliminado"-.Finalmente, como señala Steve Vermeulen, puede decirle a vim que no guarde el texto eliminado especificando el registro de agujeros negros
"_.El comando de ayuda relevante es
:help registers.fuente
El
:letcomando le permitirá redefinir un registro con nombre. En la línea de comando de vim, presionando Control+ R dos veces 1 y luego el nombre del registro pegará el contenido del registro en el comando. Luego, puede modificar lo que está pegado y guardar el registro con sus modificaciones.Ejemplo:
"fyytira de toda la línea (yy) en elfregistro ("f).:let @f=', y Control+ r, Control+ rnuevamente, entonces f, y deberías verlo pegar en "Foo Bar", por lo que tu línea de comando ahora se lee:let @f='Foo Bar, con el cursor al final.:let @f='foo bar baz.:let @f='foo bar baz'y golpee Enter.Ahora ha redefinido el contenido del
fregistro para que sea "foo bar baz".(¡Esto también funciona para macros!
:help letPara más información).1 Control + le rpermite insertar un registro cuando ya está en modo de inserción, como si estuviera escribiendo los caracteres. Usar esta secuencia dos veces es importante porque "el texto se inserta literalmente, no como si estuviera escrito. Esto difiere cuando el registro contiene caracteres como
<BS>". - el insert.txt vimdoc,:help i_CTRL-R_CTRL-Rfuente
En relación con el registro de agujeros negros
"_mencionado por @derobert, puede encontrar un screencast útil en http://vimcasts.org/episodes/meet-the-yank-register/fuente
Complemento Reemplazar con registro
http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)
Sugiere el mapeo
gr.grAlternativamente, use
gr<text object>para hacerlo sin una selección visual. dot-repeat es compatible cuando se instalan los complementosrepeat.vimde Tim Pope evisualrepeat.vimIngo Karkat.fuente