Deshacer pegar en vim

Deshacer pegar en vim

Sé acerca de uy Ctrl-rpara deshacer y rehacer. Pero ume lleva de regreso al último estado guardado. Quiero saber como deshacer un pegado cmd-v.

Por ejemplo,

I am typing here bla bla bla, [link to website](here I paste a wrong http link 
with cmd-v)

Entonces quiero volver a,

I am typing here bla bla bla, [link to website](

¿Hay alguna manera de hacerlo en vim?

Gracias de antemano.

Respuesta1

Descargo de responsabilidad: ignoro por completo cómo los teclados Apple con cmd en lugar de ctrl interactúan con vim, por lo que es posible que deba cambiar o ajustar algo de esto.

La forma correcta de pegar en vim es usar el pcomando. Para pegar desde el portapapeles del sistema, usaría "*p. Entonces, la forma estándar de hacer las cosas sería salir del modo de inserción y "*pa( apor supuesto, vuelve a ingresar al modo de inserción).

Si desea tener un atajo de teclado para usar en el modo de inserción, parecería natural hacer algo como:

inoremap <c-v> <esc>"*pa

(Es decir: escriba lo que hay allí en lugar de presionar ctrl+v y escapar).

A primera vista parecería asídeberíaproporcione el comportamiento que desea: simplemente está automatizando el proceso de pegado estándar que describí anteriormente. Pero no es así. Vim trata todas las partes de un comando como parte del mismo bloque de deshacer, y para vim el modo de inserción en sí es una especie de comando.

Sin embargo, puedes iniciar manualmente un nuevo bloque de deshacer mientras estás en el modo de inserción usando Ctrl+g seguido de u(sí, lo sé, esta combinación de teclas parece bastante poco parecida a Vim, pero ahí lo tienes). Entonces, puedes modificar la reasignación de claves de esta manera:

inoremap <c-v> <c-g>u<esc>"*pa

Todo esto funcionará con ctrl+v (lo acabo de probar en Windows y funciona allí, al menos), es posible que necesites usar algo diferente (que no sea <c-v>) para los accesos directos basados ​​en cmd dentro de vim. Si estás usando un teclado Apple, eso implica OSX; si cmd+v es un atajo del sistema, no estoy seguro de qué tendría prioridad. Algunas búsquedas superficiales en Google sugieren que es posible que deba modificar alguna configuración a nivel del sistema operativo para que cmd funcione correctamente con vim.

Respuesta2

En MacVim, debe desasignar el Edit > Pasteelemento del menú para anular el acceso directo, luego puede reasignar Cmd-V ( D-ven el lenguaje de MacVim) al comando apropiado en cada modo. Agregué esto a mi ~/.gvimrcy ahora todo funciona de maravilla:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

Sólo es <C-g>unecesario en el modo de inserción para corregir el historial de deshacer; y noremapson cnoremapsimplemente para restaurar el comportamiento de pegado predeterminado en los modos normal y de comando.

Gracias a evilsoup por indicarme la dirección correcta aquí.

información relacionada