От :h mapmode-n
:
Есть шесть наборов отображений
- Для нормального режима: при наборе команд.
- Для визуального режима: при наборе команд, когда выделена визуальная область.
- Для режима выбора: аналогично визуальному режиму, но ввод текста заменяет ввод текста.
- Для режима ожидания оператора: когда оператор находится в режиме ожидания (после «d», «y», «c» и т. Д.). Смотрите ниже: | omap-info |.
- Для режима вставки. Они также используются в режиме замены.
- Для режима командной строки: при вводе команды «:» или «/».
Существует много разных способов составления карт. Если вы :h map
, вы увидите, какие режимы различные команды отображают режимы для:
:map |mapmode-nvo| *:map* :nm[ap] |mapmode-n| *:nm* *:nmap* :vm[ap] |mapmode-v| *:vm* *:vmap* :xm[ap] |mapmode-x| *:xm* *:xmap* :smap |mapmode-s| *:smap* :om[ap] |mapmode-o| *:om* *:omap* :map! |mapmode-ic| *:map!* :im[ap] |mapmode-i| *:im* *:imap* :lm[ap] |mapmode-l| *:lm* *:lmap* :cm[ap] |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')
Но это будет проблемой, если в вашем отображении есть кавычки или непечатные символы.