Если вы сделаете это :help key-notation
в vim, то увидите, что единственными модификаторами, которые распознает Vim, являются shift, control, alt / meta (рассматриваются как синонимы) и командная клавиша Mac. Вы можете легко использовать xmodmap, чтобы сопоставить правую клавишу Alt с новым модификатором, который распознает Vim, но, возможно, ни один из этих модификаторов в настоящее время не используется вами. (Я не знаю, возможно ли заставить системы Linux представлять модификатор клавиш команды Mac в том виде, в каком его видит Vim.) Существуют и другие модификаторы, которые X распознает: Mod4, Hyper и т. Д., Но похоже, что Vim только что победил ' не вижу их или, по крайней мере, не могу их связать.
Другой вариант состоит в том, чтобы организовать стрелку RightAlt-Left Arrow для генерации определенной последовательности клавиш, например, Esc- [MyUniqueGarbageHere. Это, безусловно, выполнимо, и тогда вы можете сказать Vim связать это с любым действием, которое вам нравится, которое отличается от того, с чем связана ваша левая клавиша Alt. Недостатком является то, что вам нужно сделать это для каждой комбинации RightAlt + Key в отдельности. Но если вы просто хотите сделать это за несколько клавиш, это очень выполнимо.
Как именно вы это реализуете, будет зависеть от того, говорите ли вы об использовании Vim в X, в консоли Linux или в какой-либо другой среде. Я предполагаю, что вы говорите об использовании его в X.
Используйте xmodmap для привязки RightAlt, скажем, к Mod3. Сделайте так, чтобы это запускалось один раз, когда начинается ваш сеанс X. В некоторых дистрибутивах уже есть файл / etc / X11 / xinit / xinitrc, который будет загружать файлы в определенных местах, содержащие команды xmodmap.
xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
Я использую терминал urxvt. Это позволяет определять привязки клавиш в файле типа Xresources. Вы можете сделать это в ~ / .config / Xresources; Я делаю это в ~ / .config / app-defaults / URxvt. Я бы поставил в этом файле такую строку (точный синтаксис чувствителен к тому файлу, в который вы его поместили):
URxvt.keysym.Mod3-Left: \033<RAlt-Left>
Теперь запустите новый терминал, введите ctrl-V, затем введите RightAlt + Left. В командной строке вы должны увидеть символы ^ [[<RAlt-Left>. Это работает? Хорошо.
В вашем ~ / .vimrc поместите это:
set t_Ff=^[<RAlt-Left>
'^ [' Здесь - это единственный escape-символ. Все остальные символы («<», «R», «A» и т. Д.) Являются самими собой. Используйте префикс «literal» ключа vim, за которым следует escape, чтобы ввести '^ [' (я забыл, что по умолчанию является ключом literal --- также ctrl-V, возможно?) T_Ff - просто неиспользуемая запись терминала , Другой это T_FG. Вы можете использовать :set termcap
vim, чтобы увидеть, какие записи терминала назначены, и просто использовать t_XX для некоторого XX, который не используется. Следуйте представленной выше строке .vimrc со следующими:
map <t_Ff> whatever-vim-keys-you-want-it-mapped-to
map! <t_Ff> whatever-vim-keys-you-want-it-mapped-to
Также можно напрямую сделать:
map ^[<RAlt-Left> whatever-vim-keys-you-want-it-mapped-to
Тем не менее, я нашел технику, которая использует вход в незанятый терминал, чтобы работать намного надежнее.
Я сделал здесь много предположений: вы используете Linux, X и так далее. Если вы используете терминальную программу, отличную от urxvt, она может предоставить или не предоставить достаточно мощные методы привязки клавиш для выполнения того, что я описал. Если вы выберете менее экзотические ключи, вы все равно сможете сделать что-то, как я описал здесь. Например, вы можете организовать привязку RAlt-Left к F21, а затем перейти оттуда. Дайте нам знать, каковы ваши требования.