От :h mapmode-n
:
Есть шесть наборов отображений
- Для нормального режима: при наборе команд.
- Для визуального режима: при наборе команд, когда выделена визуальная область.
- Для режима выбора: аналогично визуальному режиму, но ввод текста заменяет ввод текста.
- Для режима ожидания оператора: когда оператор находится в режиме ожидания (после "d", "y", "c" и т.д.). Смотрите ниже: | omap-info |.
- Для режима вставки. Они также используются в режиме замены.
- Для режима командной строки: при вводе команды «:» или «/».
Существует много разных способов составления карт. Если вы :h map
, вы увидите, в каких режимах различные команды отображают режимы для:
: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*
Как вы можете видеть ,::map
говорит mapmode-nvo
, что означает нормальный, визуальный и операторский режим ожидания. По этой причине map x y
не работает в обычном режиме. Просматривая этот список, вы можете увидеть, что ни у одного из них нет mapmode-in
, поэтому нет единого способа сделать это. Так что вам нужно будет сделать nmap x y
и imap x y
. Или, если вы хотите, чтобы он применялся для каждого режима, map x y
и map! x y
Просто написание двух строк создает много беспорядка, когда делается для нескольких отображений.
Если вы действительно делаете много отображений, вы можете сделать это:
function! DoubleMap(x, y)
exec "nmap ".x." ".y
exec "imap ".x." ".y
endfunction
затем
imap x y
nmap x y
imap foo bar
nmap foo bar
imap blah spam
nmap blah spam
становится
call DoubleMap('x', 'y')
call DoubleMap('foo', 'bar')
call DoubleMap('blah', 'spam')
Но это будет проблемой, если в вашем отображении есть кавычки или непечатные символы.