In vim, wie man "Speichern" Strg-S zuordnet

75

In Vim, wie kann ich "save" (Karte :w) zu ctrl- s.

Ich versuche, den Befehl "zuzuordnen", aber xterm friert ein, wenn ich ctrl- drücke s.

Wenn ich geben ctrl- v, ctrl- snoch sehe ich nur eine ^, nicht ^S.

Ratheesh Pai
quelle
8
Was ist los mit Vims üblichem: w? Ich vermute , ctrl-s Ihre xterm friert , weil es alle Ausgaben in Terminals gefriert. ('stty -ixon' könnte helfen)
Yoni H
17
Das Drücken von (Escape Shift Doppelpunkt w Enter) dauert etwa dreimal länger als das Drücken von Strg-s. Obwohl ich festgestellt habe, dass das Drücken von Strg-s mehr zum Karpaltunnel führt als zum Eintreten des Esc-Shift-Doppelpunkts, verteilt es die Belastung, zwei Optionen zum Speichern zu haben.
Eric Leschinski

Antworten:

138

Ctrl+ Sist ein allgemeiner Befehl für Terminals, die Aktualisierung zu beenden. Es war eine Möglichkeit, die Ausgabe zu verlangsamen, damit Sie sie auf Terminals lesen können, die keinen Scrollback-Puffer haben. Finden Sie zuerst heraus, ob Sie Ihr xterm so konfigurieren können , dass es Ctrl+ San die Anwendung weiterleitet . Dann funktionieren diese Kartenbefehle:

noremap <silent> <C-S>          :update<CR>
vnoremap <silent> <C-S>         <C-C>:update<CR>
inoremap <silent> <C-S>         <C-O>:update<CR>

Übrigens: Wenn Ctrl+ SIhr Terminal einfriert, geben Sie Ctrl+ ein Q, um es wieder in Betrieb zu nehmen.

Ned Batchelder
quelle
7
funktioniert mit OSX, iTerm2, ZSH, oh-my-zsh, wenn Sie "stty -ixon" in die .zshrc-Datei aufnehmen
Richard
4
"stty -ixon" in Ihrer .bashrc ist auch für Terminal.app mit bash erforderlich.
Jonathan Potter
@ ned-batchelder Ist es in Ordnung, wenn Sie stattdessen Strg-W zuordnen? Wird es ein Problem mit vim- oder terminal-Standardbefehlen geben?
Thi G.
@ ThiG. <C-W>wird normalerweise für Fensteraufteilung und Fensterbefehle verwendet
Juve
5
Übrigens war der Grund, warum mich die Suchmaschinen hier gelandet haben, danke.
Timothy LJ Stewart
69

Unter Linux mit VI möchten Sie drücken Ctrl- Sund Ihr Dokument speichern lassen. Dies hat bei mir funktioniert . Fügen Sie die folgenden drei Zeilen in Ihre .vimrc-Datei ein . Diese Datei sollte sich in Ihrem Home-Verzeichnis befinden: /home/el/.vimrc Wenn diese Datei nicht vorhanden ist, können Sie sie erstellen.

:nmap <c-s> :w<CR>
:imap <c-s> <Esc>:w<CR>a

In der ersten Zeile steht: Durch Drücken von Ctrl- Sinnerhalb eines Dokuments wird eine :w <enter>Tastaturkombination ausgeführt.

In der zweiten Zeile heißt es: Drücken von Ctrl- Sinnerhalb eines Dokuments im Einfügemodus kehrt in den normalen Modus zurück, führen Sie a aus :w <enterund drücken Sie a, um in den Einfügemodus zurückzukehren. Ihr Cursor kann sich während dieses Ereignisses bewegen.

Möglicherweise stellen Sie fest, dass durch Drücken von Ctrl- Sein 'XOFF' ausgeführt wird, das den Empfang von Befehlen verhindert (wenn Sie ssh verwenden).

Um dies zu beheben, platzieren Sie diese beiden Befehle in Ihrem ~ / .bash_profile

bind -r '\C-s'
stty -ixon

Dadurch wird die Bindung von Ctrl- Sdeaktiviert und alle XOFF-Bildschirmmeldungen beim Drücken von Ctrl- entfernt S. Hinweis: Nachdem Sie Änderungen an Ihrem .bash_profile vorgenommen haben, müssen Sie es mit dem Befehl 'source .bash_profile' oder logout / login erneut ausführen.

Weitere Informationen: http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files

Eric Leschinski
quelle
3
Für das Gnome-Terminal war es genug, 'stty -ixon' zu meiner .bashrc hinzuzufügen.
DavidG
1
: imap <cs> <Esc>: w <CR> a <----- Dies funktioniert nicht wie erwartet, wenn am Anfang der Zeile steht ('a' wird angehängt anstatt eingefügt, was ich tun würde erwarten von). Gibt es eine Möglichkeit, 'a' oder 'i' zu machen, je nachdem, wo sich der Cursor befindet?
Alexander am
Könnten Sie bitte erklären, warum Sie 2 imapBefehle verwenden? Es scheint, als ob Sie nur brauchen imap <c-s> <Esc>:w<CR>a. Vielen Dank.
Gwintrob
Ich dachte, die 2. imap-Befehlszeile hätte Bedeutung, aber bei näherer Betrachtung tut sie nichts. Ausgezeichneter Fang, ich habe die lahme Linie entfernt.
Eric Leschinski
1
Gibt es einen Grund, warum Sie ein anstelle von i verwenden?
DemiImp
11

vim

# ~/.vimrc
nnoremap <c-s> :w<CR> # normal mode: save
inoremap <c-s> <Esc>:w<CR>l # insert mode: escape to normal and save
vnoremap <c-s> <Esc>:w<CR> # visual mode: escape to normal and save

zsh (wenn Sie verwenden)

# ~/.zshrc
# enable control-s and control-q
stty start undef
stty stop undef
setopt noflowcontrol

Bash (wenn Sie verwenden)

# ~/.bash_profile or ~/.bashrc
# enable control-s and control-q
stty -ixon
Chun Yang
quelle
Sollte es nicht sein vnoremap <c-s> <Esc>:w<CR> # visual mode: escape to normal and save?
BlackBeltScripting
10

Mac OSX Terminal + zsh?

In Ihrem .zprofile

alias vim="stty stop '' -ixoff; vim"

Warum? Was ist los? Siehe hier , aber im Grunde genommen wird für die meisten Terminals ctrl+s bereits für etwas verwendet, also dieser Alias ​​vim, damit wir diese Zuordnung deaktivieren, bevor wir vim ausführen.

In Ihrer .vimrc

nmap <c-s> :w<cr>
imap <c-s> <esc>:w<cr>a

Warum? Was ist los? Dieser sollte ziemlich offensichtlich sein, wir ordnen ctrl+s nur verschiedenen Tastenanschlägen zu, je nachdem, ob wir uns im normalen Modus oder im Einfügemodus befinden.

Absichten
quelle
Sie, mein Herr, haben meinen Tag gerettet
Xechelonx