Linke Alt-Taste in Vim zuordnen?

11438
Yogesh Arora

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

Gibt es eine Möglichkeit, dies zu tun?

Edit:
Nur zur Klarheit <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?

12

1 Antwort auf die Frage

14
dubiousjim

Wenn Sie dies :help key-notationin vim tun, werden Sie sehen, 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 verwendet. (Ich weiß nicht, ob es möglich ist, Linux-Systeme dazu zu bringen, den Mac-Befehlstastenmodifikator darzustellen, wie Vim es sieht.) Es gibt andere Modifikatoren, die X erkennt: Mod4, Hyper usw., aber es sieht so aus, als ob Vim gerade gewonnen hätte. Ich sehe sie nicht oder kann sie zumindest nicht binden.

Eine andere Option besteht darin, den RightAlt-Linkspfeil so anzuordnen, dass eine bestimmte Tastenfolge generiert wird, beispielsweise Esc [[MyUniqueGarbageHere]. Dies ist sicherlich machbar, und dann können Sie Vim sagen, dass Sie dies an die gewünschte Aktion binden sollen, die sich von der linken Alt-Taste unterscheidet. Der Nachteil ist, dass Sie dies für jede RightAlt + -Tastenkombination einzeln vornehmen müssen. Wenn Sie dies nur für ein paar Tasten tun möchten, ist dies sehr gut möglich.

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

  1. Verwenden Sie xmodmap, um RightAlt an Mod3 zu binden. Stellen Sie sicher, dass dies einmal ausgeführt wird, wenn Ihre X-Sitzung beginnt. Einige Distributionen verfügen bereits über eine Datei / etc / X11 / xinit / xinitrc, mit der Dateien an bestimmten Speicherorten geladen werden, die xmodmap-Befehle enthalten.

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R" 
  2. Ich benutze das Terminal urxvt. Hiermit können Keybindings in einer Datei vom Typ Xresources definiert werden. Sie könnten dies in ~ / .config / Xresources tun; Ich mache es in ~ / .config / app-defaults / URxvt. Ich würde eine solche Zeile in diese Datei einfügen (die genaue Syntax ist abhängig von der Datei, in die Sie sie eingefügt haben):

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

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

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

    set t_Ff=^[<RAlt-Left> 

Das '^ [' ist hier ein einzelnes Escape-Zeichen. Alle anderen Zeichen ('<', 'R', 'A' usw.) sind selbst. Verwenden Sie das Präfix "literal" von vim, gefolgt von einem Escape-Befehl, um "^ [" einzugeben (ich habe vergessen, was der "literal" -Taste standardmäßig ist - vielleicht auch ctrl-V?) . Ein anderes ist t_Fg. Sie können :set termcapin vim verwenden, um zu sehen, welche Terminaleinträge zugewiesen sind, und verwenden Sie einfach t_XX für einige nicht verwendete XX. Folgen Sie der oben dargestellten .vimrc-Zeile mit den folgenden Zeilen:

 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 zu tun:

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

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

Ich habe hier eine Menge Annahmen gemacht: dass Sie Linux, X usw. verwenden. Wenn Sie ein anderes Terminal-Programm als urxvt verwenden, bietet es möglicherweise leistungsstarke Keybinding-Techniken für das, was ich beschrieben habe. Wenn Sie weniger exotische Schlüssel 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 ist, und dann von dort aus weitergehen. Teilen Sie uns Ihre Anforderungen mit.

Trifft dies auch auf gvim zu? Glyph vor 12 Jahren 0
Ich fand das besonders hilfreich. Ich benutze lxterminal und möchte meinen alt key in vim abbilden. Wenn ich im Terminal Ctrl-V und dann meine gewünschte Tastenkombination (z. B. Alt-T) eingab, spuckte es aus ^ [t. Ich habe dies in meiner .vimrc anstelle von verwendetdas Mapping durchzuführen (^ [natürlich das einzige Escape-Zeichen)) und es lief einwandfrei. (^ [^ T bindet auch korrekt Strg + Alt + T) denaje vor 11 Jahren 0