TL; DR; versión - ¿Cómo deshago el texto que se pegó desde el búfer de copia de mi sistema operativo sin deshacer otro texto que se escribió desde que entré en modo de inserción?
Descripción más larga:
- Coloque algo en el búfer de copia de su sistema operativo (por ejemplo, resalte algo de texto y haga
Command-c
en Mac) - Entra en modo insertar en vim (
i
) - Escribe algo (por ejemplo
asdf
) - Sin salir del modo de inserción, pegue desde su búfer de copia en vim (
Command-v
en Mac) - Golpear
escape
- Intenta deshacer la pasta (
u
)
Deshace todo desde la última vez que entró en modo de inserción. En otras palabras, se borra asdf
más todo el texto que pegué.
¿Cómo me acaba de deshacer el texto que pega en? ¿Tengo que salir siempre del modo de inserción y volver a ingresar antes de pegar texto solo para tener la opción de deshacer el texto pegado?
:h i_CTRL-G_u
(es decir, "romper secuencia de deshacer, comenzar nuevo cambio" en modo de inserción).En MacVim, debe desasignar el
Edit > Paste
elemento del menú para anular el acceso directo, luego puede reasignar Cmd-V (D-v
en el lenguaje MacVim) al comando apropiado en cada modo. Agregué esto a mi~/.gvimrc
y ahora todo funciona maravillosamente:El
<C-g>u
es necesaria sólo en el modo de inserción para fijar el historial de deshacer; lanoremap
ycnoremap
son simplemente para restaurar el comportamiento de pegado predeterminada en los modos normal y de mando.Gracias a Ingo Karkat por señalarme en la dirección correcta aquí.
fuente
En realidad, la solución es que Escprimero tiene que ir al modo de comando (por ejemplo ) y volver a ingresar al modo de inserción, pero solo funciona si escribo manualmente, pero parece que "aleatoriamente" deja de funcionar si lo pruebo
~/.vimrc
. Google no ayuda en absoluto.Paso mucho tiempo tratando de solucionar este problema y descubro la razón en mi caso:
No asigne la misma clave de pegado con la clave de pegado existente del terminal
por ejemplo, Ctrl+Shift+Vva a pegar en mi terminal Konsole, pero si le asigno esta clave
<C-S-v>
en~/.vimrc
el "deshacer por sólo una sola pasta en lugar de varias pastas" no va a trabajar.En mi caso, tengo que usar en
<C-v>
lugar de<C-S-v>
:Su caso puede ser diferente, pero el punto es el mismo: no asigne los mismos conflictos de clave de pegado con la clave de emulador de terminal existente.
He demostrado al 100% esta conclusión configurando mi clave de pegado de terminal Ctrl+Vy ahora
<C-v>
dejo de funcionar pero<C-S-v>
funciona.Tenga en cuenta también que el vim es demasiado sensible y extraño. Me doy cuenta de que tengo que usar
i
y luego 2 teclas de derecha manualmente para que funcione en la posición correcta del cursor, eso significa que tengo que poneri
y 2 teclas de derecha~/.vimrc
también. Su caso puede ser diferente, pero el punto es el mismo, asegúrese de que las teclas + el orden en ~ / .vimrc coincidan al 100% con lo que escribe manualmente.fuente