¿Cómo hacer que cortar / copiar / pegar en GVim en Ubuntu funcione con Ctrl + X, Ctrl + C, Ctrl + V?

54

Por defecto, los atajos de cortar / copiar / pegar en GVim en Ubuntu son:

 Cortar "+ x
 Copiar "+ y
 Pegar "+ gP

Me gustaría usar combinaciones de teclas de control en GVim, como las uso en Firefox y otras aplicaciones de gnome. ¿Cómo configuro GVim para que funcione como otras aplicaciones de Gnome?

pcapademic
fuente
Para evitar conflictos con las teclas vim predeterminadas, opte por Ctrl + Shift + Key en lugar de Ctrl + Key
Sheharyar

Respuestas:

50

Agregue las siguientes líneas a su _vimrco.vimrc

source $VIMRUNTIME/mswin.vim
behave mswin

Pero cuidado, el modo visual es CTRL-Q en lugar de CTRL-V.

Para obtener una descripción general de lo que hace mswin.vim, consulte el código fuente de mswin.vim . Se comenta muy bien y si algún comando no está claro, puede buscarlo fácilmente en la ayuda de vim.

Aquí hay una descripción rápida compilada de la fuente:

  • las teclas de retroceso y cursor se ajustan a la línea anterior / siguiente
  • CTRL-X y SHIFT-Del se cortan
  • CTRL-C y CTRL-Insert son Copiar
  • CTRL-V y SHIFT-Insert son Paste
  • Use CTRL-Q para hacer lo que solía hacer CTRL-V
  • Use CTRL-S para guardar, también en modo Insertar
  • CTRL-Z es Deshacer; aunque no en cmdline
  • CTRL-Y es Rehacer (aunque no repetir); aunque no en cmdline
  • Alt-Space es el menú del sistema
  • CTRL-A es Seleccionar todo
  • CTRL-Tab es la siguiente ventana
  • CTRL-F4 es Cerrar ventana

A petición de Nippysaurus: pongo lo siguiente en mi .gvimrc para mostrar Ctrl-V además de Pegar en el menú:

unmenu! Edit.Paste
aunmenu Edit.Paste
nnoremenu 20.360 &Edit.&Paste<Tab>Ctrl-V        "+gP
cnoremenu    &Edit.&Paste<Tab>Ctrl-V        <C-R>+

No lo probé a fondo, solo un chequeo rápido si hizo lo que esperaba. Funciona para mí, espero que funcione para ti ;-)

Ludwig Weinzierl
fuente
1
Entiendo y aprecio los puntos que Manni y Peter Thorin hicieron en los comentarios de la respuesta de Peter Thorin. Mi opinión es que aprendí GVim en Windows, como reemplazo del bloc de notas, y quiero menos fricción. Gracias Ludwig
pcapademic
2
¿Hay alguna manera de cambiar el texto de acceso directo del menú para que coincida con las nuevas teclas de acceso directo?
Nippysaurus
@Nippysaurus: Lo intenté con menutrans en .gvimrc. No lo puse a trabajar, lo volveré a ver por la noche ...
Ludwig Weinzierl
2
Parece que mswin.vimya tiene una behave mswinllamada. ¿Es necesario volver a llamar esto por mi cuenta _vimrc?
Nathan Friend
1
@NathanFriend Ditto. Funciona incluso sin behave mswin, al menos en mi sistema con Vim 8.0.
Mikel
46

Si desea que Cortar / Copiar / Pegar funcione con las teclas de acceso rápido "estándar", pero no desea cambiar ninguna de las otras opciones de configuración en gvim, intente agregar lo siguiente a ~/.vimrc.

vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+

Pegar solo funciona en modo Visual e inserción, por lo que no tiene que preocuparse por el conflicto con Ctrl-V y el Modo Visual en bloque. Esto no es un problema, porque Copiar y Cortar lo pone en modo de inserción, por lo que puede pegarlo inmediatamente después. Si lo prueba, verá que se siente completamente natural.

Se me ocurrió esta configuración después de varias iteraciones de ajustes, y creo que ahora es "perfecta". Si incluso está un poco insatisfecho con su configuración actual de copiar / pegar, pruebe esto y apuesto a que le encantará.

Cogan
fuente
Esto es exactamente lo que estaba buscando. Gracias.
Sean McCleary
2
Después de algunos experimentos y consultas de :help i_ctrl-r_ctrl-o, decidí cambiar imap <C-v> <ESC>"+paa imap <C-v> <C-r><C-o>+; esto funciona como se esperaba cuando el cursor está a la izquierda del primer carácter de una línea, e imita más de cerca el comportamiento "estándar".
Holger
Estoy pensando en cambiar <C-v>a shift + insert que parece ser mucho más rápido en mi máquina. Pero en medio de un proyecto y no tengo ganas de reiniciar vim en este momento. Solo compartiendo
Will
Eres increíble =)
Yugal Jindle
9

Si desea mantener el comportamiento normal de vim pero también permite un uso menos engorroso del portapapeles del sistema, consulte Acceso al portapapeles del sistema . Si desea gvim utilizar el portapapeles del sistema como su búfer predeterminado (por lo que cualquier x, y, p, etc. comando utiliza el portapapeles) a continuación, añadir la siguiente línea a su vimrc:

set clipboard=unnamed

Yo personalmente uso los buffers mucho más dentro de vim que entre vim y el sistema; así que prefiero tener un acceso directo un poco más engorroso que tener el portapapeles de mi sistema constantemente golpeado. Pero es bueno que la opción esté ahí para aquellos que lo prefieran.

jtb
fuente
2

Creo que puede agregar esto con el comando: imap (lo probé solo con Ctrl + X en Windows que funcionó, presionar ctrl + c parece cancelar el comando, por lo que es posible que tenga que hacerlo en vimrc).

:imap <C-X> "+x
:imap <C-C> "+y 
:imap <C-V> "+gP

Si lo agrega a su ~ / .vimrc solo necesita eliminar: delante de imap.

imap solo agrega los enlaces en modo de inserción, por lo que es posible que desee cambiarlo a solo mapa u otra cosa. Mire en el interior :help mapmodede aprender más acerca de la reasignación y esas cosas descorrelación.

¡Buena suerte!

Peter Thorin
fuente
1
Esto debería hacer un poco del truco. Pero es una mala idea hacer eso. Ctrl-V debe entrar en modo visual, Ctrl-C cancelará cualquier comando. Y el truco solo funcionará en su sistema; en una máquina diferente, te perderás.
innaM
1
Estoy de acuerdo en parte con que es una mala idea, no me gustaría usarlo yo mismo, pero si solo eres un usuario casual de gvim, entonces probablemente no te perderás los enlaces que elimines de todos modos.
Peter Thorin
1
¿Por qué usar gvim en primer lugar? ¿Cuánto tiempo te quedarás como usuario ocasional?
INNAM
2
No creo que sea una mala idea. Las personas están acostumbradas a Ctrl + X, etc. y hay miles de millones de otras razones para usar vim.
Ludwig Weinzierl