Решение будет зависеть от вашего терминала и от того, как он настроен. Терминалы Unix обычно отправляют метасимвол или последовательность, когда вы удерживаете Alt и нажимаете другую клавишу. Существует два традиционных способа отправки метасимволов в терминальные программы:
Возьмите значение ASCII другой нажатой клавиши (то есть той, которая не является Alt) и OR
со значением 128 (установка бита 7 в высоту). Это не рекомендуется в наши дни, потому что полученный 8-битный код символа не совместим с UTF-8 или даже с 8-битными кодировками, такими как Latin-1.
Отправьте escape-символ ASCII 27, а затем код ASCII для другого ключа. Это хорошо работает с различными кодировками, но может усложнить обработку случаев, когда вы действительно намеревались отправить явный escape-символ, например, когда вы нажимаете Esc в Vim.
Если ваш терминал настроен на использование # 2, у вас может возникнуть желание сделать noremap <Esc><CR> viw
. Тем не менее, это заставит Vim сделать паузу всякий раз, когда он получает побег. Чтобы избежать этого, вы можете set
код клавиши <A-CR>
и использовать его на map
; это делает так, чтобы Vim мог рассматривать последовательность как отличающуюся от последовательности escape+ символа (в частности, у последовательности может быть тайм-аут, который намного короче, чем тот, который используется другими отображениями; так как терминалы отправляют escape-символ и следующий символ почти одновременно это может предотвратить случайный запуск кода клавиши, когда вы этого не пытаетесь).
Команда set
сама интерпретирует строки как <Esc>
буквально (т.е. не конвертирует их в ASCII 27), поэтому вы должны обернуть их в exec
:
exec "set <A-CR>=\<Esc>\<CR>"
После этого вы можете наконец сделать отображение:
noremap <A-CR> viw
Возможно, вы также захотите установить очень короткий ttimeoutlen
чтобы случайно не запустить это новое отображение с помощью Esc Return, например
:set timeout timeoutlen=3000 ttimeoutlen=100
"нормальные" сопоставления заставили бы ждать 3 секунды между клавишами, а сопоставления кода клавиш - только десятую долю секунды.
Рекомендации:
:h :set-termcap
:h :map-alt-keys
:h 'ttimeout'