Команда Vim для самоанализа списка доступных команд

#vim

#vim

Вопрос:

Мне бы очень помогло иметь возможность просматривать список команд Vim и связанные метаданные (например, описание каждой команды, если у нее есть псевдонимы и т.д.).

Я понимаю, что с помощью плагинов Vim список команд может быть расширен, а также в зависимости от того, с какими параметрами был скомпилирован Vim, может быть изменен список доступных команд.

Я провел обширные поиски в Интернете в поисках таких вещей, как «команда vim для составления списка команд», но ничего не нашел. Единственные списки команд, которые я могу найти, — это статическая документация, в которой не учитывается версия Vim, которую вы используете (включая Neovim), какие плагины вы установили / включили и с какими параметрами Vim был скомпилирован.

Вопрос: Существует ли команда Vim, которая интроспективно перечисляет все доступные команды в Vim?

Комментарии:

1. Что вы считаете «командой»? И Vim имеет тысячи функций, режимов, нажатий клавиш, настроек.

2. Чем такая команда была бы полезна?

3. Возможно, это не то, что вы хотите, но вот достаточная подсказка, чтобы вы начали стрелять себе в ногу: просто запустите :command .

Ответ №1:

В searchInRuntime у меня есть следующая функция, которая выводит список всех команд, начинающихся с начального текста (который может быть пустым). Это старый трюк, позволяющий получить то, что vim расширил бы с помощью завершения командной строки — :h c_CTRL-A .

 " s:MatchingCommands(ArgLead)                              {{{3
" return the list of custom commands starting by {FirstLetters}
function! s:MatchingCommands(ArgLead)
  silent! exe "norm! :".a:ArgLead."<c-a>"<home>let cmds="<cr>"
  let cmds = substitute(cmds, 's ', 'n', 'g')
  " for your purpose, split is probably more fit
  return cmds
endfunction
  

Обратите внимание, что он не может знать, для чего предназначены команды. В лучшем случае, вы можете получить определение пользовательских команд благодаря execute('verbose command '.cmdname) ( execute() это совсем новая функция).

Кстати, обратите внимание, что в отличие от execute('command') , в этом решении также перечислены стандартные команды, а не только команды, определенные пользователем.

Что касается других действий, доступных в vim (на случай, если вы не просто искали команды vim), в то время как мы можем перечислить пользовательские сопоставления (даже, возможно, даже знаем, что они выполняются, когда они полагаются на хорошо названные подключаемые сопоставления), нет способа перечислить какие-либо другие действия, такие как dd , J

Ответ №2:

Узнайте, как искать команды и перемещаться по встроенному :help (есть автоматическое завершение, список всех кандидатов с Ctrl A и так далее); это всеобъемлющее приложение, а также предлагает множество советов. Большинство (хороших) плагинов также предоставляют свои собственные страницы справки, поэтому я думаю, что это лучше всего отвечает на ваш вопрос.

Не пытайтесь реализовать какой-либо самоанализ (как заметил один из комментаторов, «выстрелив себе в ногу»); скорее, используйте существующие возможности Vim. Вы даже можете написать свои собственные страницы документации (в разделе ~/.vim/doc/*.txt) ; именно этим я и занимаюсь: собираю советы и короткие клипы из других источников справки. И это предлагает место для документирования некоторых старых плагинов, у которых нет собственной страницы справки.