Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". Меню.

Всем привет, с Вами еженедельная рубрика "Секреты Вим", и сегодня научимся делать меню!

Меню расширяет возможности привязок вроде map, о которых мы уже говорили. Привязки хороши, но они позволяют привязать только одну команду к одной клавише, сочетанию или последовательности. А иногда хочется иметь некоторый выбор.

Например, включить проверку орфографии: для русского, английского или итальянского языка, или выключить вовсе.
Или выйти из Вим (☺☺☺): безопасно (не выходить, если файл не сохранен), сохранить, закрыть вкладку, закрыть все вкладки, выйти с потерей изменений...
Или выбрать кодировку файла: cp1251, utf8, KOI8R, ...
Или поставить визуальную закладочку с одним из нескольких идентификаторов?

Можно определять свои меню, для упрощения операций и чтоб не запоминать сложные комбинации и команды. Это делается в .vimrc

Команда menu вешает команду на пункт меню (вложенность задается точкой).

Например, menu Spell.en :setlocal spell spelllang=en<CR>

Теперь в меню Spell есть пункт en, который включает проверку орфографии на английском. Таких логично создать несколько (для разных языков или диалектов и чтоб отключить проверку), иначе проще повесить команду на клавишу.

Выполнить пункт меню можно с помощью команды emenu: emenu Spell.en

Но это пока не меню, а просто что-то вроде макроса. Удобное имя для сложной команды. Настоящее меню тоже можно сделать, но нужно совершить еще несколько действий.

Выставим флаг wildmenu в .vimrc (set wildmenu) --- он позволяет перемещаться по пунктам меню, а также зададим клавишу для этого: set wildcharm=<Tab>

Теперь команда emenu Spell.<Tab> включает менюшку, по которой можно перемещаться табуляцией и выбрать пункт клавишей ввода.

А эту команду логично повесить на клавишу, например на <F7>, или комбинацию, вроде <C-Q>.

Вот примеры. Мои.

F7 --- меню для проверки орфографии:

set wildmenu
set wcm=<Tab>
menu spell.en :setlocal spell spelllang=en <CR>
menu spell.ru :setlocal spell spelllang=ru <CR>
menu spell.ru :setlocal spell spelllang=it <CR>
menu spell.none :setlocal spell spelllang= <CR>
map <F7> :emenu spell.<Tab>
Нажатие F7 вызвало вот эту менюшку внизу, по которой можно перемещаться табуляцией. Осталось только нажать enter...
Нажатие F7 вызвало вот эту менюшку внизу, по которой можно перемещаться табуляцией. Осталось только нажать enter...

F8 --- кодировки и концы строк (об этом как-нибудь в другой раз):

menu Enc.cp1251 :e ++enc=cp1251<CR>
menu Enc.utf8 :e ++enc=utf-8<CR>
menu Enc.koi8 :e ++enc=koi8-r<CR>
menu Enc.ibm866 :e ++enc=ibm866<CR>
menu Enc.iso88595 :e ++enc=iso-8859-5<CR>
menu Enc.UNIXCR :set fileformat=unix
menu Enc.DOSCR :set fileformat=dos
map <F8> :emenu Enc.<Tab>

Если хотите меню для выхода из Вим (sacramento sacramento)))):

menu Exit.close_tab :q<CR>
menu Exit.discard_tab :q!<CR>
menu Exit.save_and_close :wq<CR>
menu Exit.close_vim :qa<CR>
menu Exit.discard_everything :qa!<CR>
map <F10> :emenu Exit.<Tab>

Кстати, если <CR> в конце не поставите --- придется нажимать enter самому. В строке появится команда и надо самому ее выполнить. Кстати, может быть полезно, если у вас там команда вроде "удалить все безвозвратно")))

Итак, можно повесить сложные команды на пункты меню. Лучше однотипные, но никто не мешает свалить в одну кучу много отдельных команд. Тогда надо помнить не сами команды, а клавишу, на которые повешено меню. Это еще один шаг к совершенству! Хотя лучше все-таки основные команды помнить, чтобы не оказаться беспомощным без своего любимого .vimrc!

Путеводитель по каналу