Mapping Strg-Rücktaste im Terminator

8

Ich habe vor kurzem angefangen, Vim zu verwenden. Von früheren Redakteuren bin ich es gewohnt, ein ganzes Wort durch Drücken von Ctrl- zu löschen Backspace. Nachdem ich mir die Dokumentation angesehen hatte, stellte ich fest, dass dies durch Drücken von Ctrl- win Vim geschehen war . Das Problem ist, dass ich , nachdem ich mich an das Drücken von Ctrl- wgewöhnt habe, jedes Mal Tabs und Chats geschlossen habe, wenn ich ein Wort falsch geschrieben habe (während ich diese Frage schrieb, habe ich diesen Tab 5 Mal geschlossen). Also habe ich überprüft, wie Schlüssel in Vim zugeordnet werden, und Folgendes versucht:

:imap <C-BS> <C-w>

Leider hat es nicht funktioniert. Nach ein wenig Recherche stellte ich fest, dass das Terminal nicht zwischen Ctrl- Backspaceund unterscheidet Backspace. Ich habe einige Hacks und Patches gesehen, um dieses Problem zu beheben, aber ich konnte sie nicht dazu bringen, mit dem Terminator (dem Emulator, den ich verwenden möchte) zu arbeiten.

Gibt es eine Möglichkeit zum Zuordnen Ctrl- Backspacein Vim bei Verwendung des Terminators?

user1026044
quelle
2
Willkommen in der Hölle von Vim.
Romainl
2
Ich mag die Tatsache, dass diese Hölle ziemlich produktiv ist und mit Patches verbessert werden kann.
Ingo Karkat
Übrigens sammle ich diese Art von Fragen, um hoffentlich zu behaupten, dass dieses spezielle Problem in einem Vim 8.0 angegangen wird. Ich möchte wirklich auch immer einheitlichere Mapping-Kandidaten.
Ingo Karkat
Dieses Problem kann in vim (AFAIK) nicht wirklich behoben werden. Dies hängt davon ab, auf welchem ​​Terminal vim ausgeführt wird. Für eine Vielzahl von Benutzern, die vte verwenden (Gnone Terminal, Mate Terminal, Guake usw.), hat dieses Problem in letzter Zeit einige Aufmerksamkeit erhalten und wird möglicherweise bald behoben. Siehe diesen Gnom-Fehler: bugzilla.gnome.org/show_bug.cgi?id=420039
trusktr
@IngoKarkat Siehe obigen Kommentar. ^
trusktr

Antworten:

8

Aufgrund der internen Handhabung der Tastatureingabe ist dies heute leider nicht mehr möglich. Einige Tastenkombinationen wie Ctrl+ nicht alphabetisch können nicht zugeordnet werden, und Ctrl+ Buchstabe vs. Ctrl+ Shift+ Buchstabe kann nicht unterschieden werden. (Es sei denn, Ihr Terminal sendet einen eindeutigen Termcap- Code dafür, was die meisten nicht tun.) Geben Sie im Einfüge- oder Befehlszeilenmodus die Tastenkombination ein. Wenn nichts passiert / eingefügt wird, können Sie diese Tastenkombination nicht verwenden. Dies gilt auch für <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>usw. (Einzige Ausnahme ist <BS>/ <C-H>.) Dies ist ein bekannter Schmerzpunkt und Gegenstand verschiedener Diskussionen über vim_dev und den # vim-IRC-Kanal.

Einige Leute (vor allem Paul LeoNerd Evans) wollen das beheben (sogar für Konsolen-Vim in Terminals, die dies unterstützen) und haben verschiedene Vorschläge unterbreitet, vgl. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Bis heute haben sich jedoch noch keine Patches oder Freiwilligen gemeldet, obwohl viele den Wunsch geäußert haben, dies in einer zukünftigen Vim 8-Hauptversion zu tun.

Ingo Karkat
quelle
Danke für die schnelle Antwort. Ich denke, ich muss mich nur daran gewöhnen, Strg-W für VIM und Strg-Rücktaste für Browser zu verwenden.
user1026044
Das Gute an Strg-W ist, dass es auch in Bash usw. funktioniert.
Ingo Karkat
Ja ich weiß. Aber Sie müssen immer noch Strg-Rücktaste für alles andere verwenden, und die Tatsache, dass Strg-W Standard ist, um Registerkarten und Fenster überall zu schließen, macht es ärgerlich. Ich werde mich wahrscheinlich nach einer Weile daran gewöhnen.
user1026044
Aber kann dies nur in der vim-Codebasis gelöst werden? Wie unterscheidet ein Code in der vim-Codebasis zwischen Rücktaste und Strg + Rücktaste, wenn das Terminal, auf dem er ausgeführt wird, vim für jede Tastenkombination dieselbe exakte Eingabe sendet? Dies scheint etwas zu sein, das in dem Terminal behoben werden muss, in dem vim ausgeführt wird, nicht in vim. Zum Beispiel sendet Guake ^?sowohl für die Rücktaste als auch für Strg + Rücktaste, wodurch sie (AFAIK) nicht unterscheidbar sind. xterm hingegen sendet für die Rücktaste ^Hund ^?für Strg + Rücktaste, wodurch sie unterscheidbar sind.
Trusktr
Leider ^Hist backspace ( ^H) in xterm nicht von Strg + h ( ) zu unterscheiden. Vielleicht können wir eine neue Escape-Sequenz erstellen, um alle drei unterscheiden zu können? Ich weiß nicht, wie einfach das ist, aber es scheint sicher zu sein, weil ich mir nach dem aktuellen Stand der Dinge (einige Terminals werden ^?für die Rücktaste verwendet, andere ^Hund umgekehrt) nicht viele Terminal-Apps vorstellen kann (falls überhaupt vorhanden) Betrachten Sie das Szenario Strg + Rücktaste (es wäre aufgrund der Vielzahl der Terminals völlig unbestimmt) ...
trusktr