De :h mapmode-n
:
There are six sets of mappings
- For Normal mode: When typing commands.
- For Visual mode: When typing commands while the Visual area is highlighted.
- For Select mode: like Visual mode but typing text replaces the selection.
- For Operator-pending mode: When an operator is pending (after "d", "y", "c", etc.). See below: |omap-info|.
- For Insert mode. These are also used in Replace mode.
- For Command-line mode: When entering a ":" or "/" command.
Existem muitas maneiras diferentes de fazer um mapeamento. Se você :h map
, você verá quais modos os vários comandos mapeiam modos para:
:map {lhs} {rhs} |mapmode-nvo| *:map*
:nm[ap] {lhs} {rhs} |mapmode-n| *:nm* *:nmap*
:vm[ap] {lhs} {rhs} |mapmode-v| *:vm* *:vmap*
:xm[ap] {lhs} {rhs} |mapmode-x| *:xm* *:xmap*
:smap {lhs} {rhs} |mapmode-s| *:smap*
:om[ap] {lhs} {rhs} |mapmode-o| *:om* *:omap*
:map! {lhs} {rhs} |mapmode-ic| *:map!*
:im[ap] {lhs} {rhs} |mapmode-i| *:im* *:imap*
:lm[ap] {lhs} {rhs} |mapmode-l| *:lm* *:lmap*
:cm[ap] {lhs} {rhs} |mapmode-c| *:cm* *:cmap*
Como você pode ver, :map
diz mapmode-nvo
, que significa o modo normal, visual e com operador pendente . Essa é a razão pela qual map x y
não funciona no modo normal. Olhando através desta lista, você pode ver como nenhum deles tem mapmode-in
, então não há uma maneira de fazer isso. Então você precisará fazer nmap x y
e imap x y
. Ou se você quiser aplicar em todos os modos, map x y
e map! x y
.
Just writing two lines produces a lot of clutter when done for multiple mappings.
Se você realmente estiver fazendo muitos mapeamentos, poderá fazer isso:
function! DoubleMap(x, y)
exec "nmap ".x." ".y
exec "imap ".x." ".y
endfunction
Então
imap x y
nmap x y
imap foo bar
nmap foo bar
imap blah spam
nmap blah spam
Torna-se
call DoubleMap('x', 'y')
call DoubleMap('foo', 'bar')
call DoubleMap('blah', 'spam')
Mas isso será um problema se o seu mapeamento tiver cotações ou caracteres não imprimíveis.