Risposte:
remap
è un'opzione che fa funzionare ricorsivamente i mapping. Di default è attivo e ti consiglio di lasciarlo così. Il resto sono comandi di mappatura , descritti di seguito:
:map
e :noremap
sono versioni ricorsive e non ricorsive dei vari comandi di mappatura. Ciò significa che se lo fai:
:map j gg
:map Q j
:noremap W j
j
verrà mappato a gg
. Q
verrà anche mappato su gg
, poiché j
verrà espanso per il mapping ricorsivo. W
verrà mappato su j
(e non su gg
) perché j
non verrà espanso per il mapping non ricorsivo.
Ora ricorda che Vim è un editor modale . Ha una modalità normale , visiva e altre modalità.
Per ognuna di queste serie di mappature, esiste una mappatura che funziona in modalità normale, visiva, di selezione e operatore ( :map
e :noremap
), una che funziona in modalità normale ( :nmap
e :nnoremap
), una in modalità visiva ( :vmap
e :vnoremap
) e così via.
Per ulteriori indicazioni al riguardo, vedere:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
noremap
di essere un opposto di map
. Intendo qualcosa che rimuove una mappatura. Grazie per la risposta. Mi ha chiarito
:map
, ecc. Non funzionano in tutte le modalità, esattamente, solo quelle comuni (in particolare, modalità normale, modalità visiva, modalità di selezione e modalità operatore in attesa). Se si desidera che un mapping funzioni in modalità insert, riga di comando o lang-arg, è necessario utilizzare :map!
, ecc. (Fonte: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
Penso che la documentazione di Vim avrebbe dovuto spiegare il significato dietro la denominazione di questi comandi. Solo dirti cosa fanno non ti aiuta a ricordare i nomi.
map
è la "radice" di tutti i comandi di mappatura ricorsiva. Il modulo radice si applica alle modalità "normale", "visivo + selezione" e "in attesa dell'operatore". (Sto usando il termine "radice" come in linguistica .)
noremap
è la "radice" di tutti i comandi di mappatura non ricorsivi. Il modulo radice si applica alle stesse modalità di map
. (Pensa al nore
prefisso come "non ricorsivo".)
(Notare che ci sono anche le !
modalità come map!
quelle applicabili per inserire e riga di comando.)
Vedi sotto per cosa significa "ricorsivo" in questo contesto.
Preparare una lettera di modalità come n
modificare le modalità in cui funziona la mappatura. Può scegliere un sottoinsieme dell'elenco di modalità applicabili (ad esempio solo "visivo") o scegliere altre modalità che map
non si applicano (ad esempio "inserire").
L'uso help map-modes
mostrerà alcune tabelle che spiegano come controllare a quali modalità si applica la mappatura.
Lettere modalità:
n
: solo normalev
: visivo e selezionao
: operatore in sospesox
: solo visivos
: seleziona soloi
: inserirec
: riga di comandol
: insert, riga di comando, regexp-search (e altri. Collettivamente chiamato pseudo-modalità "Lang-Arg")" Ricorsivo " significa che la mappatura viene espansa in un risultato, quindi il risultato viene espanso in un altro risultato e così via.
L'espansione si interrompe quando uno di questi è vero:
A quel punto, il "significato" predefinito di Vim del risultato finale viene applicato / eseguito.
" Non ricorsivo " significa che la mappatura viene espansa una sola volta e quel risultato viene applicato / eseguito.
Esempio:
nmap K H
nnoremap H G
nnoremap G gg
Quanto sopra fa K
espandere a H
, quindi H
espandere G
e arrestare. Si interrompe a causa di nnoremap
, che si espande e si interrompe immediatamente. Il significato di G
verrà eseguito (ovvero "passa all'ultima riga"). Al massimo una mappatura non ricorsiva verrà mai applicata in una catena di espansione (sarebbe l'ultima espansione a verificarsi).
La mappatura di G
to gg
si applica solo se si preme G
, ma non se si preme K
. Questa mappatura non influisce sulla pressione K
indipendentemente dal fatto che sia G
stata mappata in modo ricorsivo o meno, poiché è la linea 2 che provoca l' K
arresto dell'espansione , quindi la linea 3 non verrebbe utilizzata.
map
vale solo per le modalità normali, visive, di selezione e in attesa dell'operatore, non per tutte le modalità.
Una differenza è che:
:map
fa nvo
== normale + (visivo + seleziona) + operatore in sospeso:map!
fa ic
== inserto + modalità riga di comandocome indicato nelle help map-modes
tabelle.
Quindi: map
non mappa a tutte le modalità .
Per mappare a tutte le modalità sono necessari entrambi :map
e :map!
.
command mode
è un altro nome storico per normal mode
vale a dire. cap. 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). L'abbreviazione 'c' sta per 'riga di comando'. In altre parole, per impostazione predefinita: mappa map! lhs rhs
ricorsivamente da lhs a rhs per le modalità insert + command-LINE . Questo a meno che l' remap
opzione predefinita non sia esplicitamente disabilitata con set noremap[!]
in ~ / .vimrc. In tal caso la mappatura non sarebbe ricorsiva (non consigliabile).
vnoremap
evmap
funziona in modalità Visual AND Select. Per avere una mappatura solo in modalità Visual, usarexmap
exnoremap
.