Esses comandos transformam um conjunto de pressionamentos de tecla em outro de alguma forma, mas estou um pouco confuso sobre qual é o mais apropriado para alguma situação. Além disso, existem as !
variantes deles também. No momento, meu uso deles é bastante casual, então eu poderia saber quais são as armadilhas associadas a cada um? Em particular, notas sobre as várias versões de modo podem ser úteis, pois aprendi com Peter Rincker em um comentário que cmap
pode se expandir praticamente em qualquer lugar da linha e não apenas quando estou usando :
comandos. Que precauções posso tomar contra possíveis armadilhas?
19
Respostas:
Primeiro,
map
enoremap
são semelhantes, pois cada um cria mapeamentos para os modos normal, visual, de seleção e de operador pendente simultaneamente . O Vim detalha isso em:help map-overview
:De acordo com a ajuda acima, se você deseja restringir o mapeamento a um modo específico, você deve acrescentar:
'n' (para normal), 'v' (para visual e select), 'c' (para comando), 'x' (para modo visual), 's' (para select), 'o' (para operador pendente )
Por exemplo,
nmap n nzz
criará um modo normal, mapeamento recursivo de
n
.Agora,
noremap
é apenas uma versão não recursiva domap
.Então, o que é mapeamento não recursivo? O Vim também tem a resposta, com
:help map-recursive
:Um exemplo disso é o mapeamento do seguinte:
:imap j k
:imap k j
Agora, o vim substituirá j por k ek por j número infinito de vezes e, portanto, mostrará um erro de que você criou um mapeamento recursivo.
É por isso que geralmente é recomendável que você quase sempre (exceto quando tiver
<Plug>
mapeamentos ou similares) use mapeamentos não recursivos. Isso evita que o Vim seja interrompido quando você cria inadvertidamente mapeamentos recursivos. O mapeamento não recursivo é, portanto, uma maneira mais segura de mapear comandos no Vim.Com as informações acima em mãos, podemos ver que
:noreabbrev
é apenas uma versão não recursiva do:abbrev
comando.Você pode usar
:abbrev
apenas nos modos de inserção, substituição e comando.:abbrev
é usado para criar abreviações (também conhecidas como atalhos que o Vim pode expandir). A pequena expansão é usar:map
/:noremap
para criar mapeamentos,:abbrev
/:noreabbrev
para criar abreviações, ou sempre que você desejar que o Vim expanda sua digitação.fonte
nore
formulários do comando map. Outra (e na minha opinião, mais importante) razão para usá-los é que eles tornam seus mapeamentos confiáveis / previsíveis. Se você usar o formulário simples e orhs
contiver uma chave que por acaso seja mapeada para outra coisa, seu mapeamento poderá ter um comportamento totalmente diferente do pretendido.