La asignación de Ctrl + s no funciona

9

Estoy tratando de asignar Ctrl+ spara guardar mi archivo, sin embargo, no funciona.

Mis mapeos:

map <C-s> :w <CR> :echo "Saved" <CR>
imap <C-s> <Esc> :w <CR> :echo "Saved" <CR> i

Cuando estoy en modo de inserción, veo /:echo "Saved"en la esquina inferior en lugar de savedy cuando estoy en modo normal, veo lo mismo. ¿Qué estoy haciendo mal?

Esto está en la parte superior de mi vimrc, por lo que mi otro código no debería estar causando un problema. Estoy ejecutando Vim dentro de la Terminal OSX.

iProgram
fuente
¿Estás usando Vim desde una terminal? Control + S también es una combinación de teclas especial recogida por el terminal que significa "detener la salida" ... Cuando intento las 2 combinaciones de teclas anteriores de gVim, parece funcionar.
Martin Tournoij
' I am also running vim inside the Mac terminal.' Sí, estoy ejecutando vim a través de la terminal. ¿Sería mejor usar Alt en lugar de Ctrl o Cmd?
iProgram
Esta pregunta se ha hecho muchas veces , por cierto ;-) No tengo tiempo para escribir una respuesta, pero ese enlace debería ayudarte ...
Martin Tournoij
Para vincular guardar en Cmd-S en OSX, puede intentar mapear, <D-s>aunque no estoy seguro de si eso funciona en el terminal Vim, ¡y de todos modos ya es un valor predeterminado en MacVim!
joeytwiddle

Respuestas:

7

Para garantizar que esta solución alternativa se ejecute incluso cuando Vim se inicia con una herramienta separada (como git), tengo esto en mi ~/.vimrc:

" Allow us to use Ctrl-s and Ctrl-q as keybinds
silent !stty -ixon

" Restore default behaviour when leaving Vim.
autocmd VimLeave * silent !stty ixon

Esto me ha funcionado en Linux, GVim, Mac OS X y MacVim.

Advertencias:

  • En Windows, o en cualquier otro sistema operativo que no tenga el sttycomando, lo anterior probablemente arrojará errores cada vez que se inicie Vim. ( silent!podría silenciar eso)

  • Si su shell ya tenía esta configuración TTY deshabilitada, ¡por supuesto, el VimLeavecomando automático lo volverá a encender! Detectar y restaurar la configuración actual es una ventaja con el enfoque de @ aPyDeveloper.


¡Una combinación de esto y la solución de @ aPyDeveloper, que maneja las preocupaciones de compatibilidad bajo OS X y Windows, sería genial para publicar aquí y / o en el Wiki!

Para evitar elegir entre stty -gy stty --save, puede probar la siguiente prueba solo para la ixopción.

call system("stty -a | grep '\( \|^\)ixon\>' >/dev/null")
let g:ix_at_startup = (v:shell_error == 0)
joeytwiddle
fuente
2

Gracias a @Carpetsmoker por los enlaces.

Agregar este script en bash_profilefuncionó para mí.

vim()
{
    # osx users, use stty -g
    local STTYOPTS="$(stty --save)"
    stty stop '' -ixoff
    command vim "$@"
    stty "$STTYOPTS"
}

Aquí hay un enlace para eso. http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files

También tuve que eliminar el espacio antes de:

iProgram
fuente