Po pierwsze, map
i noremap
są podobne w tym, że każde stworzenie mapowania dla normalnego, wizualne, wybierz i operator czeka trybów równocześnie . Vim szczegółowo to w :help map-overview
:
Overview of which map command works in which mode. More details below.
COMMANDS MODES ~
:map :noremap :unmap Normal, Visual, Select, Operator-pending
:nmap :nnoremap :nunmap Normal
:vmap :vnoremap :vunmap Visual and Select
:smap :snoremap :sunmap Select
:xmap :xnoremap :xunmap Visual
:omap :onoremap :ounmap Operator-pending
:map! :noremap! :unmap! Insert and Command-line
:imap :inoremap :iunmap Insert
:lmap :lnoremap :lunmap Insert, Command-line, Lang-Arg
:cmap :cnoremap :cunmap Command-line
Zgodnie z powyższą pomocą, jeśli chcesz ograniczyć mapowanie do określonego trybu, musisz wcześniej:
„n” (dla trybu normalnego), „v” (dla trybu wizualnego i wyboru), „c” (dla polecenia), „x” (dla trybu wizualnego), „s” (dla wyboru), „o” (dla operatora w toku ).
Na przykład,
nmap n nzz
stworzy tryb normalny, mapowanie rekurencyjne n
.
Teraz noremap
jest tylko nierekurencyjną wersją map
.
Czym jest mapowanie nierekurencyjne? Vim też ma na to odpowiedź :help map-recursive
:
If you include the {lhs} in the {rhs} you have a recursive mapping. When
{lhs} is typed, it will be replaced with {rhs}. When the {lhs} which is
included in {rhs} is encountered it will be replaced with {rhs}, and so on.
This makes it possible to repeat a command an infinite number of times. The
only problem is that the only way to stop this is by causing an error. The
macros to solve a maze uses this, look there for an example. There is one
exception: If the {rhs} starts with {lhs}, the first character is not mapped
again (this is Vi compatible).
For example: >
:map ab abcd
will execute the "a" command and insert "bcd" in the text. The "ab" in the
{rhs} will not be mapped again.
Przykładem tego jest mapowanie następujących elementów:
:imap j k
:imap k j
Teraz vim zamieni j razy k i k j nieskończoną liczbę razy i dlatego pokaże ci błąd, że stworzyłeś mapowanie rekurencyjne.
Dlatego generalnie zaleca się, aby prawie zawsze (z wyjątkiem <Plug>
mapowań lub podobnych) używać mapowań nierekurencyjnych. Zapobiega to zawieszaniu się Vima podczas nieumyślnego tworzenia mapowań rekurencyjnych. Mapowanie nierekurencyjne jest zatem bezpieczniejszym sposobem mapowania poleceń w Vimie.
Biorąc pod uwagę powyższe informacje, możemy zobaczyć, że :noreabbrev
jest to nierekurencyjna wersja :abbrev
polecenia.
Możesz używać :abbrev
tylko w trybach wstawiania, zastępowania i poleceń. :abbrev
służy do tworzenia skrótów (skrótów, które Vim może rozwinąć). Krótkie wyjaśnienie polega na użyciu :map
/ :noremap
do tworzenia mapowań, :abbrev
/ :noreabbrev
do tworzenia skrótów lub za każdym razem, gdy chcesz, aby Vim rozwinął pisanie.