Найти тему
Блокнот математика

Рубрика "Секреты Вим". Нотация угловых скобок

Привет, коллеги. В справке Вим, а также в командах типа map, используется нотация угловых скобок, или запись специальных клавиш в виде <ESC>, <C-Q>, <TAB>, <S-Up> и всего в таком роде. Давайте наведем порядок в этой теме, хотя тут всё довольно интуитивно.

Вим понимает эту нотацию в командах типа map. Причем они всегда уместны в левой части, то есть при указании клавиши, к которой привязываете команду, и часто уместны в правой, то есть в самой команде. Например,

:map <C-F8> :w<CR><bar>:echo "saved"<CR>

Здесь мы навесили команду на сочетание control+F8, а команда составная, с "конвейером", то есть состоит из двух команд, разделенных символом |. Но сам этот символ отделит команду map от следующей за ней; поэтому мы не ставим его явно, а указываем в нотации угловых скобок (<bar>). Две команды командной строки (с двоеточием) выполняются по нажатию клавиши ввода, которую мы и указываем (<CR>).

Начнем с того, что для ряда клавиш можно получить ее запись в этой нотации через <C-K>. Нажмите control и К, затем клавишу, например, F4. Получите <F4>. Это не сработает с <ESC> или с самой <C-K>, но много для чего сработает.

Далее, сочетание с control всегда записывается <C-

Например, <C-C>, <C-Q>, <C-F3>, <C-Up>, <C-^>

Только помните, что <C-6> может и не работать; надо использовать именно <C-^>, конечно, если символы ^ и 6 на одной клавише.

Аналогично, shift всегда записывается как <S-

Например, <S-F2>, <S-Up>, <S-Tab> или даже <S-q>, хотя это то же, что просто Q.

Есть ещё <A- — для клавиши ALT. Но с ней бывают проблемы, которым посвящен целый раздел справки. У меня альт не работает как надо и я обхожусь без этих привязок. Хватает.

Полный список смотрите в справке по слову key-notation. Но вот кое-что:

<ESC>, <Tab>, <CR> (ввод, наряду с <Enter>, <Return>), <Space>, <BS> (backspace), <Bslash> (\), <Bar> (|), <Del>.

Отдельно отметим <lt>, которая обозначает левый уголок < и позволяет включить его самого в привязку. Мнемоника LT - "Less Than", то есть это знак "меньше".

Стрелки <Up>, <Down>, <Left>, <Right>.

Клавиши <Home>, <End>, <PgUp>, <PgDown>, <Insert>.

https://www.compgramotnost.ru/wp-content/uploads/2020/02/fragment-maloj-klaviatury-na-polnorazmernoj-klaviature.jpg
https://www.compgramotnost.ru/wp-content/uploads/2020/02/fragment-maloj-klaviatury-na-polnorazmernoj-klaviature.jpg

Есть обозначения для клавиш маленькой клавиатурки справа: <kHome>, <kPlus> и прочие, но не всегда они посылают отдельные коды: порой коды те же, что и для основной клавиатуры. Так что привязываться к ним не всегда надежно. Тем более, что этой клавиатурки у вас (на переносном компьютере, например) может и вовсе не быть. Но если у вас работает — то и хорошо. У меня на Убунте <kPlus> работает: отличается от + на основной клавиатуре. А вот <kDivide> в режиме вставки не работает, генерирует тот же /, что и на основной клавиатуре; а вот в нормальном режиме работает.

Есть все "символьные" клавиши дополнительной клавиатуры: <kHome> и т.п., <kPlus>, <kMinus>, <kDivide>, <kMultiply>; <kEnter>. Есть <kPoint> для точки и все цифры от <k0> до <k9>. Нет отдельно отлова клавиш Ins и Del на доп.клавиатуре и NumLock.

Есть обозначения для мыши: <LeftMouse> с вариантами <C-LeftMouse> и
<S-LeftMouse>, <LeftDrag>, <LeftRelease>, а также <MiddleMouse> и <RightMouse> с теми же вариантами. Может не всё работать, зависит от терминала и самой мыши. У меня работает всё, во всяком случае, в нормальном режиме. В GUI должно работать всё, если, конечно, на самой мыши есть необходимые кнопки.

Пример:

map <RightMouse> z=

Мы навесили на правую кнопку мыши выбор вариантов орфографии. Не забудьте включить саму мышь (:set mouse=a) и, собственно, орфографию.

Событие LeftDrag, когда двигаешь мышь зажав клавишу, работает, но при этом текст выделяется всё равно.

Удачи, коллеги.

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022

Наука
7 млн интересуются