Як зіставити ключ Alt?


37

Я намагаюся зіставити Altключ таким чином:

:map <A-j> j
:map <A-k> k

але це не працює (дзвінок дзвонив у Alt + j/ Alt + k).

Що мені не вистачає?

Я використовую термінал на OSX, те ж саме відбувається і з віддаленим Linux.


На Ctrl + v, у Alt + jмене є: ?~H~F( коли encoding=utf-8).

На Ctrl + v, у Alt + kмене є: ?~Z( ˚коли encoding=utf-8).

Запуск vim без плагінів ( -u NONE) не має значення.


1
Чи працює Alt(натискає, не тримає), а потім jпрацює? З по xtermкрайней мере , мені потрібно встановити , metaSendsEscapeщоб true отримати ці послідовності в роботі ... Я не знаю , якщо у вас є така ж проблема, і я не використовую OSX , так що я не можу перевірити ...
Martin Tournoij

@Carpetsmoker Натискання Alt, відпускання, потім jабо будь-яка інша клавіша працює як звичайно. Я перевірив і знайшов опцію "Використовувати параметр як мета-ключ" , включив її і вона працює зараз. Тож налаштування metaSendsEscapeзробила трюк, дякую.
kenorb

3
Це питання було раніше відповів (з найкращою відповіддю) тут: stackoverflow.com/questions/6778961 / ...
user3751385

Відповіді:


35

Ось як я це роблю на Linux або Cygwin:

Спочатку перевірте, які символи надсилаються вашим терміналом, коли ви натискаєте ALT+ J:

Для цього я переходжу до консолі та запускаю sed -n l(ви також можете використовувати catдля цього). Потім натискаю ALT+ Jі бачу, що символи на екрані є ^[j.

Я замінюю ^[на \e(тому що це те, що надсилається моїм терміналом, коли я натискаю esc), і остаточний рядок для мене є \ej.

Тоді я пишу це моєму .vimrc:

execute "set <M-j>=\ej"
nnoremap <M-j> j

І картографування працює.


4
Я не можу знайти документацію на :set <M-j>=\ejчастину. Що я повинен шукати?
Євгеній Сергєєв

1
Дякую за відповідь, це було єдине рішення, яке працювало на мене з / Iterm + vim
newUserNameHere

Ні, це не працює. Іноді ESC-J буде виконувати роль ALT-J
user3751385

1
@EvgeniSergeev See:help :set-termcap
Багатий

9

За допомогою Carpetsmoker , здається, що термінал не був налаштований на "Використовувати Alt / параметр як мета-ключ" (це особливо часто для терміналів GUI).

Для терміналу в OSX він знаходиться в розділі Налаштування -> Налаштування -> вкладка Клавіатура -> 'Використовувати параметр як мета-ключ' . Перевірте: Як я можу змінити Terminal, щоб використовувати опцію як мета-ключ? ( Маверики ).

Для XTerm поставте прапорець: Налаштування XTerm за замовчуванням для Meta Sends Escape, що говорить:

Додайте цей рядок будь-де у вашому особистому файлі .Xdefaults ( ~/.Xdefaults):

xterm*metaSendsEscape: true

Потім перезавантажте конфігурацію за допомогою xrdb. Без цього кроку зміни .Xdefaultsне набудуть чинності до наступного перезавантаження X:

xrdb -l ~/.Xdefaults

Потім стандартні відображення з Altключем типу:

:map <A-j> j
:map <A-k> k

працює чудово.

Для отримання довідки см :h :map-alt-keys.


4
Може також захотіти розглядати :h :map-alt-keysяк інше джерело інформації
Пітер Рінкер

4

Схожий на відповідь Коссака, але трохи простіший, шляхом відображення буквальних натискань клавіш.

Або в звичайному режимі після натискання :, або вставленого у свій .vimrc, картографуйте вхід безпосередньо, запустивши відображення:

nnoremap 

потім натисніть Ctrl+, Vпотім натисніть клавішу для запису, наприклад Alt+ . Це покаже приблизно так:

nnoremap ^[[1;3D

але кожен ^[- це один, буквальний символ втечі і підкреслення синтаксису повинно це показувати. Замініть буквальні (-і) пробіги текстом <Esc>і додайте команду, яку ви хочете використовувати:

nnoremap <Esc>[1;3D <C-w>h

Я знаю, що ОП було картографувати Alt+ букви, але я використовував стрілки, щоб показати, як це зробити для чогось, що може не відображатись за замовчуванням.


Працював як шарм, велике спасибі!
аріндін

2

Це працює для мене на терміналі Ubuntu 16.04 xfce (і терміналі іржі Alacritty)

Встановіть тригер фрагмента ultisnip на Meta-/(як і фрагмент emacs)

let g:UltiSnipsExpandTrigger="^[/"

Ось тепер я ^[/набираю vim

У режимі вставки Ctrl-V Alt-/

( Metaце Altклавіша на клавіатурі мого ПК)


1

Якщо Control+Vслідують ALT-xшоу ^[x(введіть термінал), ви можете виправити це за допомогою цього невеликого сценарію від vim.wikia.com :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

Додайте до .vimrc для всіх відображень клавіш alt.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.