Відповіді:
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
: вставка, командний рядок, 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
віз. розділ 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). Абревіатура "c" означає "командний рядок". Іншими словами, за замовчуванням: map! lhs rhs
рекурсивно відображає lhs в rhs для режимів insert + command-LINE . Тобто, якщо параметр remap
за замовчуванням явно не вимкнено set noremap[!]
в ~ / .vimrc. У такому випадку картографування не буде рекурсивним (не доцільним).
vnoremap
таvmap
працюйте в режимі Visual AND Select. Щоб мати відображення лише у візуальному режимі, використовуйтеxmap
таxnoremap
.