Innanzitutto, map
e noremap
sono simili per il fatto che ognuno di essi crea mappature per le modalità normale, visiva, di selezione e operatore in sospeso contemporaneamente . Vim dettaglia questo in :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
Come per la guida di cui sopra, se si desidera limitare la mappatura a una modalità specifica, è necessario anteporre:
'n' (per normale), 'v' (per visivo e seleziona), 'c' (per comando), 'x' (per modo visivo), 's' (per selezione), 'o' (per operatore in sospeso ).
Per esempio,
nmap n nzz
creerà una modalità normale, mappatura ricorsiva di n
.
Ora, noremap
è solo una versione non ricorsiva di map
.
Cos'è la mappatura non ricorsiva? Anche Vim ha la risposta, con :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.
Un esempio di questo è il mapping di quanto segue:
:imap j k
:imap k j
Ora, vim sostituirà j con k e k con j un numero infinito di volte e mostrerà quindi un errore che hai creato una mappatura ricorsiva.
Questo è il motivo per cui in genere si consiglia di utilizzare quasi sempre (tranne quando si dispone di <Plug>
mapping o simili) mapping non ricorsivi. Ciò impedisce che Vim si blocchi quando si creano inavvertitamente mappature ricorsive. La mappatura non ricorsiva è quindi un modo più sicuro per mappare i comandi in Vim.
Con le informazioni di cui sopra a portata di mano, possiamo vedere che :noreabbrev
è solo una versione non ricorsiva del :abbrev
comando.
È possibile utilizzare :abbrev
solo nelle modalità di inserimento, sostituzione e comando. :abbrev
è usato per creare abbreviazioni, (ovvero le scorciatoie che Vim può espandere). La breve spiegazione è usare :map
/ :noremap
per creare mappature, :abbrev
/ :noreabbrev
per creare abbreviazioni o quando vuoi che Vim espanda la tua digitazione.