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

11343
Yogesh Arora

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

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

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

12

1 ответ на вопрос

14
dubiousjim

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

  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, а затем перейти оттуда. Дайте нам знать, каковы ваши требования.

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