Могу ли я сопоставить Alt ключ в Vim? - PullRequest
80 голосов
/ 21 сентября 2011

Я пытался отобразить как добавление строки ниже к .vimrc, но это не работает. Я проверил .vimrc загружается Vim.

map <Alt-D> <C-D>

есть ли ошибка в этом отображении?

Ответы [ 7 ]

117 голосов
/ 14 марта 2013

Для пользователей Mac: для сопоставления ALT + hjkl вместо этого используйте реальный сгенерированный символ (выясните, какой символ использует комбинацию в режиме INSERT), например, с моей клавиатуры я получаю:

<ALT+j> ==> ª
<ALT+k> ==> º

и так далее.Решение найдено здесь в StackOverflow.

Я использовал это для перемещения строк вверх и вниз с помощью ALT + k \ j, используя это на моем .vimrc:

nnoremap ª :m .+1<CR>==
nnoremap º :m .-2<CR>==

inoremap ª <Esc>:m .+1<CR>==gi
inoremap º <Esc>:m .-2<CR>==gi

vnoremap ª :m '>+1<CR>gv=gv
vnoremap º :m '<-2<CR>gv=gv

как объяснено здесь .

Надеюсь, что это полезно, наслаждайтесь Vim:)

ADDENDUM BY Dylan_Larkin (2019): Чтобы это работало на Mac, " ИспользованиеОпция в виде мета-ключа"должна быть включена OFF in Terminal-> Preferences-> Keyboard

39 голосов
/ 21 сентября 2011

:help key-notation описывает, какой формат необходимо использовать для сопоставления различных ключей. В случае alt вы можете использовать либо <A-, либо <M-. Таким образом, ваше отображение будет

map <M-d> <C-d>

Я бы также рекомендовал использовать nore вариант :map (например, noremap), если вы явно не хотите разрешить повторную оценку правой части для сопоставлений.

28 голосов
/ 29 ноября 2014

Я не уверен, что это "возможно" больше. Пожалуйста, прочтите обновление ниже.

Да, вы можете даже в терминале vim, но нет реального ответа на все вопросы . Вы в основном должны выполнить два шага:

  1. Убедитесь, что существует нотация <M-d>, и отобразите точно, что вводит ваш терминал (^[ является escape-символом):

    $ cat
    ^[d
    $
    
    " in your .vimrc
    execute "set <M-d>=\ed"
    " you have to use double quotes!
    
  2. Сопоставьте что-нибудь с вновь созданной комбинацией:

    noremap <M-d> :echo "m-d works!"<cr>
    

Понимая, как это работает, вы можете расширить этот «трюк» на другие «странные» комбинации, например, я использую термит, а vim не распознает <S-F1>, используя cat, я получаю ^[[1;2P. Затем в моем vimrc я делаю: execute "set <S-F1>=\e[1;2P", и затем я могу сопоставить его с чем угодно.

Примечание: Не знаю почему, но для некоторых людей использование \<Esc> работает вместо \e.


Обновление (февраль 2016 г.)

В зависимости от terminfo вашего терминала, может быть, вы могли бы ... в большинстве терминалов, например, «alt + h» отображается на ^[h, что означает «escape + h». Так что это может перезаписать ключи. Я только что попробовал (еще раз), и это, кажется, работает, но я считаю, что это очень ошибочная и подверженная ошибкам реализация.

Тем не менее, для достаточно смелых, вот экспериментальный плагин:

19 голосов
/ 05 июня 2014

Карта Alt Key in Vim на Mac OSx:

Начните с просмотра кода ключа, который ваш терминал отправляет vim:

$ sed -n l
^[[1;9D 

В приведенном выше примереЯ выполнил команду и нажал Alt + Left .

^[[1;9D - это экранированная последовательность, отправляемая vim, поэтому мы можем использовать ее для нашего отображения.

map <Esc>[1;9D 
10 голосов
/ 21 сентября 2011

Использование:

map <A-D> <C-D>

См. :help key-notation.

8 голосов
/ 05 декабря 2016

Мой терминал будет выдавать ^[x команды (например, для alt-x). Что заставило его работать в Vim, так это небольшой скрипт из 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.

8 голосов
/ 21 сентября 2011

Ваш терминал может не передавать "правильно" Alt-D.Вы можете использовать CV, чтобы фактически получить фактическую escape-последовательность, отправленную в Vim, и использовать ее для создания своего отображения.Т.е. отредактируйте ваш .vimrc и замените фактический, введя следующую последовательность «CV Alt-D», чтобы у вас была правильная escape-последовательность в вашем vimrc.Это не сработает, если ваш терминал ничего не отправляет в vim.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...