Відповіді:
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.