В чем разница между командами remap, noremap, nnoremap и vnoremap mapping в vim?



в чем разница между командами remap, noremap, nnoremap и vnoremap mapping в vim?

849   4  

4 ответов:

remap это опции что делает отображения работают рекурсивно. По умолчанию он включен и я бы рекомендовал вам оставить все как есть. Остальные команды отображения, описано ниже:

:map и :noremap are рекурсивные и нерекурсивный версии различных команд отображения. Это означает, что если вы делаете:

:map j gg
:map Q j
:noremap W j

j будет соответствовать gg. Q будет и быть сопоставлены с gg, потому что j будет расширен для рекурсивного отображения. W будет соответствовать j (а не gg), поскольку j не будет расширен для нерекурсивного отображения.

теперь помните, что Vim-это модальный редактор. Он имеет нормальный режим визуальный режим и другие режимы.

для каждого из этих наборов отображений, есть картография что работает в обычном, визуальном, выберите оператора и режима (:map и :noremap), который работает в обычном режиме (:nmap и :nnoremap), в визуальном режиме (:vmap и :vnoremap) и так далее.

дополнительные указания см. В разделе:

:help :map
:help :noremap
:help recursive_mapping
:help :map-modes

я думаю, что документация vim должна была объяснить смысл именования этих команд. Просто сказать вам, что они делают, не поможет вам вспомнить имена.

map является "корнем" всех рекурсивных команд отображения. Корневая форма применяется к режимам" normal"," visual+select "и" operator-pending". (Я использую термин "корень" в Лингвистика.)

noremap является "корнем" всех нерекурсивных команд отображения. Корневая форма применяется к тем же режимам, что и map. (Подумайте о nore префикс означает "нерекурсивный".)

(обратите внимание, что есть также ! режимами, такими как map! которые применяются для вставки и командной строки.)

смотрите ниже, что означает "рекурсивный" в этом контексте.

добавление буквы режима, как n измените режимы, в которых работает отображение. Он может выбрать подмножество списка применимых режимов (например, только "визуальный") или выбрать другие режимы, которые map не будет применяться к (например, "вставить").

использовать help map-modes покажет вам несколько таблиц, которые объясняют, как управлять режимами отображения применяется.

режим письма:

  • n: нормально только
  • v: визуальный и выберите
  • o: оператор-до
  • x: только визуальный
  • s: выберите только
  • i вставить
  • c: командная строка
  • l: вставка, командная строка, регулярное выражение-поиск (и другие. Коллективно называется" Lang-Arg " псевдо-режим)

"рекурсивные " означает, что отображение расширяется до результата, затем результат расширяется до другого результата и так далее.

расширение останавливается, когда один из них истинен:

  1. результат больше не отображается ни на что другое.
  2. нерекурсивное отображение было применяется (т. е. "noremap" [или один из его подобных] является окончательным расширением).

в этот момент применяется/выполняется значение по умолчанию vim для конечного результата.

"нерекурсивный " означает, что отображение расширяется только один раз, и этот результат применяется/выполняется.

пример:

 nmap K H
 nnoremap H G
 nnoremap G gg

вышеуказанные причины K расширить до H, потом H расширить до G и прекратить. Он останавливается из-за nnoremap, которая расширяется и немедленно останавливается. Значение G будет выполнен (т. е."перейти к последней строке"). Самое большее одно нерекурсивное отображение будет когда-либо применено в цепочке расширения (это будет последнее расширение).

карт G до gg применяется только при нажатии G, но не при нажатии K. Это сопоставление не влияет на нажатие K независимо от того, является ли G был отображен рекурсивно или нет, так как это строка 2, что вызывает расширение K остановить, поэтому строка 3 не будет использоваться.

осторожностью vnoremap и vmap работа в визуальном и выберите режим. Чтобы иметь отображение только в визуальном режиме, используйте xmap и xnoremap.

одно отличие в том, что:

  • :map тут nvo = = normal + (visual + select) + оператор в ожидании
  • :map! тут ic = = вставить + режим командной строки

как заявил help map-modes таблицы.

так: map не сопоставляется со всеми режимами.

для отображения на все режимы вам нужно как :map и :map!.

Comments

    Ничего не найдено.