Jaka jest różnica między poleceniami mapowania remap, noremap, nnoremap i vnoremap w vim?

Jaka jest różnica między poleceniami mapowania remap, noremap, nnoremap i vnoremap w vim-IE?

Author: TRiG, 2010-09-23

4 answers

remap jest opcją , która sprawia, że mapowanie działa rekurencyjnie. Domyślnie jest włączony i polecam zostawić go w ten sposób. Pozostałe to polecenia mapujące , opisane poniżej:

:map i :noremaprekurencyjnymi i nie-rekurencyjnymi wersjami różnych poleceń mapowania. Oznacza to, że jeśli to zrobisz:

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

j zostanie odwzorowane na gg. Q będzie również będzie odwzorowane na gg, ponieważ j będzie rozszerzone dla odwzorowanie rekurencyjne. {[10] } będzie mapowane do j (a nie do gg), ponieważ j nie będzie rozszerzane dla mapowania nie rekurencyjnego.

Teraz pamiętaj, że Vim jest edytorem modalnym . Posiada tryb normalny , wizualny i inne tryby.

Dla każdego z tych zestawów mapowania, istnieje mapowanie , które działa w trybach normal, visual, select i operator (:map i :noremap), jeden, który działa w trybie normal (:nmap i :nnoremap), jeden w trybie mode (:vmap i :vnoremap) i tak dalej.

Aby uzyskać więcej wskazówek na ten temat, zobacz:

:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
 1346
Author: DrAl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-05 07:14:10

Myślę, że dokumentacja Vima powinna była wyjaśnić znaczenie nazw tych komend. Samo mówienie ci, co robią, nie pomoże Ci zapamiętać nazwisk.

map jest "korzeniem" wszystkich poleceń odwzorowania rekurencyjnego. Forma główna ma zastosowanie do trybów" normal"," visual+select "i" operator-pending". (Używam terminu "root" jak w lingwistyce.)

noremap jest "korzeniem" wszystkich poleceń mapowania nie rekurencyjnego. Forma główna ma zastosowanie do tych samych trybów, co map. (Pomyśl o przedrostku nore oznaczającym "non-recursive".)

(zauważ, że istnieją również tryby !, takie jak map!, które mają zastosowanie do wstawiania & wiersza poleceń.)

Zobacz poniżej, co oznacza "rekurencyjny" w tym kontekście.

Poprzedzanie litery mode jak n modyfikowanie trybów, w których działa mapowanie. Może wybrać podzbiór listy odpowiednich trybów (np. tylko "visual") lub wybrać inne tryby, do których map nie ma zastosowania (np."insert").

Użycie help map-modes pokaże masz kilka tabel, które wyjaśniają, jak kontrolować, do których trybów ma zastosowanie mapowanie.

Litery trybu:

  • n: tylko normalne
  • v: visual and select
  • o: operator-oczekujący
  • x: tylko wizualne
  • s: wybierz tylko
  • i: insert
  • c: wiersz poleceń
  • l: insert, command-line, regexp-search (i inne. Zbiorczo nazywany " Lang-Arg" pseudo-mode)

"Recursive " oznacza, że mapowanie jest rozszerzane do wyniku, następnie wynik jest rozszerzany do innego wyniku, i tak dalej.

Ekspansja zatrzymuje się, gdy jedna z nich jest prawdziwa:

  1. wynik nie jest już mapowany do niczego innego.
  2. zastosowano odwzorowanie nie rekurencyjne (tzn. "noremap" [lub jeden z jego ilk] jest ostatecznym rozszerzeniem).

W tym momencie domyślne "znaczenie" wyniku końcowego Vima jest zastosowany/wykonany.

"Non-recursive " oznacza, że mapowanie jest rozwijane tylko raz, a wynik jest stosowany/wykonywany.

Przykład:

 nmap K H
 nnoremap H G
 nnoremap G gg

Powyższe powoduje, że K rozszerza się do H, następnie H rozszerza się do G i zatrzymuje. Zatrzymuje się z powodu nnoremap, który rozszerza się i zatrzymuje natychmiast. Znaczenie G zostanie wykonane (np."Skocz do ostatniej linii"). W łańcuchu rozszerzeń zostanie zastosowane co najwyżej jedno nie rekurencyjne odwzorowanie (będzie to ostatnie rozszerzenie).

Odwzorowanie G na gg ma zastosowanie tylko wtedy, gdy naciśniesz G, ale nie wtedy, gdy naciśniesz K. Mapowanie to nie ma wpływu na naciśnięcie K niezależnie od tego, czy G zostało odwzorowane rekurencyjnie, ponieważ to linia 2 powoduje zatrzymanie rozszerzenia K, więc linia 3 nie byłaby używana.

 215
Author: Kelvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 18:34:26

Uwaga, vnoremap i vmap działają w trybie wizualnym i wybierz. Aby mieć mapowanie tylko w trybie wizualnym, użyj xmap i xnoremap.

 70
Author: Benoit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 03:11:32

Jedna różnica polega na tym, że:

  • :map does nvo = = normal + (visual + select) + operator
  • :map! does ic = = insert + command-line mode

Zgodnie z tabelami help map-modes.

Więc: map nie mapuje wszystkich trybów .

Aby odwzorować wszystkie tryby, potrzebujesz zarówno :map, jak i :map!.

 18
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-15 19:44:01