Kann ich die Alt-Taste in Vim zuordnen?

87

Ich habe versucht, die folgende Zeile zu .vimrc hinzuzufügen, aber es funktioniert nicht. Ich habe überprüft, ob .vimrc von Vim geladen wurde.

map <Alt-D> <C-D>

Gibt es einen Fehler in dieser Zuordnung?

Thomson
quelle
Verwenden Sie vim in einem Terminal oder einer GUI-Version (gvim, macvim)?
Nick Knowlson
Beachten Sie auch, dass wenn Ihre encodingÄnderungen nach dem Mapping ausgeführt werden, das, was Sie mit Ihren Alt-Tasten erhalten, möglicherweise nicht mit dem übereinstimmt, was Sie ursprünglich festgelegt haben.
Dash-Tom-Bang

Antworten:

133

Für Mac-Benutzer da draußen: Verwenden Sie für die Zuordnung von ALT + hjkl stattdessen das real erzeugte Zeichen (finden Sie heraus, welches Zeichen mithilfe der Kombination im INSERT-Modus verwendet wird), z. B. mit meiner Tastatur:

<ALT+j> ==> ª
<ALT+k> ==> º

und so weiter. Lösung hier auf StackOverflow gefunden.

Ich habe dies verwendet, um Linien mit ALT + k \ j auf und ab zu verschieben, wobei ich dies auf meiner .vimrc verwendet habe:

nnoremap ª :m .+1<CR>==
nnoremap º :m .-2<CR>==

inoremap ª <Esc>:m .+1<CR>==gi
inoremap º <Esc>:m .-2<CR>==gi

vnoremap ª :m '>+1<CR>gv=gv
vnoremap º :m '<-2<CR>gv=gv

wie hier erklärt .

Hoffe es ist nützlich, viel Spaß mit Vim :)

Addendum Dylan_Larkin (2019): Diese Denn für die Arbeit an einem Mac, " Verwenden Sie Option als Meta Key " muss gedreht werden OFF in Terminal-> Einstellungen-> Tastatur

Bruno Belotti
quelle
10
Genau dafür bin ich hierher gekommen (Alt + HJKL, um Splits zu verschieben)! Vielen Dank!
Jamie Schembri
6
Eine einfache Möglichkeit, herauszufinden, um welches Zeichen es sich handelt, ist die Verwendung von cat. Geben catSie einfach die gewünschte Tastenkombination in das Katzenfenster ein. Fand heraus, dass alt + Klammern 'und' auf meinem Mac ist.
dvcrn
4
Dies funktioniert hervorragend als Alt + HJKL, um zwischen Splits zu wechseln. Meine Finger lieben es! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
John Morales
3
Diese genauen Zuordnungen funktionieren in zukünftigen Versionen von OSX möglicherweise nicht wie erwartet. Verwenden Sie sed -n ldiese Option , um die Ausgabe von <Ak> und <Aj> anzuzeigen, bevor Sie die Zuordnung konfigurieren. In meinem Fall ist <Aj> und <Ak> ist˚
luk3thomas
4
Unter macOS verhält sich das Einstellen Use Option as Meta Keyoder auf dem iTerm-Profil ⌥ key to Esc+wie gewohnt (wie unter Linux / Unix). Sie müssen die Karte also nicht auf Vim einstellen <^[j>, sondern nur auf <A+j>oder <M+j>und es funktioniert.
Goetzc
39

:help key-notationbeschreibt, welches Format zum Zuordnen verschiedener Schlüssel verwendet werden muss. Im Fall von alt können Sie entweder <A-oder verwenden <M-. Ihr Mapping wäre also

map <M-d> <C-d>

Ich würde auch empfehlen, die noreVariante von :map(z. B. noremap) zu verwenden, es sei denn, Sie möchten ausdrücklich zulassen, dass die rechte Seite für Zuordnungen neu bewertet wird.

Jamessan
quelle
1
Dies hat immer noch keine Auswirkung. Der Alt + D-Eingang gibt immer noch ein seltsames Zeichen in Vim ein.
Thomson
9
Das ist ein separates Thema. Ihr Terminal sendet ein Multi-Byte-Zeichen an Vim, und Vim kann das nicht so interpretieren <A-d>. Sie müssen wahrscheinlich die Einstellungen Ihres Terminals ändern, damit es <A-d>als sendet <Esc>d.
Jamessan
1
@ Jamessan wie geht das auf iterm2?
Finn
32

Ich bin mir nicht sicher, ob es "möglich" ist. Bitte lesen Sie das Update unten.

Ja, Sie können sogar in Terminal Vim, aber es gibt keine echte Antwort auf alle Fragen. Grundsätzlich müssen Sie zwei Schritte ausführen:

  1. Stellen Sie sicher, dass die <M-d>Notation vorhanden ist, und ordnen Sie genau zu, was Ihr Terminal eingibt ( ^[ist das Escape-Zeichen):

    $ cat
    ^[d
    $
    
    " in your .vimrc
    execute "set <M-d>=\ed"
    " you have to use double quotes!
    
  2. Ordnen Sie Ihrer neu erstellten Kombination etwas zu:

    noremap <M-d> :echo "m-d works!"<cr>
    

Wenn Sie verstehen, wie es funktioniert, können Sie diesen "Trick" auf andere "seltsame" Kombinationen ausweiten. Ich verwende beispielsweise Termiten und vim erkennt sie nicht <S-F1>, wenn ich eine Katze verwende, die ich bekomme ^[[1;2P. Dann mache ich in meinem vimrc: execute "set <S-F1>=\e[1;2P"und dann kann ich es auf alles abbilden.

Hinweis: Ich weiß nicht warum, aber für einige Leute, die \<Esc>Werke anstelle von verwenden \e.


Update (Februar 2016)

Abhängig von der Termino, auf der Ihr Terminal ausgeführt wird, könnten Sie möglicherweise ... in den meisten Terminals wird beispielsweise "alt + h" zugeordnet, dh ^[h: "Escape + h". So könnte es Schlüssel überschreiben. Ich habe es gerade (erneut) versucht und es scheint zu funktionieren, aber ich glaube, es ist eine sehr fehlerhafte und fehleranfällige Implementierung.

Für die Mutigen gibt es hier ein experimentelles Plugin:

Pablo Olmos de Aguilera C.
quelle
Anstelle der execute "set...Sachen können Sie einfach direkt verwenden set <M-d>=^[d. Das ^[ist eigentlich ein Escape-Zeichen, mit dem eingegeben wurde C-v-Esc. Dies war in rxvt / urxvt notwendig, aber xterm sollte keine spezielle Behandlung benötigen. Weitere Infos zu diesem Thema im vim Wiki .
Micah Elliott
Gibt es einen analogen Ansatz, der mit tmux funktioniert, so dass Md gebunden werden kann?
George
2
Für mich macht <Esc>dann djetzt das gleiche wie <Alt>+ d. Sie können dies auch einfach in einer Zeile mit tun Ctrl-v, <Esc>wie hier beschrieben .
Sparhawk
24

Map Alt Key in Vim unter Mac OSx:

Zeigen Sie zunächst den Schlüsselcode an, den Ihr Terminal an vim sendet:

$ sed -n l
^[[1;9D 

Im obigen Beispiel habe ich den Befehl ausgeführt und gedrückt Alt + Left.

Das ^[[1;9Dist die entkam Sequenz vim gesendet werden, so können wir Benutzer , dass für unser Mapping.

map <Esc>[1;9D 
lfender6445
quelle
3
Wenn Sie die iTerm2-App verwenden, sollten Sie überprüfen, wie die Schlüssel unter Profil> Schlüssel zugeordnet sind.
Fikovnik
1
Mit der linken OptionTaste ( ) wie Esc+in iTerm2 konfiguriert , könnte ich zuordnen, alt+qum vim zu beenden: nnoremap <silent> <Esc>q :qa!<cr>
Ryenus
Sie können iTerm2 auch so einrichten, dass es mit dieser Neuzuordnung funktioniert, wenn Sie zu Einstellungen> Profile gehen, Ihr aktuelles Profil auswählen, zur Registerkarte "Schlüssel" für dieses Profil wechseln und die Option "Linke ⌥ Taste" in "Esc +" (verfügbar) ändern Optionen sind "Normal", "Meta" und "Esc +").
Giovanni Benussi
11

Verwenden:

map <A-D> <C-D>

Siehe :help key-notation.

Benoit
quelle
1
Es scheint, dass dies immer noch nicht funktioniert. Alt + d gibt ein seltsames Zeichen in Vim ein, das mit dem Unmap-Fall identisch ist.
Thomson
Funktioniert für mich (ich verwende gvimunter Windows)
Deqing
8

Ihr Terminal überträgt Alt-D möglicherweise nicht "richtig". Sie können CV verwenden, um die tatsächliche Escape-Sequenz an Vim zu senden und Ihre Zuordnung zu erstellen. Bearbeiten Sie also Ihre .vimrc und ersetzen Sie die tatsächliche, indem Sie die folgende Sequenz "CV Alt-D" eingeben, damit Sie die richtige Escape-Sequenz in Ihrer vimrc haben. Das funktioniert nicht, wenn Ihr Terminal nichts an vim sendet.

mb14
quelle
8

Mein Terminal würde ^[xBefehle erzeugen (z. B. für alt-x). Was es in Vim zum Laufen gebracht hat, war dieses kleine Skript von vim.wikia.com :

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 hinzu, um alle Alt-Tastenzuordnungen zu korrigieren.

Laktak
quelle
1

Stellen Sie als Antwort auf Brunos Antwort für Mac-Benutzer sicher, dass Ihr Optionsschlüssel zugeordnet ist Esc+.

Dadurch erhalten Sie das "normale" Verhalten der Option ( A) in Vim.

iterm2Diese Option finden Sie beispielsweise in Preferences > Profiles > Keys:

Screenshot der iterm2-Einstellungen

Axelyung
quelle
Ich musste auch die Konfiguration ändern nnoremap <Esc>j :m .+1<CR>==und ähnlich ...
mihaipopescu
0

Hallo, nachdem ich nach Jahren des Testens auf dem Mac keine gute Lösung gefunden hatte, suchte ich weiter.

Hier ist meine Lösung:

Um einen Kombinations-Tastenanschlag einschließlich Alt zu erstellen, müssen Sie die Kombination in den Einstellungen> Tastatur deklarieren und diese Kombination in der vim-Setup-Datei verwenden (aktivieren Sie die Option "Verwendung als Metataste").

Die Ausgabe muss ein ungewöhnliches Zeichen sein ( az. B. Nein ), damit Sie ein reguläres Zeichen nicht überschreiben.

Im folgenden Beispiel sollten Sie in der Lage sein, mit ALT-Up zu arbeiten.

vim Einstellung: vim Einstellung

Mac-Einstellung: Mac-Einstellung

MC F.
quelle