Antworten:
remapist 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:
:mapund :noremapsind rekursive und nicht rekursive Versionen der verschiedenen Zuordnungsbefehle. Das heißt, wenn Sie Folgendes tun:
:map j gg
:map Q j
:noremap W j
jwird zugeordnet gg. Qwird auch zugeordnet gg, da jfür die rekursive Zuordnung erweitert wird. Wwird zugeordnet j(und nicht gg), da jes 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 ( :mapund :noremap) funktioniert, eine im normalen Modus ( :nmapund :nnoremap), eine im visuellen Modus ( :vmapund :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
:mapusw. 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.
mapist 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 .)
noremapist die "Wurzel" aller nicht rekursiven Zuordnungsbefehle. Die Stammform gilt für dieselben Modi wie map. (Stellen Sie sich das norePrä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, nz. 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, mapdie nicht zutreffen (z. B. "Einfügen").
Die Verwendung help map-modeszeigt 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 Kzu einer Erweiterung zu H, dann Hzu einer Erweiterung Gund einem Stopp. Es stoppt wegen der nnoremap, die sich ausdehnt und sofort stoppt. Die Bedeutung von Gwird 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 Gzu gggilt nur, wenn Sie drücken G, nicht jedoch, wenn Sie drücken K. Diese Zuordnung wirkt sich nicht auf das Drücken aus, Kunabhängig davon, ob sie Grekursiv zugeordnet wurde oder nicht, da Zeile 2 bewirkt, dass die Erweiterung Kgestoppt wird, sodass Zeile 3 nicht verwendet wird.
mapGilt 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-modesTabellen angegeben.
Also: mapwird nicht allen Modi zugeordnet .
Um allen Modi zuzuordnen, benötigen Sie beide :mapund :map!.
command modeist ein anderer historischer Name für normal modenä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 remapStandardoption set noremap[!]in ~ / .vimrc explizit deaktiviert ist . In diesem Fall wäre die Zuordnung nicht rekursiv (nicht ratsam).
vnoremapundvmaparbeiten Sie im visuellen UND Auswahlmodus. Verwenden Siexmapund, um eine Zuordnung nur im visuellen Modus zu erhaltenxnoremap.