Respostas:
remap
é uma opção que faz com que os mapeamentos funcionem recursivamente. Por padrão, está ativado e eu recomendo que você deixe assim. O restante são comandos de mapeamento , descritos abaixo:
:map
e :noremap
são versões recursivas e não recursivas dos vários comandos de mapeamento. O que isso significa é que, se você fizer:
:map j gg
:map Q j
:noremap W j
j
será mapeado para gg
. Q
irá também ser mapeados para gg
, porque j
vai ser expandido para o mapeamento recursiva. W
será mapeado para j
(e não para gg
) porque j
não será expandido para o mapeamento não recursivo.
Agora lembre-se de que o Vim é um editor modal . Tem um modo normal , modo visual e outros modos.
Para cada um desses conjuntos de mapeamentos, existe um mapeamento que funciona nos modos normal, visual, de seleção e operador ( :map
e :noremap
), um que funciona no modo normal ( :nmap
e :nnoremap
), outro no modo visual ( :vmap
e :vnoremap
) e assim por diante.
Para mais orientação sobre isso, consulte:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
noremap
ser um oposto de map
. Quero dizer algo que remove um mapeamento. Obrigado pela resposta. Ele me esclareceu
:map
etc. não funcionam em todos os modos, exatamente, apenas nos comuns (especificamente, modo normal, modo visual, modo de seleção e pendente do operador). Se você deseja que um mapeamento funcione nos modos de inserção, linha de comando ou lang-arg, é necessário usá-lo :map!
etc. (Fonte: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
Eu acho que a documentação do Vim deveria ter explicado o significado por trás da nomeação desses comandos. Apenas dizer o que eles fazem não ajuda a lembrar os nomes.
map
é a "raiz" de todos os comandos de mapeamento recursivo. O formato raiz se aplica aos modos "normal", "visual + selecionar" e "pendente de operador". (Estou usando o termo "raiz" como na linguística .)
noremap
é a "raiz" de todos os comandos de mapeamento não recursivos. O formulário raiz se aplica aos mesmos modos que map
. (Pense no nore
prefixo como "não recursivo".)
(Observe que também existem os !
modos map!
aplicáveis à inserção e linha de comando.)
Veja abaixo o que "recursivo" significa neste contexto.
Anexar uma letra de modo como n
modificar os modos nos quais o mapeamento funciona. Ele pode escolher um subconjunto da lista de modos aplicáveis (por exemplo, apenas "visual") ou escolher outros modos que map
não se aplicariam (por exemplo, "inserir").
O uso help map-modes
mostrará algumas tabelas que explicam como controlar a quais modos o mapeamento se aplica.
Letras de modo:
n
: apenas normalv
: visual e selecioneo
: operador pendentex
: apenas visuals
: selecione apenasi
: inserirc
: linha de comandol
: inserção, linha de comando, pesquisa de expressão regular (e outros. Coletivamente chamados pseudo-modo "Lang-Arg")" Recursivo " significa que o mapeamento é expandido para um resultado, depois o resultado é expandido para outro resultado e assim por diante.
A expansão é interrompida quando uma delas é verdadeira:
Nesse ponto, o "significado" padrão do Vim do resultado final é aplicado / executado.
" Não recursivo " significa que o mapeamento é expandido apenas uma vez e esse resultado é aplicado / executado.
Exemplo:
nmap K H
nnoremap H G
nnoremap G gg
As causas acima K
se expandem para H
, depois H
se expandem para G
e param. Para por causa de nnoremap
, que expande e para imediatamente. O significado de G
será executado (ou seja, "pule para a última linha"). No máximo, um mapeamento não recursivo será aplicado em uma cadeia de expansão (seria a última expansão a ocorrer).
O mapeamento de G
para gg
somente se aplica se você pressionar G
, mas não se pressionar K
. Esse mapeamento não afeta a pressão, K
independentemente de ter G
sido mapeado recursivamente ou não, pois é a linha 2 que faz com que a expansão K
pare, portanto, a linha 3 não seria usada.
map
aplica-se apenas aos modos normal, visual, de seleção e pendente do operador, e não a todos os modos.
Uma diferença é que:
:map
faz nvo
== normal + (visual + selecionar) + operador pendente:map!
faz ic
== inserir + modo de linha de comandocomo indicado nas help map-modes
tabelas.
Então: map
não mapeia para todos os modos .
Para mapear para todos os modos, você precisa de ambos :map
e :map!
.
command mode
é outro nome histórico para normal mode
viz. capítulo 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). A abreviação 'c' é para 'linha de comando'. Em outras palavras, por padrão: mapeia map! lhs rhs
recursivamente lhs para rhs para os modos insert + command-LINE . Isto é, a menos que a remap
opção padrão seja explicitamente desabilitada com set noremap[!]
~ / .vimrc. Nesse caso, o mapeamento não seria recursivo (não recomendável).
vnoremap
evmap
trabalhe no modo Visual AND Select. Para ter um mapeamento apenas no modo Visual, usexmap
exnoremap
.