Отображение левой клавиши Alt в Vim?

12

Я могу сопоставить комбинацию клавиш Right Alt+ Left Arrowс <a-left>или <m-left>. Но я не могу сопоставить Left Altключ.

Есть способ сделать это?

Изменить:
Просто для ясности <a-left>означает Alt+ Left Arrow.
Важный вопрос здесь заключается в том, в чем разница между Left Altи Right Altс точки зрения сопоставления клавиш в Vim?

Йогеш Арора
источник

Ответы:

14

Если вы сделаете это :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.

  1. Используйте xmodmap для привязки RightAlt, скажем, к Mod3. Сделайте так, чтобы это запускалось один раз, когда начинается ваш сеанс X. В некоторых дистрибутивах уже есть файл / etc / X11 / xinit / xinitrc, который будет загружать файлы в определенных местах, содержащие команды xmodmap.

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
    
  2. Я использую терминал urxvt. Это позволяет определять привязки клавиш в файле типа Xresources. Вы можете сделать это в ~ / .config / Xresources; Я делаю это в ~ / .config / app-defaults / URxvt. Я бы поставил в этом файле такую ​​строку (точный синтаксис чувствителен к тому файлу, в который вы его поместили):

    URxvt.keysym.Mod3-Left:    \033<RAlt-Left>
    

    Теперь запустите новый терминал, введите ctrl-V, затем введите RightAlt + Left. В командной строке вы должны увидеть символы ^ [[<RAlt-Left>. Это работает? Хорошо.

  3. В вашем ~ / .vimrc поместите это:

    set t_Ff=^[<RAlt-Left>
    

'^ [' Здесь - это единственный escape-символ. Все остальные символы («<», «R», «A» и т. Д.) Являются самими собой. Используйте префикс «literal» ключа vim, за которым следует escape, чтобы ввести '^ [' (я забыл, что по умолчанию является ключом literal --- также ctrl-V, возможно?) T_Ff - просто неиспользуемая запись терминала , Другой это T_FG. Вы можете использовать :set termcapvim, чтобы увидеть, какие записи терминала назначены, и просто использовать 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, а затем перейти оттуда. Дайте нам знать, каковы ваши требования.

dubiousjim
источник
Это относится и к gvim?
Глиф
Я нашел это особенно полезным. Я использую lxterminal и хочу отобразить свой alt ключ в vim. В терминале, когда я набрал Ctrl-V, а затем желаемое сочетание клавиш (например, Alt-T), он выплюнул ^ [t. Я использовал это в моем .vimrc вместо <At> для выполнения сопоставления (^ [конечно, это единственный escape-символ), и это работало безупречно. (^ [^ T также правильно связывает Ctrl + Alt + T)
elynnaie