Frage Was ist der Unterschied zwischen den Befehlen remap, noremap, nnoremap und vnoremap in vim?


Was ist der Unterschied zwischen den Befehlen remap, noremap, nnoremap und vnoremap in vim?


901
2017-09-23 07:13


Ursprung


Antworten:


remap ist ein Möglichkeit Dadurch werden Zuordnungen rekursiv ausgeführt. Standardmäßig ist es aktiviert und ich würde empfehlen, es so zu lassen. Der Rest ist Zuordnungsbefehle, nachstehend beschrieben:

:map und :noremap sind rekursiv und nicht rekursiv Versionen der verschiedenen Mapping-Befehle. Was das bedeutet ist, dass wenn du folgendes tust:

:map j gg
:map Q j
:noremap W j

j wird zugeordnet werden gg. Q werden ebenfalls zugeordnet werden gg, weil j wird für das rekursive Mapping erweitert. W wird zugeordnet werden j (und nicht zu gg) weil j wird für das nicht-rekursive Mapping nicht erweitert.

Nun erinnere dich, dass Vim ein ist modaler Editor. Es hat ein normal Modus, visuell Modus und andere Modi.

Für jede dieser Zuordnungen gibt es a Kartierung das funktioniert in normalen, visuellen, Auswahl und Operator-Modi (:map und :noremap), einer, der im normalen Modus arbeitet (:nmap und :nnoremap), eine im visuellen Modus (:vmap und :vnoremap) und so weiter.

Weitere Informationen hierzu finden Sie unter:

:help :map
:help :noremap
:help recursive_mapping
:help :map-modes

1324
2017-09-23 07:24



Ich denke, die vim-Dokumentation sollte die Bedeutung der Benennung dieser Befehle erklärt haben. Ihnen nur zu sagen, was sie tun, hilft Ihnen nicht, sich an die Namen zu erinnern.

map ist die "Wurzel" aller rekursiven Mapping-Befehle. Die Grundform gilt für die Modi "normal", "visuell + auswählen" und "operator-pending". (Ich verwende den Begriff "root" wie in Linguistik.)

noremap ist die "Wurzel" aller nicht-rekursiven Mapping-Befehle. Die Wurzelform gilt für die gleichen Modi wie map. (Denken Sie an die nore Präfix bedeutet "nicht-rekursiv".)

(Beachten Sie, dass es auch die ! Modi wie map! das gilt für das Einfügen und die Befehlszeile.)

Siehe unten, was "rekursiv" in diesem Zusammenhang bedeutet.

Einen Modus-Buchstaben voranstellen n Modifizieren Sie die Modi, in denen das Mapping funktioniert. Es kann eine Teilmenge der Liste der anwendbaren Modi auswählen (z. B. nur "visuell") oder andere Modi wählen map würde nicht gelten für (z. B. "einfügen").

Benutzen help map-modes zeigt Ihnen einige Tabellen, in denen erläutert wird, wie die Modi gesteuert werden, auf die das Mapping angewendet wird.

Modus Buchstaben:

  • n: nur normal
  • v: visuell und wählen
  • o: ausstehend
  • x: nur visuell
  • s: nur auswählen
  • i: einfügen
  • c: Befehlszeile
  • l: insert, command-line, regexp-search (und andere. Gemeinsamer "Lang-Arg" Pseudo-Modus)

"Rekursiv"bedeutet, dass das Mapping zu einem Ergebnis erweitert wird, dann wird das Ergebnis auf ein anderes Ergebnis erweitert und so weiter.

Die Erweiterung wird beendet, wenn eine der folgenden Bedingungen zutrifft:

  1. Das Ergebnis wird nicht mehr auf etwas anderes abgebildet.
  2. eine nicht-rekursive Abbildung wurde angewendet (d. h. die "noremap" [oder eine ihrer Art] ist die letzte Erweiterung).

An diesem Punkt 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 K erweitern zu H, dann H erweitern zu G und stoppen. Es stoppt wegen der nnoremap, die expandiert und sofort aufhört. Die Bedeutung von G wird ausgeführt (d. h. "zur letzten Zeile springen"). Es wird höchstens ein nicht-rekursives Mapping in einer Erweiterungskette angewendet (es wäre die letzte Erweiterung).

Das Mapping von G zu gg gilt nur, wenn Sie drücken Gaber nicht wenn du drückst K. Diese Zuordnung hat keinen Einfluss auf das Drücken K egal ob G wurde rekursiv abgebildet oder nicht, da Zeile 2 die Erweiterung von bewirkt K zu stoppen, so würde Zeile 3 nicht verwendet werden.


210
2017-07-26 19:00



Vorsicht, vnoremap und vmap arbeiten im Visual AND Select Modus. Um eine Zuordnung nur im visuellen Modus zu haben, verwenden Sie xmap und xnoremap.


69
2017-09-24 13:58



Ein Unterschied ist, dass:

  • :map  tut nvo == normal + (visuell + auswählen) + Operator anstehend
  • :map! tut ic  == Einfügen + Befehlszeilenmodus

wie angegeben help map-modes Tabellen.

Damit: map wird nicht allen Modi zugeordnet.

Um alle Modi abzubilden, benötigen Sie beide :map und :map!.


17
2018-01-22 12:03