Antworten:
remap
ist eine Option , mit der Zuordnungen rekursiv funktionieren. Standardmäßig ist es aktiviert und ich würde empfehlen, es so zu belassen. Der Rest sind Zuordnungsbefehle , die unten beschrieben werden:
:map
und :noremap
sind rekursive und nicht rekursive Versionen der verschiedenen Zuordnungsbefehle. Das heißt, wenn Sie Folgendes tun:
:map j gg
:map Q j
:noremap W j
j
wird zugeordnet gg
. Q
wird auch zugeordnet gg
, da j
für die rekursive Zuordnung erweitert wird. W
wird zugeordnet j
(und nicht gg
), da j
es für die nicht rekursive Zuordnung nicht erweitert wird.
Denken Sie jetzt daran, dass Vim ein modaler Editor ist . Es hat einen normalen Modus, einen visuellen Modus und andere Modi.
Für jeden dieser Zuordnungssätze gibt es eine Zuordnung , die im normalen, visuellen, Auswahl- und Bedienermodus ( :map
und :noremap
) funktioniert, eine im normalen Modus ( :nmap
und :nnoremap
), eine im visuellen Modus ( :vmap
und :vnoremap
) usw.
Weitere Anleitungen hierzu finden Sie unter:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
noremap
, ein Gegenteil von zu sein map
. Ich meine etwas, das eine Zuordnung entfernt. Danke für die Antwort. Es hat mich geklärt
:map
usw. nicht in allen Modi funktioniert , genau, nur in allen gängigen (insbesondere im normalen Modus, im visuellen Modus, im Auswahlmodus und) Operator-Pending-Modus). Wenn Sie möchten, dass ein Mapping im Einfüge-, Befehlszeilen- oder Lang-Arg-Modus funktioniert , müssen Sie es verwenden :map!
usw. (Quelle: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
Ich denke, die Vim-Dokumentation hätte die Bedeutung der Benennung dieser Befehle erklären sollen. Nur zu sagen, was sie tun, hilft Ihnen nicht, sich an die Namen zu erinnern.
map
ist die "Wurzel" aller rekursiven Zuordnungsbefehle. Die Stammform gilt für die Modi "Normal", "Visual + Select" und "Operator Pending". (Ich verwende den Begriff "Wurzel" wie in der Linguistik .)
noremap
ist die "Wurzel" aller nicht rekursiven Zuordnungsbefehle. Die Stammform gilt für dieselben Modi wie map
. (Stellen Sie sich das nore
Präfix als "nicht rekursiv" vor.)
(Beachten Sie, dass es auch !
solche Modi gibt map!
, die für das Einfügen und die Befehlszeile gelten.)
Weiter unten erfahren Sie, was "rekursiv" in diesem Zusammenhang bedeutet.
Wenn Sie einen Modusbuchstaben voranstellen, n
z. B. die Modi ändern, in denen das Mapping funktioniert. Sie können eine Teilmenge der Liste der anwendbaren Modi auswählen (z. B. nur "visuell") oder andere Modi auswählen, map
die nicht zutreffen (z. B. "Einfügen").
Die Verwendung help map-modes
zeigt Ihnen einige Tabellen, in denen erläutert wird, wie Sie steuern, für welche Modi das Mapping gilt.
Modusbuchstaben:
n
: nur normalv
: visuell und auswähleno
: Operator ausstehendx
: nur visuells
: nur auswähleni
: einfügenc
: Befehlszeilel
: Einfügen, Befehlszeile, Regexp-Suche (und andere. Gemeinsam als "Lang-Arg" -Pseudomodus bezeichnet)" Rekursiv " bedeutet, dass die Zuordnung zu einem Ergebnis erweitert wird, das Ergebnis dann zu einem anderen Ergebnis erweitert wird und so weiter.
Die Erweiterung wird beendet, wenn eine der folgenden Bedingungen erfüllt ist:
Zu diesem Zeitpunkt wird Vims Standard- "Bedeutung" des Endergebnisses angewendet / ausgeführt.
" Nicht rekursiv " bedeutet, dass das Mapping nur einmal erweitert wird und dieses Ergebnis angewendet / ausgeführt wird.
Beispiel:
nmap K H
nnoremap H G
nnoremap G gg
Die oben genannten Ursachen führen K
zu einer Erweiterung zu H
, dann H
zu einer Erweiterung G
und einem Stopp. Es stoppt wegen der nnoremap
, die sich ausdehnt und sofort stoppt. Die Bedeutung von G
wird ausgeführt (dh "Zur letzten Zeile springen"). In einer Erweiterungskette wird höchstens eine nicht rekursive Zuordnung angewendet (dies wäre die letzte Erweiterung).
Die Zuordnung von G
zu gg
gilt nur, wenn Sie drücken G
, nicht jedoch, wenn Sie drücken K
. Diese Zuordnung wirkt sich nicht auf das Drücken aus, K
unabhängig davon, ob sie G
rekursiv zugeordnet wurde oder nicht, da Zeile 2 bewirkt, dass die Erweiterung K
gestoppt wird, sodass Zeile 3 nicht verwendet wird.
map
Gilt nur für normale, visuelle, ausgewählte und vom Bediener ausstehende Modi, nicht für alle Modi.
Ein Unterschied ist, dass:
:map
tut nvo
== normal + (visuell + auswählen) + Operator ausstehend:map!
tut ic
== + Befehlszeilenmodus einfügenwie in den help map-modes
Tabellen angegeben.
Also: map
wird nicht allen Modi zugeordnet .
Um allen Modi zuzuordnen, benötigen Sie beide :map
und :map!
.
command mode
ist ein anderer historischer Name für normal mode
nämlich. Kapitel 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). Die Abkürzung 'c' steht für 'Kommandozeile'. Mit anderen Worten, standardmäßig: Ordnet lhs map! lhs rhs
rekursiv rhs für die Modi Einfügen + Befehlszeile zu . Dies gilt nur, wenn die remap
Standardoption set noremap[!]
in ~ / .vimrc explizit deaktiviert ist . In diesem Fall wäre die Zuordnung nicht rekursiv (nicht ratsam).
vnoremap
undvmap
arbeiten Sie im visuellen UND Auswahlmodus. Verwenden Siexmap
und, um eine Zuordnung nur im visuellen Modus zu erhaltenxnoremap
.