Linke Alt-Taste in Vim zuordnen?


12

Ich kann die Tastenkombination Right Alt+ Left Arrowmit <a-left>oder von zuordnen <m-left>. Aber ich kann den Left AltSchlüssel nicht zuordnen.

Gibt es eine Möglichkeit, das zu tun?

Edit:
Nur um Klarheit zu schaffen <a-left>bedeutet Alt+ Left Arrow.
Die wichtige Frage ist hier, was ist der Unterschied zwischen Left Altund Right Altaus der Perspektive von Keymappings in Vim?

Antworten:


14

Wenn Sie :help key-notationin vim arbeiten, werden Sie feststellen, dass die einzigen Modifikatoren, die Vim erkennt, Shift, Control, Alt / Meta (als Synonyme behandelt) und die Mac-Befehlstaste sind. Sie können xmodmap problemlos verwenden, um Ihre rechte Alt-Taste einem neuen Modifikator zuzuordnen, den Vim erkennt, aber möglicherweise wird keiner dieser Modifikatoren derzeit von Ihnen nicht verwendet. (Ich weiß nicht, ob es möglich ist, Linux-Systeme zu veranlassen, den Mac-Befehlstasten-Modifikator so darzustellen, wie Vim ihn sieht.) Es gibt andere Modifikatoren, die X erkennt: Mod4, Hyper und so weiter, aber es sieht so aus, als hätte Vim gerade gewonnen. ' Sie sehen sie nicht oder können sie zumindest nicht binden.

Eine andere Möglichkeit besteht darin, den Rechts-Links-Pfeil eine bestimmte Tastenfolge generieren zu lassen, z. B. Esc- [MyUniqueGarbageHere. Dies ist mit Sicherheit machbar, und dann könnten Sie Vim anweisen, dies an eine beliebige Aktion zu binden, die sich von Ihrer linken Alt-Taste unterscheidet. Der Nachteil dabei ist, dass Sie dies für jede RightAlt + Key-Kombination einzeln tun müssen. Aber wenn Sie dies nur für ein paar Tasten tun möchten, ist es sehr machbar.

Wie Sie es implementieren, hängt davon ab, ob Sie Vim in X, in einer Linux-Konsole oder in einer anderen Umgebung verwenden. Ich gehe davon aus, dass Sie über die Verwendung in X sprechen.

  1. Verwenden Sie xmodmap, um RightAlt an Mod3 zu binden. Vereinbaren Sie, dass dies einmal ausgeführt wird, wenn Ihre X-Sitzung beginnt. Einige Distributionen haben bereits eine / etc / X11 / xinit / xinitrc-Datei, die Dateien an bestimmten Speicherorten lädt, die xmodmap-Befehle enthalten.

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
    
  2. Ich benutze das Terminal urxvt. Es ermöglicht das Definieren von Tastenkombinationen in einer Datei vom Typ Xresources. Sie könnten es in ~ / .config / Xresources tun; Ich mache es in ~ / .config / app-defaults / URxvt. Ich würde eine Zeile wie diese in diese Datei einfügen (die genaue Syntax hängt davon ab, in welcher Datei Sie sie einfügen):

    URxvt.keysym.Mod3-Left:    \033<RAlt-Left>
    

    Starten Sie nun ein neues Terminal, geben Sie Strg-V ein und dann RightAlt + Left. Sie sollten in der Befehlszeile die Zeichen ^ [[<Alt-Links> sehen. Funktioniert es? Gut.

  3. Fügen Sie in Ihre ~ / .vimrc Folgendes ein:

    set t_Ff=^[<RAlt-Left>
    

Das '^ [' hier ist ein einzelnes Escapezeichen. Alle anderen Zeichen ('<', 'R', 'A' usw.) sind ihre eigenen. Verwenden Sie das Schlüsselpräfix "literal" von vim, gefolgt von einem Escape-Zeichen, um das Zeichen "^ [" einzugeben (ich vergesse, was der Schlüssel "literal" standardmäßig ist - vielleicht auch Strg-V?). T_Ff ist nur ein nicht verwendeter Terminaleintrag . Ein anderes ist t_Fg. Sie können :set termcapin vim sehen, welche Terminaleinträge zugewiesen sind, und t_XX nur für einige XX verwenden, die nicht verwendet werden. Folgen Sie der oben dargestellten .vimrc-Zeile mit den folgenden:

    map <t_Ff> whatever-vim-keys-you-want-it-mapped-to
    map! <t_Ff> whatever-vim-keys-you-want-it-mapped-to

Es ist auch möglich, direkt Folgendes zu tun:

    map ^[<RAlt-Left> whatever-vim-keys-you-want-it-mapped-to

Ich habe jedoch die Technik gefunden, die einen freien Terminaleintrag verwendet, um viel zuverlässiger zu arbeiten.

Ich habe hier viele Annahmen getroffen: Sie verwenden Linux, X usw. Wenn Sie ein anderes Terminal-Programm als urxvt verwenden, bietet es möglicherweise ausreichend leistungsstarke Tastenkombinationstechniken, um das zu tun, was ich beschrieben habe. Wenn Sie weniger exotische Tasten wählen, können Sie möglicherweise noch etwas tun, wie ich es hier beschrieben habe. Sie können beispielsweise festlegen, dass RAlt-Left an F21 gebunden wird, und von dort aus fortfahren. Teilen Sie uns Ihre Anforderungen mit.


Gilt das auch für gvim?
Glyphe

Ich fand das besonders hilfreich. Ich benutze lxterminal und möchte meine Alt-Taste in vim abbilden. Wenn ich im Terminal Strg-V und dann die gewünschte Tastenkombination (z. B. Alt-T) eingab, spuckte es ^ [t aus. Ich habe dies in meiner .vimrc-Datei anstelle von <At> verwendet, um das Mapping durchzuführen (^ [ist natürlich das einzelne Escape-Zeichen), und es lief einwandfrei. (^ [^ T bindet auch Strg + Alt + T korrekt)
elynnaie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.