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:
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
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.
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:
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!
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:
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.
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 +").
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.
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.
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.Antworten:
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:
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:
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
quelle
cat
. Gebencat
Sie einfach die gewünschte Tastenkombination in das Katzenfenster ein. Fand heraus, dass alt + Klammern 'und' auf meinem Mac ist.nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
sed -n l
diese Option , um die Ausgabe von <Ak> und <Aj> anzuzeigen, bevor Sie die Zuordnung konfigurieren. In meinem Fall ist <Aj>∆
und <Ak> ist˚
Use Option as Meta Key
oder 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.:help key-notation
beschreibt, 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 alsoIch würde auch empfehlen, die
nore
Variante 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.quelle
<A-d>
. Sie müssen wahrscheinlich die Einstellungen Ihres Terminals ändern, damit es<A-d>
als sendet<Esc>d
.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:
Stellen Sie sicher, dass die
<M-d>
Notation vorhanden ist, und ordnen Sie genau zu, was Ihr Terminal eingibt (^[
ist das Escape-Zeichen):Ordnen Sie Ihrer neu erstellten Kombination etwas zu:
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:
quelle
execute "set...
Sachen können Sie einfach direkt verwendenset <M-d>=^[d
. Das^[
ist eigentlich ein Escape-Zeichen, mit dem eingegeben wurdeC-v-Esc
. Dies war in rxvt / urxvt notwendig, aber xterm sollte keine spezielle Behandlung benötigen. Weitere Infos zu diesem Thema im vim Wiki .<Esc>
dannd
jetzt das gleiche wie<Alt>
+d
. Sie können dies auch einfach in einer Zeile mit tunCtrl-v
,<Esc>
wie hier beschrieben .Map Alt Key in Vim unter Mac OSx:
Zeigen Sie zunächst den Schlüsselcode an, den Ihr Terminal an vim sendet:
Im obigen Beispiel habe ich den Befehl ausgeführt und gedrückt Alt + Left.
Das
^[[1;9D
ist die entkam Sequenz vim gesendet werden, so können wir Benutzer , dass für unser Mapping.quelle
Option
Taste (⌥
) wieEsc+
in iTerm2 konfiguriert , könnte ich zuordnen,alt+q
um vim zu beenden:nnoremap <silent> <Esc>q :qa!<cr>
Verwenden:
Siehe
:help key-notation
.quelle
gvim
unter Windows)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.
quelle
Mein Terminal würde
^[x
Befehle erzeugen (z. B. für alt-x). Was es in Vim zum Laufen gebracht hat, war dieses kleine Skript von vim.wikia.com :Fügen Sie .vimrc hinzu, um alle Alt-Tastenzuordnungen zu korrigieren.
quelle
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.iterm2
Diese Option finden Sie beispielsweise inPreferences > Profiles > Keys
:quelle
nnoremap <Esc>j :m .+1<CR>==
und ähnlich ...Hallo, nachdem ich nach Jahren des Testens auf dem Mac keine gute Lösung gefunden hatte, suchte ich weiter.
Hier ist meine Lösung:
Die Ausgabe muss ein ungewöhnliches Zeichen sein (
a
z. 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:
Mac-Einstellung:
quelle