Как сопоставить ключ ALT в .vimrc?


9

Для того , чтобы иметь возможность добавить пустые строки , не вдаваясь в режиме вставки, я пытаюсь карту ALT-oи ALT-Oк o<ESC>иo<ESC>

Я попробовал следующее в моем .vimrc

map <M-o> o<ESC>
map <M-O> O<ESC>

а также

map <ALT-o> o<ESC>
map <ALT-O> O<ESC>

и (как предложено ниже)

map <A-o> o<ESC>
map <A-O> O<ESC>

но никто не работает. Это просто дает обычное поведение, как будто ALT-oне было определено.

Это мой первый раз, когда я изменяю .vimrcфайл, и я не могу найти, где в документации рассказывается, как обозначать различные ключи. Но я могу проверить, что мой .vimrcфайл читается, в том числе:

map <Enter> ihello<ESC>

Что успешно <Enter>соответствует вставке helloи возврату в командный режим.

Я использую Vim с Cygwin.


Похоже, ваш терминал вообще не передает альтернативные последовательности. Работают ли другие известные последовательности? Как насчет попытки Ctrl? Какой терминал вы используете?
Калеб

Я использую vim на Cygwin, но я заставил другие скрипты работать, как мои детали редактирования.
Эрик Уилсон

Ctrl работает, вроде. Кажется, это не позволяет мне различать <C-o>и <C-O>.
Эрик Уилсон

Джайлз ответ прямо на ходу. Вы должны окончательно переключиться на более способный терминал. Эти проблемы должны исчезнуть, и вы получите свои ключи обратно!
Калеб

Ответы:


10

Чтобы увидеть, что ваш терминал отправляет, когда вы нажимаете клавишу, переключитесь в режим вставки, нажмите Ctrl+V, затем нажмите клавишу. Большинство ключей с большинством терминалов посылают escape-последовательность, где только первый символ является управляющим символом; Ctrl+Vвставляет следующий символ буквально, так что вы можете вставить всю escape-последовательность таким образом.

Различные терминалы отправляют различные escape-последовательности для некоторых комбинаций клавиш. Многие терминалы отправляют один и тот же символ ( ^O) для обоих Ctrl+Oи Ctrl+Shift+O; если это так, Вим не сможет различить их.

Вы упоминаете, что используете Cygwin; в каком терминале вы работаете с Vim - самая важная информация. Если вы используете встроенную консоль Windows, приобретите лучший терминал. Я рекомендую MinTTY для запуска приложений текстового режима Cygwin в терминале в Windows за пределами X, но родные для Cygwin Windows RXVT и PuTTYcyg также хороши. (Также Console2 для запуска консольных приложений Windows, но это совершенно не по теме).


3

Если 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.


1

Это работает для меня на терминале Ubuntu 16.04 xfce (и терминале ржавчины alacritty)

Установите для триггера фрагмента ultisnip значение Meta-/(точно так же, как для фрагмента emacs)

let g:UltiSnipsExpandTrigger="^[/"

Вот теперь я ^[/набираю в vim

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

( Metaэто Altклавиша на клавиатуре моего компьютера)


-1

Клавиша М (эта) - это кнопка Windows. Это просто <A-o>.


Это тоже не работает.
Эрик Уилсон

Это не всегда так, на разных раскладках клавиатуры и на разных языках они часто бывают разные.
Калеб

@ Калеб есть какая-нибудь документация для этого?
Эрик Уилсон

Я пытался, map <A-o> o<ESC>и это сработало для меня. Если вы положили его в свой .vimrc, вы перезагрузили его?
Мартин Уединг

Аскер уже заявил в своем вопросе, что они проверили, что файл загружается. Это не относится к пользователю, так как они находятся в окнах, но вы можете увидеть различные конфигурации мета / Win / Alt ключей в файлах геометрии / символа / ключа кода xkb. Вы заметите, что даже в опциях раскладки клавиатуры GNOME есть несколько распространенных способов переназначения между Alt / Win / Meta. Одна из причин, по которой это существует, заключается в несоответствии базовых схем.
Калеб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.