Ответы:
remap
это опция, которая заставляет отображения работать рекурсивно. По умолчанию он включен, и я бы рекомендовал оставить его таким. Остальные являются командами отображения , описанными ниже:
:map
и :noremap
являются рекурсивными и нерекурсивными версиями различных команд отображения. Это означает, что если вы делаете:
: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
noremap
быть какой-то противоположностью map
. Я имею в виду то, что удаляет отображение. Спасибо за ответ. Это разъяснило мне
:map
и т. Д. Не работают во всех режимах, а точнее, во всех общих (в частности, обычный режим, визуальный режим, режим выбора и режим ожидания оператора). Если вы хотите, чтобы отображение работало в режиме вставки, командной строки или в режиме lang-arg, вам нужно его использовать :map!
и т. Д. (Источник: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
Я думаю, что документация Vim должна была объяснить смысл именования этих команд. Просто сказать вам, что они делают, не поможет вам вспомнить имена.
map
является «корнем» всех команд рекурсивного отображения. Корневая форма применяется к режимам «нормальный», «визуальный + выбор» и «ожидание оператора». (Я использую термин «корень», как в лингвистике .)
noremap
является «корнем» всех нерекурсивных команд отображения. Корневая форма применяется к тем же режимам, что и map
. (Думайте, что nore
префикс означает «нерекурсивный».)
(Обратите внимание, что есть также такие !
режимы, какmap!
которые применяются для вставки и командной строки.)
Смотрите ниже, что означает «рекурсивный» в этом контексте.
Перед буквой режима, например, n
измените режимы, в которых работает отображение. Он может выбрать подмножество списка применимых режимов (например, только «визуальный») или выбрать другие режимы, к map
которым неприменимо (например, «вставить»).
Использование help map-modes
покажет вам несколько таблиц, которые объясняют, как управлять режимами, к которым применяется сопоставление.
Режим букв:
n
только нормальноv
: визуально и выберитеo
: ожидание оператораx
: только визуальныйs
: выберите толькоi
: вставитьc
: командная строкаl
: insert, командной строки, regexp-search (и другие. Все вместе называются псевдо-режимом «Lang-Arg»)" Рекурсивный » означает, что отображение расширяется до результата, затем результат расширяется до другого результата и т. Д.
Расширение останавливается, когда одно из них верно:
В этот момент «значение» окончательного результата по умолчанию 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 не будет использоваться.
map
применяется только к обычному, визуальному режиму, режимам выбора и ожидания оператора, а не ко всем режимам.
Одно из различий заключается в том, что:
:map
делает nvo
== нормальный + (визуальный + выбор) + оператор в ожидании:map!
делает ic
== вставка + режим командной строкикак указано в help map-modes
таблицах.
Итак: map
не отображается на все режимы .
Для отображения на все режимы вам нужны оба :map
и :map!
.
command mode
это другое историческое название для normal mode
Viz. глава 5 ( vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). Аббревиатура «с» для «командной строки». Другими словами, по умолчанию: map! lhs rhs
рекурсивно отображает lhs в rhs для режимов insert + command-LINE . Это если только remap
опция по умолчанию явно не отключена с помощью set noremap[!]
~ / .vimrc. В этом случае отображение не будет рекурсивным (не рекомендуется).
vnoremap
иvmap
работайте в режиме Visual AND Select. Для отображения только в визуальном режиме используйтеxmap
иxnoremap
.