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

89

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

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

К. Норберт
источник
4
Говоря о случайных столкновениях определяемых пользователем сопоставлений, действительно хорошая практика - использовать mapleader
derenio

Ответы:

79

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

:help index 

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

пропустить
источник
очень полезно! Приятно знать, что есть место, куда можно пойти и поискать, если вы просто хотите
покопаться,
40

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

: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
Hieu
источник
Если новые версии Vim внезапно не предлагают лучшую альтернативу, это кажется единственным способом поиска как включенных, так и пользовательских раскладок. mapcheck(как упоминалось в другом ответе ) также охватывает только настраиваемые сочетания клавиш. Основное различие между выводом в текстовый файл и проверкой карты заключается в том, что вывод в текстовый файл и / или использование :help indexпозволяет вам /C-wв Vim находить что угодно, используяC-w
Зои
33

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

В этом разделе справки есть рекомендации о том, как определить, сопоставлен ли конкретный ключ действию.

Рэнди Моррис
источник
19

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

Shindojin
источник
Если вы хотите узнать, какие клавиши запускают определенную команду, вы можете сделать это:: redir keys.txt: map: redir end Затем откройте файл keys.txt и найдите, какие команды связаны.
Christian Oudard,
18

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

  • Q (перейти в режим «Ex»)
  • Z кроме ZZ, ZQ
  • \
  • <Space>(так же, как lв обычном режиме; самая большая и самая недоиспользуемая клавиша в нормальном режиме)
  • gb, gc, gl, gx, gy, gz
  • gs (сон)
  • 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-K
  • CTRL- \ a - z (зарезервировано для расширений)
  • CTRL- \ A - Z (не используется)

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

Михал Чизмазия
источник
12

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

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

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

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

Моха всемогущий верблюд
источник
Я попытался проверить, привязан ли «o» к чему-либо в нормальном режиме, с помощью следующего: if mapcheck («o», «N») == «» | echo «нет сопоставления», но он сообщает «нет сопоставления», когда o определенно привязан к «открывать новую строку». Я неправильно это использую?
К. Норберт
@ K.Norbert: Я верю, что это для пользовательских отображений
Моха, всемогущий верблюд