Если вы сделаете :help key-notation
в vim, вы увидите, что единственными модификаторами, которые распознает Vim, являются shift, control, alt/meta (рассматриваются как синонимы) и командная клавиша Mac. Вы можете легко использовать xmodmap, чтобы сопоставить правую клавишу Alt с новым модификатором, который распознает Vim, но, возможно, ни один из этих модификаторов в настоящее время не используется вами. (Я не знаю, возможно ли заставить системы Linux представлять модификатор клавиши Mac, как видит Vim.) Существуют и другие модификаторы, которые X распознает: Mod4, Hyper и т.д., Но похоже, что Vim просто не увидит их или, по крайней мере, не сможет их связать.
Другой вариант заключается в том, что RightAlt-стрелка влево создает определенную последовательность клавиш, например 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, а затем перейти оттуда. Дайте нам знать, каковы ваши требования.