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 x
para eliminar los caracteres que quiero eliminar, luego paso a pegar el siguiente bloque. Excepto que x
pone 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."ayy
luego para pegar, escribiría"ap
"0p
Corre
:help registers
para obtener más detalles sobre los primeros 3fuente
x
qué usarlo"_x
entonces?x
, probablemente debería aprender a eliminar eliminaciones como lasdt)
que elimina hasta el próximo paréntesis cercanod2W
que 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 "_x
a mi~/.vimrc
(explicación aquí: stackoverflow.com/questions/54255/… ).x
no 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 x
donde 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
"0
y"1
."0
es el ytexto yanked ( ) más reciente , que permanecerá incluso si elimina algún texto con otro comando (like x)."1
es 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
:let
comando 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:
"fyy
tira de toda la línea (yy
) en elf
registro ("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
f
registro para que sea "foo bar baz".(¡Esto también funciona para macros!
:help let
Para 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-R
fuente
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
.gr
Alternativamente, use
gr<text object>
para hacerlo sin una selección visual. dot-repeat es compatible cuando se instalan los complementosrepeat.vim
de Tim Pope evisualrepeat.vim
Ingo Karkat.fuente