Определить, привязан ли ключ к чему-либо в vim

Я хотел бы знать, есть ли способ выяснить, делает ли ключ что-то в vim. Я знаю, что могу использовать :map для просмотра пользовательских сопоставлений, но есть ли что-то для встроенных функций?

Например, у меня всегда было CTRL-W, связанное с закрытием вкладки, потому что я думал, что она не используется. Через полгода я узнал, что есть некоторые последовательности, которые его используют, например CTRL-W CTRL-S разделить окно, а переучивать себя было кошмаром.


person K. Norbert    schedule 20.03.2010    source источник
comment
Говоря о случайных коллизиях пользовательских сопоставлений, рекомендуется использовать маплидер   -  person derenio    schedule 27.02.2013


Ответы (6)


Если вы посмотрите предложенный ответ Рэнди Морриса, вы обнаружите, что

:help index 

даст вам список, который вы хотите.

person skeept    schedule 20.03.2010
comment
очень полезно! приятно знать, что есть место, куда вы можете пойти посмотреть, если вы просто хотите поковыряться, чтобы узнать что-то новое - person JonnyRaa; 13.04.2015

Чтобы проверить сопоставление по умолчанию:

:help index

Для другого сопоставления, которое выполняется пользователями или плагином:

:map
:map!

Из http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-Учебник( Часть_1):

Первая команда отображает карты, которые работают в обычном, визуальном и режиме выбора и ожидания оператора. Вторая команда отображает карты, которые работают в режиме вставки и командной строки.

Обычно вывод вышеуказанных команд занимает несколько страниц. Вы можете использовать следующий набор команд для перенаправления вывода в файл vim_maps.txt:

:redir! > vim_maps.txt
:map
:map!
:redir END
person Hieu    schedule 20.04.2013
comment
Если более новые версии Vim внезапно не предлагают лучшую альтернативу, это, кажется, единственный способ поиска как включенных, так и пользовательских раскладок. mapcheck (как упоминалось в другом ответе) также охватывает только пользовательские сочетания клавиш. Основное различие между выводом в текстовый файл и проверкой карты заключается в том, что вывод в текстовый файл и/или использование :help index позволяет вам /C-w в Vim найти что-либо с помощью C-w - person Zoe; 14.08.2019

Неполный ответ, но вы можете проверить :help map-which-keys список ключей, которые vim рекомендует использовать в ваших пользовательских картах.

В этом разделе справки есть рекомендация о том, как определить, сопоставлена ​​​​ли конкретная клавиша с действием.

person Randy Morris    schedule 20.03.2010

Я просмотрел :help index и составил список некоторых неиспользуемых ключей nmap:

  • Q (переключиться в режим «Ex»)
  • Z кроме ZZ, ZQ
  • \
  • <Space> (то же, что и l в обычном режиме; самая большая и наименее используемая клавиша в обычном режиме)
  • gb, gc, gl, gx, gy, gz
  • гс (сон)
  • zp, zq, zu, zy
  • cd, cm, co, cp, cq, cr, cs, cu, cx, cy
  • dc, dm, do, dp, dq, dr, ds, du, dx, dy
  • gA, gB, gC, gG, gK, gL, gM, gO, gS, gX, gY, gZ
  • zB, zI, zJ, zK, zP, zQ, zP, zS, zT, zU, zV, zY, zZ
  • ]a, ]b, ]e, ]g, ]h, ]j, ]k, ]l, ]n, ]o, ]q, ]r, ]t, ]u, ]v, ]w, ]x, ]y
  • [a, [b, [e, [g, [h, [j, [k, [l, [n, [o, [q, [r, [t, [u, [v, [w, [x, [y
  • CTRL-G, CTRL-К
  • CTRL-\ a - z (зарезервировано для расширений)
  • CTRL-\A-Z (не используется)

Пожалуйста, обновите / прокомментируйте.

person Michal Čizmazia    schedule 06.02.2016

Используйте :map! и :map для ключей, установленных вручную, и :help 'char(-combination)', чтобы узнать, какие ключи уже сопоставлены в vim "из коробки" (/ вне ваших конкретных параметров компиляции). (Немного не по теме, но все же важно (я думаю): используйте :scriptnames, чтобы увидеть, какие файлы были получены в каком порядке.)

person shindojin    schedule 18.01.2011
comment
Если вы хотите найти, какие клавиши запускают определенную команду, вы можете сделать это: :redir keys.txt :map :redir end Затем откройте keys.txt и найдите, какие команды связаны. - person Christian Oudard; 14.09.2012

Вы можете использовать mapcheck.:-

Например, я хотел сопоставить <CR> ,i с gg=G для отступа в файле. Чтобы проверить, есть ли уже сопоставление для <CR> , i

if mapcheck("\<CR>", "I") == "" |echo "no mapping"

... но это не обнаружит, является ли сопоставление частью последовательности.

person Moha the almighty camel    schedule 01.11.2013
comment
Я попытался проверить, привязан ли o к чему-либо в обычном режиме, с помощью следующего: if mapcheck(o, N) == | echo нет сопоставления, но он сообщает об отсутствии сопоставления, когда o определенно привязан к открытию новой строки. Я использую это неправильно? - person K. Norbert; 03.01.2014
comment
@K.Norbert: я считаю, что это для пользовательских сопоставлений. - person Moha the almighty camel; 23.04.2014