Le mappage Ctrl + s ne fonctionne pas

9

J'essaie de mapper Ctrl+ spour enregistrer mon fichier mais cela ne fonctionne pas.

Mes cartographies:

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

En mode insertion, je vois /:echo "Saved"dans le coin inférieur au lieu de savedet quand je suis en mode normal, je vois la même chose. Qu'est-ce que je fais mal?

C'est tout en haut de mon vimrc donc mon autre code ne devrait pas causer de problème. J'exécute Vim à l'intérieur du terminal OSX.

iProgramme
la source
Utilisez-vous Vim depuis un terminal? Control + S est également un raccourci clavier spécial repris par le terminal, ce qui signifie "arrêter la sortie" ... Quand j'essaie les 2 raccourcis clavier ci-dessus de gVim, cela semble fonctionner.
Martin Tournoij
' I am also running vim inside the Mac terminal.' Oui, je lance vim via le terminal. Serait-il préférable d'utiliser Alt au lieu de Ctrl ou Cmd?
iProgram
Soit dit en passant,
Pour lier la sauvegarde à Cmd-S sur OSX, vous pouvez essayer de mapper depuis <D-s>bien que je ne sois pas sûr que cela fonctionne dans le terminal Vim, et c'est déjà un défaut dans MacVim de toute façon!
joeytwiddle

Réponses:

7

Pour garantir que cette solution de contournement s'exécute même lorsque Vim est démarré par un outil distinct (tel que git), j'ai ceci dans mon ~/.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

Cela a fonctionné pour moi sur Linux, GVim, Mac OS X et MacVim.

Mises en garde:

  • Sous Windows, ou tout autre système d'exploitation dépourvu de la sttycommande, ce qui précède générera probablement des erreurs à chaque démarrage de Vim! ( silent!pourrait couper le son.)

  • Si votre shell avait déjà ce paramètre TTY désactivé, bien sûr, la commande VimLeaveautomatique le réactivera! Détecter et restaurer les paramètres actuels est un avantage avec l'approche @ aPyDeveloper.


Une combinaison de cela et de la solution @ aPyDeveloper, qui gère les problèmes de compatibilité sous OS X et Windows, serait géniale à publier ici et / ou sur le Wiki!

Pour éviter de choisir entre stty -get stty --save, vous pouvez essayer le test suivant uniquement pour l' ixoption.

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

Merci à @Carpetsmoker pour les liens.

L'ajout de ce script a bash_profilefonctionné pour moi.

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

Voici un lien pour cela. http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files

J'ai également dû supprimer l'espace avant:

iProgramme
la source