Tengo deseos similares a los tuyos. Lo resolví utilizando un enlace de modificador-clave a nivel del sistema.
(Por supuesto, esto es un desastre; pero me parece que vale la pena mantener mi híbrido entrenado en MacVim de los controles de todo el sistema operativo (guardar, nuevo, copiar, pegar) dentro de la línea de comandos vim
s.)
Así es como lo hice:
- Instale Karabiner , que es un programa muy poderoso muy (y una parte esencial de instalación del OS X de cualquier poweruser / programador, IMHO)
-
Habilite "Command_L to Control_L (solo en la Terminal)" :
-
Asigne k -prefijados los controles que coincidan con los comandos de MacVim con los que esté más acostumbrado en la línea de comandos vim
. Por ejemplo, para admitir ⌘S ,
noremap <silent> <C-S> :update<CR>
vnoremap <silent> <C-S> <C-C>:update<CR>
inoremap <silent> <C-S> <C-O>:update<CR>
-
Restaure las secuencias ⌘ esperadas para el propio Terminal.app, encajándolas especialmente en Preferencias del sistema. Por ejemplo, si desea que ⌘N siga controlando las pestañas de la Terminal, en lugar de asignarlo a los archivos vim
, intente:
Ahora, cualquier cosa que no agregue en esta lista, se pasará literalmente a la línea de comando vim
(y, por supuesto, a cualquier otro programa de línea de comandos que use).
Advertencias
Este enfoque tiene varias más desventajas sutiles, que quiero resaltar para cualquiera que esté considerando tomarlo (como lo hago):
-
⌘␣ ya no se asignará al Spotlight de todo el sistema. (Tengo un número abierto en Karabiner, y volveré aquí una vez que tenga una solución provisional).
- Por razones que no puedo determinar, incluso con las exclusiones ⌃W configuradas en Preferencias del sistema, el comportamiento de cierre de pestaña de Terminal.app cambia con esta configuración: ⌘W cerrará pestañas individuales en una ventana; pero si la pestaña actual es la pestaña última , no cerrará la ventana. En cambio, no tiene ningún efecto. Tuve que volver a entrenarme para usar ⇧⌘W para cerrar la ventana si solo queda una pestaña.
- Si te has entrenado para usar ⌃V en MacVim para hacer una selección por bloques, entonces tendrás que volver a entrenarte para usar la alternativa , ⌃Q (o, ahora, ⌘Q ). Además, tendrá que agregar
stty -ixon
en el script de inicio de su shell, como Q se consume de forma predeterminada para realizar una función de control de shell arcaica (una sin uso moderno).
Comportamiento ⌘W alternativo
Además de lo anterior, decidí anular aún más ⌘W como una clave universal de 'cerrar esto', aplicable a múltiples aplicaciones.
En lugar de asignar ⌘W a ‘Cerrar pestaña, 'como se muestra arriba; Personalmente asigno eso a ⇧⌘W (para retener la semántica de "cerrar inmediatamente esta pestaña"). Luego, en cualquier programa dado, asigno ⌃W a algún tipo de cierre -save-quit funcionalidad.
Por ejemplo, en mi .vimrc
:
noremap <C-W> :confirm quit<CR>
vnoremap <C-W> <C-C>:confirm quit<CR>
inoremap <C-W> <C-O>:confirm quit<CR>
... o mi .zshrc
:
function close_tab { exit }
zle -N close_tab_widget close_tab
bindkey '' close_tab_widget
bindkey -M vicmd '' close_tab_widget
Con esos dos fragmentos de código en su lugar, y su Terminal configurada para 'Cerrar si el shell se sale limpiamente', una serie de ⌘W primero saldrá de vim y luego cerrará el shell por completo.
Además, ahora se puede conservar la funcionalidad de salida adicional de los programas: por ejemplo, vim
preguntará antes de salir si los archivos no están guardados (como MacVim); y zsh
preguntará antes de salir si hay trabajos en segundo plano.
Postscript: No directamente relacionado con su pregunta; pero también deberías revisar el ‘Modo Vim ubicuo’ en Karabiner. Es "un poco demasiado" para que lo use todos los días, pero es una idea muy buena y sorprendentemente bien implementada.