Quiero permitir que los programas que se ejecutan en la terminal tengan la capacidad de interpretar el atajo de teclado Cmd+ S
Ya he reasignado el enlace predeterminado de los terminales de Cmd+ Sa Ctrl+ Sa través de las Preferencias del sistema del teclado en OS X Lion, por lo que esto ha impedido que la propia aplicación Terminal interprete esa pulsación de tecla, por ejemplo, el cuadro de diálogo Guardar ya no aparece al pulsar Cmd+ S. Sin embargo, algo todavía está agarrando la entrada clave antes de que cualquier programa de terminal pueda hacerlo.
Por ejemplo, cuando se ejecuta bash escribiendo Cmd+ Sen el terminal X11.app, se obtiene lo siguiente:
$s
siendo impreso en la pantalla.
Cuando realizo el mismo Cmd+ Sen Terminal.app, no se imprime nada y el sistema operativo reproduce un sonido de error. No estoy realmente seguro de por qué la pulsación de tecla no llega a la terminal como se esperaba, ¿cómo permito que Cmd+ Spase?
Para obtener más información sobre qué / por qué estoy tratando de hacer esto, consulte la pregunta Bind <Cmd-S> en Vim
Tengo deseos similares a los tuyos. Lo resolví usando una nueva vinculación de tecla modificadora a nivel del sistema.
(Por supuesto, esto es un desastre, pero creo que vale la pena mantener mi híbrido de controles de todo el sistema operativo entrenado por MacVim (guardar, nuevo, copiar, pegar) dentro de la línea de comandos) vim
.
Así es como lo hice:
Habilite "Command_L to Control_L (solo en Terminal)" :
Asignar ⌃controles prefijados que coincidan con los comandos de MacVim a los que esté más acostumbrado en la línea de comandos vim
. Por ejemplo, para apoyar ⌘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 Terminal.app en sí mismo, poniéndolas en mayúsculas en Preferencias del Sistema. Por ejemplo, si aún desea ⌘Ncontrolar las pestañas de la Terminal, en lugar de asignarlas a vim
los archivos, intente:
Ahora, cualquier cosa que no agregue en esta lista, se pasará textualmente a la línea de comandos vim
(y, por supuesto, a cualquier otro programa de línea de comandos que use).
Este enfoque tiene varias desventajas sutiles adicionales , que quiero resaltar para cualquiera que esté considerando tomarlo (como yo):
stty -ixon
el script de inicio de su shell, ya que ⌃Qse consume de forma predeterminada para realizar una función de control de shell arcaica (una sin uso moderno).Además de lo anterior, decidí anular aún más ⌘Wcomo una tecla universal 'cerrar esto', aplicable a múltiples aplicaciones.
En lugar de asignar ⌘Wa 'Cerrar pestaña', como se indicó anteriormente; Personalmente mapeo eso ⇧⌘W(para retener la semántica de "cerrar inmediatamente esta pestaña"). Luego, en cualquier programa dado, mapeo ⌃Wa algún tipo de funcionalidad cerrar-guardar-salir.
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 en su lugar, y su Terminal configurada para 'Cerrar si el shell sale limpiamente', una serie de ⌘Ws primero cerrará vim y luego cerrará el shell por completo.
Además, ahora se puede conservar la funcionalidad adicional al salir de los programas: por ejemplo, vim
preguntará antes de salir si los archivos no se guardaron (al igual que MacVim); y zsh
preguntará antes de salir si hay trabajos de fondo.
Posdata: no está directamente relacionado con su pregunta; pero también debería consultar el 'Modo Vim ubicuo' en Karabiner. Es "un poco excesivo" para mí usarlo todos los días, pero es una idea genial y sorprendentemente bien implementada.
no estoy seguro si esto se aplica, pero stty
usa ctrl-s para detener el terminal hasta que se reinicie con ctrl-q. Sería un poco receloso acerca de enviar ctrl-s a una terminal.
ELLIOTTCABLE
private.xml
para excluir ⌘␣: github.com/tekezo/Files/blob/master/Karabiner/…