Das Zuordnen von Strg + s funktioniert nicht

9

Ich versuche, Ctrl+ zuzuordnen s, um meine Datei zu speichern, aber es funktioniert nicht.

Meine Zuordnungen:

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

Im Einfügemodus sehe ich /:echo "Saved"in der unteren Ecke statt savedund im normalen Modus sehe ich dasselbe. Was mache ich falsch?

Dies befindet sich ganz oben in meinem vimrc, sodass mein anderer Code kein Problem verursachen sollte. Ich verwende Vim im OSX-Terminal.

iProgramm
quelle
Verwenden Sie Vim von einem Terminal aus? Control + S ist auch eine spezielle Tastenkombination, die vom Terminal erfasst wird, was "Ausgabe stoppen" bedeutet ... Wenn ich die obigen 2 Tastenkombinationen von gVim versuche, scheint es zu funktionieren.
Martin Tournoij
' I am also running vim inside the Mac terminal.' Ja, ich laufe vim über das Terminal. Wäre es besser, Alt anstelle von Strg oder Cmd zu verwenden?
iProgramm
Diese Frage wurde übrigens oft gestellt ;-) Ich habe keine Zeit, eine Antwort zu schreiben, aber dieser Link sollte Ihnen helfen ...
Martin Tournoij
Um die Speicherung an Cmd-S unter OSX zu binden, können Sie versuchen, eine Zuordnung <D-s>vorzunehmen, obwohl ich nicht sicher bin, ob dies in Terminal Vim funktioniert, und es ist ohnehin bereits eine Standardeinstellung in MacVim!
Joeytwiddle

Antworten:

6

Um sicherzustellen, dass diese Problemumgehung auch dann ausgeführt wird, wenn Vim von einem separaten Tool (z. B. git) gestartet wird , habe ich Folgendes in meinem ~/.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

Dies hat bei mir unter Linux, GVim, Mac OS X und MacVim funktioniert.

Vorsichtsmaßnahmen:

  • Unter Windows oder anderen Betriebssystemen, denen der sttyBefehl fehlt , werden bei jedem Start von Vim wahrscheinlich Fehler auftreten! ( silent!könnte das stumm schalten.)

  • Wenn in Ihrer Shell diese TTY-Einstellung bereits deaktiviert war, VimLeaveschaltet der Autobefehl sie natürlich wieder ein! Das Erkennen und Wiederherstellen der aktuellen Einstellungen ist beim Ansatz von @ aPyDeveloper von Vorteil.


Eine Kombination aus dieser und der Lösung von @ aPyDeveloper, die Kompatibilitätsprobleme unter OS X und Windows behandelt, kann hier und / oder im Wiki veröffentlicht werden!

Um die Wahl zwischen stty -gund zu vermeiden stty --save, können Sie den folgenden Test nur für die ixOption versuchen .

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

Vielen Dank an @Carpetsmoker für die Links.

Das Hinzufügen dieses Skripts bash_profilehat bei mir funktioniert.

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

Hier ist ein Link dazu. http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files

Ich musste auch das Leerzeichen vor dem entfernen:

iProgramm
quelle