Ich möchte Programmen, die im Terminal ausgeführt werden, die Möglichkeit geben, die Tastenkombination Cmd+ zu interpretieren S
Ich habe bereits die Standardbindung der Terminals von Cmd+ Szu Ctrl+ Süber die Tastatursystemeinstellungen in OS X Lion neu zugeordnet, sodass die Terminal-App selbst diesen Tastendruck nicht mehr interpretiert, z. B. wird der Speicherdialog nicht mehr angezeigt, wenn Cmd+ gedrückt wird S. Irgendetwas greift jedoch immer noch nach der Tasteneingabe, bevor es ein Terminalprogramm kann.
Wenn Sie beispielsweise bash ausführen, führt die Eingabe von Cmd+ Sim X11.app-Terminal zu Folgendem:
$s
auf dem Bildschirm gedruckt werden.
Wenn ich dasselbe Cmd+ Sin der Terminal.app ausführe, wird nichts gedruckt und das Betriebssystem spielt einen Fehlerton ab. Ich bin mir nicht wirklich sicher, warum der Tastendruck nicht wie erwartet zum Terminal gelangt, wie kann ich Cmd+ Spassieren lassen.
Weitere Informationen darüber, was / warum ich versuche, dies zu tun, finden Sie unter Frage Bind <Cmd-S> in Vim
Ich habe ähnliche Wünsche wie du. Ich habe es mit einer Neubindung der Modifikatortaste auf Systemebene gelöst.
(Natürlich ist das ein Durcheinander; aber ich finde es wert, meine MacVim-trainierte Mischung aus betriebssystemweiten Steuerelementen (Speichern, Neu, Kopieren, Einfügen) in Befehlszeilen zu pflegen vim
.)
So habe ich es gemacht:
Aktivieren Sie „Command_L to Control_L (nur im Terminal)“ :
Ordnen Sie ⌃-präfixierte Steuerelemente zu, die mit den MacVim-Befehlen übereinstimmen, an die Sie in der Befehlszeile am meisten gewöhnt sind vim
. Zum Beispiel zur Unterstützung ⌘S,
noremap <silent> <C-S> :update<CR>
vnoremap <silent> <C-S> <C-C>:update<CR>
inoremap <silent> <C-S> <C-O>:update<CR>
Stellen Sie die erwarteten ⌘-Sequenzen für Terminal.app selbst wieder her, indem Sie sie in den Systemeinstellungen mit Sonderfällen versehen. Wenn Sie beispielsweise ⌘Nweiterhin Terminal-Registerkarten steuern möchten, anstatt sie Dateien zuzuordnen vim
, versuchen Sie Folgendes:
Alles, was Sie dieser Liste nicht hinzufügen, wird wörtlich an die Befehlszeile weitergegeben vim
(und natürlich an jedes andere Befehlszeilenprogramm, das Sie verwenden).
Dieser Ansatz hat mehrere weitere subtile Nachteile, die ich für alle hervorheben möchte, die erwägen, ihn zu nehmen (wie ich es tue):
stty -ixon
das Startskript Ihrer Shell hinzufügen, da ⌃Qes standardmäßig verwendet wird, um eine archaische Shell-Steuerungsfunktion (eine ohne moderne Verwendung) auszuführen.Zusätzlich zu dem oben Gesagten habe ich mich entschieden, ⌘Wals universelle „Schließen“-Taste, die auf mehrere Anwendungen anwendbar ist, weiter zu überschreiben.
Anstelle der Zuordnung ⌘Wzu „Tab schließen“ wie oben; Ich persönlich bilde das ab ⇧⌘W(um die Semantik „diese Registerkarte sofort schließen“ beizubehalten.) Dann bilde ich in jedem beliebigen Programm ⌃Weine Art Schließen-Speichern-Beenden-Funktionalität ab.
Zum Beispiel in meinem .vimrc
:
noremap <C-W> :confirm quit<CR>
vnoremap <C-W> <C-C>:confirm quit<CR>
inoremap <C-W> <C-O>:confirm quit<CR>
… oder meine .zshrc
:
function close_tab { exit }
zle -N close_tab_widget close_tab
bindkey '' close_tab_widget
bindkey -M vicmd '' close_tab_widget
Wenn diese beiden Schnipsel vorhanden sind und Ihr Terminal auf „Schließen, wenn die Shell sauber beendet wird“ konfiguriert ist, wird eine Reihe von ⌘Ws zuerst vim beenden und dann die Shell vollständig schließen.
Außerdem können jetzt zusätzliche Funktionen beim Beenden von Programmen beibehalten werden: zum Beispiel vim
wird vor dem Beenden gefragt, ob Dateien nicht gespeichert sind (genau wie MacVim); und zsh
fragt vor dem Beenden, ob es Hintergrundjobs gibt.
Nachtrag: Nicht direkt auf Ihre Frage bezogen; aber Sie sollten sich auch den 'Ubiquitous Vim Mode' in Karabiner ansehen. Es ist „ein bisschen viel“ für mich, es jeden Tag zu benutzen, aber es ist eine sehr coole Idee und überraschend gut umgesetzt.
nicht sicher, ob dies zutrifft, aber stty
verwendet Strg-s, um das Terminal zu stoppen, bis es mit Strg-q neu gestartet wird. Ich wäre etwas misstrauisch, wenn ich Strg-s an ein Terminal senden würde.
ELLIOTTKABEL
private.xml
zum Ausschließen von ⌘␣: github.com/tekezo/Files/blob/master/Karabiner/…