Как отобразить Alt Key?


38

Я пытаюсь сопоставить 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, поэтому я не могу тестировать ...
Мартин Турной,

@Carpetsmoker Нажатие Alt, отпускание, затем jили любая другая клавиша работает как обычно. Я проверил и нашел параметр «Использовать опцию как мета-ключ» , включил его, и теперь он работает. Так что настройка metaSendsEscapeсделала свое дело, спасибо.
Кенорб

3
На этот вопрос ранее отвечали (с лучшим ответом) здесь: stackoverflow.com/questions/6778961/…
user3751385

Ответы:


36

Вот как я делаю это на 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 Смотрите:help :set-termcap
Богатый

10

С помощью Carpetsmoker кажется, что Терминал не был настроен на «Использовать Alt / option как мета-ключ» (это особенно характерно для графических терминалов GUI).

Для терминала на OSX это в Предпочтения -> Настройки -> вкладка Клавиатура -> «Использовать опцию как мета-ключ» . Проверьте: как я могу изменить Терминал, чтобы использовать опцию в качестве мета-ключа? ( Маверикс ).

Для 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

но каждый из них ^[представляет собой один буквальный escape-символ, и подсветка синтаксиса должна показать это. Замените буквенные escape-символы на текст <Esc>и добавьте команду, которую вы хотите использовать:

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

Я знаю, что OP отображал 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.