Можно ли создавать и использовать меню в (терминальном) vim?

18

Я настраиваю виртуализированные Linux-блоки (в качестве локальных серверов разработки) для разработчиков в компании, основанной преимущественно на Windows, и некоторые разработчики негативно относятся к vim (среди прочего). (Похоже, они каким-то образом представляют Linux / Unix и доказывают, что окружение нелепо сложно использовать.) Я помню, когда я впервые был вынужден использовать vim (системные администраторы отказались устанавливать emacs!) И сложный исходный код. Кривая обучения, так что я несколько сочувствую. Мне пришло в голову, что вместо того, чтобы представить их nano(которые они, вероятно, никогда не пройдут), можно было бы создать нано-подобные меню в vim, чтобы облегчить переход. (Я нашел для них очень удобный для начинающих файл .vimrc, но он не имеет ничего общего с меню в нано-стиле.)

Единственная проблема - единственное, что мне удалось обнаружить, что утверждения, что можно настроить меню в vim (не gvim), не сработали, а мои попытки исправить проблему просто оставили для меня еще одну проблему, которую нужно решить. Прежде чем тратить много времени, я хотел бы знать, возможно ли это на самом деле, поскольку информации о том, как это сделать, кажется очень мало.

иконоборец
источник
3
Теперь это в справке Vim :h console-menus.
Алексей
@ Алексей: спасибо! это очень полезно знать ... если я прокручиваю вниз до раздела "5.2 Создание новых меню", который выглядит так, как будто он будет делать то, что я хочу.
иконоборчество

Ответы:

18

Да, это возможно. Вы можете загрузить menu.vim(определения меню gvim по умолчанию), или вы можете просто начать с нуля и создать свой собственный, а затем получить к ним доступ через :emenu. Это не дает вам нано-как всегда видимые меню; это дает вам возможность перемещаться по меню, используя завершение вкладки командной строки.

Если у пользователя нет vimrc, начните с отключения совместимости с vi:

:set nocompatible

Включить смарт завершение командной строки на <Tab>(включить список всех возможных вариантов и навигации результаты с <Up>, <Down>, <Left>, <Right>, и <Enter>):

:set wildmenu

Сделайте цикл повторных нажатий между всеми соответствующими вариантами:

:set wildmode=full

Загрузите меню по умолчанию (это происходит автоматически в gvim, но не в терминале vim):

:source $VIMRUNTIME/menu.vim

После этих четырех команд вы можете вручную вызвать завершение меню, вызвав завершение команды на вкладке :emenu, выполнив:emenu<space><tab>

Вы можете перемещаться по результатам, используя клавишу табуляции и клавиши со стрелками, а также клавишу ввода (она расширяет подменю и выбирает элементы). Затем вы можете сделать это более удобным, перейдя на шаг вперед и привязав сопоставление для всплывающего меню без необходимости :emenuкаждый раз вводить :

Сделайте Ctrl-Z в режиме отображения, похожем на <Tab>интерактивное нажатие в командной строке:

:set wildcharm=<C-Z>

И сделайте привязку, которая автоматически вызывает :emenuзавершение для вас:

:map <F4> :emenu <C-Z>
godlygeek
источник
2
Brilliant! Дайте мне знать, как я могу купить вам пиво!
иконоборчество
2

У меня была проблема с тем, что я не могу вспомнить все команды и комбинации клавиш для плагинов, которые я использую. Кроме того, я хотел иметь простые способы быстрого выполнения команд без необходимости устанавливать новые сопоставления клавиш или изобретать команды для доступа к ним.

Вим-Venu

Я написал небольшой плагин меню vim, который позволяет вам определять меню для каждого типа файла, который вы можете редактировать с помощью vim. Таким образом, вы можете определить пункт меню «Компилировать» для разных типов файлов и инициировать правильные инструкции для компиляции кода в зависимости от того, какой файл вы редактируете (.py, .c, .c ++, ...). Или создайте подменю для команд плагина «Таблица» в файле уценки.

Проверьте это здесь: https://github.com/Timoses/vim-venu

В качестве примечания: я думаю, что каждый должен выбрать свой любимый текстовый редактор. У Vim есть небольшой барьер (который стоит изучить!). Если кто-то не хочет учиться, то vim не будет для него полезным.

Отти
источник