12

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

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

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

1 ответ1

14

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .