Wie ordne ich die Alt-Taste zu?


37

Ich versuche, den AltSchlüssel folgendermaßen zuzuordnen :

:map <A-j> j
:map <A-k> k

aber es funktioniert nicht (klingelt Alt + j/ Alt + k).

Was ich vermisse

Ich verwende Terminal unter OSX, das gleiche passiert unter Remote Linux.


Auf Ctrl + v, Alt + jhabe, ich habe: ?~H~F( wenn encoding=utf-8).

Auf Ctrl + v, Alt + khabe, ich habe: ?~Z( ˚wenn encoding=utf-8).

Das Ausführen von vim ohne plugins ( -u NONE) macht keinen Unterschied.


1
Funktioniert Alt(drücken, nicht halten) und dann j? Mit xtermzumindest ich einstellen müssen , metaSendsEscapeum true diese Sequenzen zur Arbeit zu kommen ... ich weiß nicht , ob Sie das gleiche Problem haben, und ich verwende OSX nicht so kann ich nicht testen ...
Martin Tournoij

@Carpetsmoker Drücken Alt, Loslassen, dann joder eine andere Taste funktioniert wie gewohnt . Ich habe die Option 'Option als Metaschlüssel verwenden' geprüft und gefunden. Sie ist aktiviert und funktioniert jetzt. Die Einstellung metaSendsEscapehat also den Trick gemacht, danke.
Kenorb

3
Diese Frage wurde zuvor (mit einer besseren Antwort) hier beantwortet: stackoverflow.com/questions/6778961/…
user3751385

Antworten:


35

So mache ich das unter Linux oder Cygwin:

Überprüfen Sie zuerst, welche Zeichen von Ihrem Terminal gesendet werden, wenn Sie ALT+ drücken J:

Um dies zu tun, gehe ich zur Konsole und starte sed -n l(du kannst es auch benutzen cat). Dann drücke ich ALT+ Jund sehe, dass die Zeichen auf dem Bildschirm sind ^[j.

Ich ersetze ^[mit \e(weil das von meinem Terminal gesendet wird, wenn ich drücke esc) und die letzte Zeichenfolge ist für mich \ej.

Dann schreibe ich es an meine .vimrc:

execute "set <M-j>=\ej"
nnoremap <M-j> j

Und das Mapping funktioniert.


4
Ich kann die Dokumentation für das :set <M-j>=\ejTeil nicht finden . Wonach soll ich suchen?
Evgeni Sergeev

1
Vielen Dank für die Antwort, dies war die einzige Lösung, die für mich mit Iterm + vim
newUserNameHere

Nein, das funktioniert nicht. Manchmal agiert ESC-J als ALT-J
user3751385 04.10.16

1
@EvgeniSergeev See:help :set-termcap
Rich

9

Mit Hilfe von Carpetsmoker wurde das Terminal anscheinend nicht so konfiguriert, dass "Alt / Option als Metataste verwenden" (dies ist besonders bei GUI-Terminals üblich).

Für Terminal unter OSX befindet es sich unter Einstellungen -> Einstellungen -> Registerkarte Tastatur -> Option als Metataste verwenden . Check: Wie kann ich das Terminal so einstellen, dass die Option als Metaschlüssel verwendet wird? ( Außenseiter ).

Aktivieren Sie für XTerm Folgendes: Konfigurieren von XTerm als Standard für Meta-Sends-Escape :

Fügen Sie diese Zeile an einer beliebigen Stelle in Ihre persönliche .Xdefaults-Datei ein ( ~/.Xdefaults):

xterm*metaSendsEscape: true

Dann lade die Konfiguration mit xrdb neu. Ohne diesen Schritt werden die Änderungen in .Xdefaultserst beim nächsten Neustart von X wirksam:

xrdb -l ~/.Xdefaults

Dann Standardzuordnungen mit AltSchlüssel wie:

:map <A-j> j
:map <A-k> k

funktioniert gut.

Weitere Informationen finden Sie : :h :map-alt-keys.


4
Vielleicht möchten Sie auch :h :map-alt-keysals eine weitere Informationsquelle betrachten
Peter Rincker

4

Ähnlich wie Kossaks Antwort, aber ein bisschen einfacher, indem man buchstäbliche Tastendrücke abbildet.

Entweder nach dem Drücken von im normalen Modus :oder nach dem Einfügen in Ihren .vimrc, ordnen Sie die Eingabe direkt zu, indem Sie das Mapping starten:

nnoremap 

Drücken Sie dann Ctrl+ und Vdann die Taste, um aufzunehmen, z . B. Alt+ . Dies wird etwa so aussehen:

nnoremap ^[[1;3D

Aber jedes ^[ist ein einzelnes, wörtliches Escape-Zeichen, und die Hervorhebung der Syntax sollte dies zeigen. Ersetzen Sie das / die wörtliche (n) Escape (s) durch den Text <Esc>und fügen Sie den gewünschten Befehl hinzu:

nnoremap <Esc>[1;3D <C-w>h

Ich weiß, dass OP Mapping Alt+ Buchstaben war, aber ich habe Pfeile verwendet, um zu zeigen, wie dies für etwas getan wird, das möglicherweise nicht standardmäßig zugeordnet ist.


Arbeitete wie ein Zauber, vielen Dank!
Aryndin

2

Dies funktioniert für mich auf Ubuntu 16.04 xfce Terminal (und alacritty Rust Terminal)

Setze Ultisnip Snippet Trigger auf Meta-/(genau wie Emacs Snippet)

let g:UltiSnipsExpandTrigger="^[/"

Hier ^[/tippe ich jetzt vim ein

Im Einfügemodus Ctrl-V Alt-/

( Metaist der AltSchlüssel auf meiner PC-Tastatur)


1

Wenn Shows Control+Vfolgen ( tippe das Terminal ein), kannst du es mit diesem kleinen Skript von vim.wikia.com reparieren :ALT-x^[x

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

Fügen Sie .vimrc für alle ALT-Tastenzuordnungen hinzu.

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.