Odpowiedzi:
remap
jest opcją, która powoduje, że mapowania działają rekurencyjnie. Domyślnie jest włączony i zalecam pozostawienie go w ten sposób. Reszta to polecenia mapowania opisane poniżej:
:map
i :noremap
są rekurencyjnymi i nierekurencyjnymi wersjami różnych poleceń mapowania. Oznacza to, że jeśli:
:map j gg
:map Q j
:noremap W j
j
zostanie zamapowany na gg
. Q
zostanie również zmapowany gg
, ponieważ j
zostanie rozszerzony dla mapowania rekurencyjnego. W
zostanie zamapowany na j
(i nie na gg
), ponieważ j
nie zostanie rozwinięty dla mapowania nierekurencyjnego.
Teraz pamiętaj, że Vim jest edytorem modalnym . Ma tryb normalny, tryb wizualny i inne tryby.
Dla każdego z tych zestawów odwzorowań istnieje odwzorowanie, które działa w trybach normalnym, wizualnym, wyboru i operatora ( :map
i :noremap
), jeden działający w trybie normalnym ( :nmap
i :nnoremap
), jeden w trybie wizualnym ( :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
noremap
przeciwieństwem map
. Mam na myśli coś, co usuwa mapowanie. Dziękuję za odpowiedź. Wyjaśniło mi to
:map
itp. Nie działają we wszystkich trybach, dokładnie we wszystkich trybach (konkretnie w trybie normalnym, trybie wizualnym, trybie wyboru i tryb oczekiwania operatora). Jeśli chcesz, aby mapowanie działało w trybie wstawiania, wiersza poleceń lub lang-arg, musisz użyć :map!
itp. (Źródło: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
Myślę, że dokumentacja Vima powinna była wyjaśnić znaczenie nazewnictwa tych poleceń. Samo powiedzenie, co robią, nie pomaga zapamiętać nazwisk.
map
to „root” wszystkich rekurencyjnych poleceń mapowania. Formularz główny dotyczy trybów „normalny”, „wizualny + wybór” i „oczekiwanie na operatora”. (Używam terminu „root” jak w lingwistyce .)
noremap
jest „rootem” wszystkich nierekurencyjnych poleceń mapowania. Formularz główny dotyczy tych samych trybów co map
. (Pomyśl o nore
przedrostku oznaczającym „nierekurencyjny”).
(Pamiętaj, że istnieją również takie !
tryby, map!
które dotyczą wstawiania i wiersza poleceń).
Zobacz poniżej, co oznacza „rekurencyjny” w tym kontekście.
Przygotowując literę trybu, taką jak n
modyfikacja trybów, w których działa mapowanie. Może wybrać podzbiór listy odpowiednich trybów (np. Tylko „wizualny”) lub wybrać inne tryby, map
które nie miałyby zastosowania (np. „Wstaw”).
Użyj help map-modes
pokaże ci kilka tabel wyjaśniających, w jaki sposób kontrolować, które tryby mają zastosowanie do mapowania.
Litery trybu:
n
: tylko normalnev
: wizualne i wybierzo
: oczekuje na operatorax
: tylko wizualnies
: wybierz tylkoi
: wstawc
: wiersz poleceńl
: wstawianie, wiersz poleceń, wyszukiwanie wyrażeń regularnych (i inne. Zbiorowo nazywane pseudo-trybem „Lang-Arg”)„ Rekurencyjny ” oznacza, że mapowanie jest rozwijane do wyniku, następnie wynik jest rozwijany do innego wyniku i tak dalej.
Rozszerzenie zatrzymuje się, gdy spełniony jest jeden z poniższych warunków:
W tym momencie stosuje się / wykonuje domyślne „znaczenie” końcowego wyniku Vima.
„ Nierekurencyjny ” oznacza, że mapowanie jest rozszerzane tylko raz, a wynik jest stosowany / wykonywany.
Przykład:
nmap K H
nnoremap H G
nnoremap G gg
Powyższe powoduje K
rozszerzenie do H
, a następnie H
rozszerzenie G
i zatrzymanie. Zatrzymuje się z powodu nnoremap
, który rozszerza się i zatrzymuje natychmiast. Znaczenie G
zostanie wykonane (tj. „Skok do ostatniej linii”). Co najwyżej jedno nierekurencyjne mapowanie zostanie kiedykolwiek zastosowane w łańcuchu ekspansji (byłoby to ostatnie rozszerzenie).
Mapowanie G
na gg
ma zastosowanie tylko po naciśnięciu G
, ale nie po naciśnięciu K
. To odwzorowanie nie wpływa na naciśnięcie K
niezależnie od tego, czy G
zostało odwzorowane rekurencyjnie, czy nie, ponieważ jego linia 2 powoduje K
zatrzymanie ekspansji , więc linia 3 nie będzie używana.
map
dotyczy tylko trybów normalnego, wizualnego, wyboru i oczekiwania operatora, a nie wszystkich trybów.
Jedną różnicą jest to, że:
:map
robi nvo
== normalny + (wizualny + wybierz) + operator w toku:map!
robi ic
== wstaw + tryb wiersza poleceńjak podano w help map-modes
tabelach.
Więc: map
nie mapuje na wszystkie tryby .
Aby odwzorować na wszystkie tryby, potrzebujesz zarówno :map
i :map!
.
command mode
to kolejna historyczna nazwa normal mode
viz. rozdział 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). Skrót „c” oznacza „wiersz poleceń”. Innymi słowy: domyślnie: map! lhs rhs
rekurencyjnie mapuje lhs na rhs dla trybów wstawiania + linia poleceń . Jest tak, chyba że remap
domyślna opcja jest wyraźnie wyłączona set noremap[!]
w ~ / .vimrc. W takim przypadku mapowanie nie byłoby rekurencyjne (niewskazane).
vnoremap
ivmap
pracuj w trybie Visual AND Select. Aby mieć mapowanie tylko w trybie wizualnym, użyjxmap
ixnoremap
.