Зіставлення лівої клавіші 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 розпізнає, є зсув, контроль, alt / meta (трактуються як синоніми) та командна клавіша Mac. Ви можете легко використовувати xmodmap, щоб зіставити правий клавішу Alt на новий модифікатор, який розпізнає Vim, але, можливо, жоден із цих модифікаторів ви зараз не використовуєте. (Я не знаю, чи можна змусити системи Linux представляти модифікатор командного ключа Mac так, як це бачить Vim.) Є й інші модифікатори, які X розпізнає: Mod4, Hyper тощо, але схоже, що Vim щойно переміг ' не бачити їх або, принаймні, не можна їх прив’язати.

Інший варіант - організувати стрілку RightAlt-Left для генерації певної послідовності ключів, наприклад, Esc- [MyUniqueGarbageHere. Це, безумовно, можливо, і тоді ви можете сказати Віму прив’язати це до будь-якої дії, яка вам подобається, яка відрізняється від того, на яку пов'язаний лівий клавіша 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>
    

Тут '^ [' є одним символом втечі. Кожен з інших символів ('<', 'R', 'A' тощо) є самими собою. Використовуйте префікс ключа "буквальний" vim з подальшим втечею, щоб ввести "^ [" (я забув, що за замовчуванням є "буквальний" ключ --- також 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?
Гліф

Я вважаю це особливо корисним. Я використовую lxterminal і хочу зіставити свій ключ alt у vim. У терміналі, коли я набрав Ctrl-V, а потім потрібну комбінацію клавіш (наприклад, Alt-T), він виплюнув ^ [t. Я використовував це в моєму .vimrc замість <At>, щоб виконати відображення (^ [звичайно, це єдиний символ втечі), і це було бездоганно. (^ [^ T також правильно пов'язує Ctrl + Alt + T)
elynnaie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.