Vim: сопоставление ctrl-0 с ctrl-9?

Почему я не могу сопоставить любую команду * map (nmap, imap и т.д.) нажатием клавиш Ctrl 0 через Ctrl 9? На самом деле, похоже, что некоторые из них, такие как Ctrl 3, привязаны к ^[ на уровне X-Window. Как изменить vim на эти привязки по умолчанию?

т.е. если я делаю imap <C-3> fancystuffhere, набрав Ctrl 3 в режиме вставки, меня переключит в обычный режим, вместо того, чтобы вставлять 'fancystuffhere'.

Я на linux/X11.

Ответы

Ответ 1

Поскольку оба vim и gvim используют байтовую очередь вместо очереди событий нажатия клавиш, так что в то время как значения от 0x40 (@) до 0x5F (_) (включая диапазон 0x41-0x5A (AZ)) имеют соответствующие управляющие символы (вы могут получить свои коды, вычитая 0x40 из их значения), никакие символы выше и выше этого диапазона не могут использоваться вместе с C-. Это также причина, почему C-S- для буквенно-цифровых клавиш не работает даже в gvim (функциональные клавиши генерируют более одного байта, поэтому <C-S-F1> может работать). Замена <C-3> на <ESC> выполняется терминалом, вы можете попробовать его сопоставить почти в любом GUI-приложении и увидеть, что <ESC> не отображается.

Ответ 2

То, как я это делаю в окнах, - использовать Autohotkey и переназначить CTRL + 1, CTRL + 2 и т.д. на CTRL + F1, CTRL + F2 и т.д.

Я знаю, что ты на Linux, поэтому не применимо к тебе, но думал, что я упомянул об этом для кого-то еще, кого это интересует.