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.

Kenorb
quelle
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.

Kossak
quelle
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.

Kenorb
quelle
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.

Walf
quelle
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)

user178047
quelle
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.

laktak
quelle