2011-09-21 4 views
62

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

map <Alt-D> <C-D>

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

+0

Вы используете vim в терминале или версию gui (gvim, macvim)? –

+0

Также обратите внимание, что если ваша «кодировка» изменяется после того, как выполняется сопоставление, то, что вы получаете из ваших клавиш Alt, может не соответствовать тому, что вы изначально установили. –

ответ

99

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

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

и так далее. Решение найдено here на StackOverflow.

Я использовал это, чтобы переместить линии вверх и вниз с ALT + к \ у, используя это на моем .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 

here, как описано.

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

+7

Это именно то, для чего я пришел сюда (Alt + HJKL, чтобы двигаться)! Благодаря! –

+6

Простой способ узнать, какой именно персонаж, это использовать 'cat'. Просто введите 'cat' и внутри окна кота комбинацию клавиш, которую вы хотите. Выяснилось, что alt + скобки - это «и» на моем mac. – dvcrn

+3

это прекрасно работает как Alt + HJKL, чтобы перемещаться между расколами, мои пальцы любят его !!'Птар ˙ птар ¬ птар ˚ птар Δ ' –

9

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

map <A-D> <C-D> 

:help key-notation См.

+1

Кажется, это все еще не работает. Alt + d будет вводить странный символ в Vim, что и в случае с unmap. – Thomson

+0

Работает для меня (я использую 'gvim' в Windows) – Deqing

34

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

map <M-d> <C-d> 

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

+0

Это все равно не имеет никакого эффекта. Вход Alt + D по-прежнему вводит какой-то странный характер для Vim. – Thomson

+9

Это отдельная проблема. Ваш терминал отправляет многобайтовый символ в Vim, и Vim не знает, чтобы интерпретировать его как ''. Вероятно, вам нужно изменить настройки вашего терминала, чтобы он отправил '' как ' d'. – jamessan

+1

+1 для подсказки о вариантах nore. – Benoit

8

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

13

Карты Alt ключа в Vim на Mac OSX:

Начните с просмотром кода ключа вашего терминал отправляет в Vim:

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

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

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

map <Esc>[1;9D 
+2

Если вы используете приложение iTerm2, хорошо проверить, как клавиши отображаются в профиле> «Ключи». – fikovnik

21

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

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

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

    $ 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> 
    

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

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


Update (февраль 2016)

В зависимости от terminfo В ваш терминал работает, может быть, вы могли бы ... в большинстве терминалов, "Alt + H", например, отображается ^[h, который: «escape + h». Поэтому он может перезаписывать ключи. Я только что попробовал (снова) и, похоже, работает, но я считаю, что это очень сложная и ошибочная реализация.

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

+0

делает это для отображения вставки в режиме вставки? –

+0

Вместо 'execute 'set ...' stuff, вы можете просто использовать 'set =^[d'.'^['На самом деле символ escape, введенный с' Cv-Esc'. Это было необходимо в rxvt/urxvt, но xterm не нуждается в специальном лечении. Дополнительная информация по этой теме в [vim wiki] (http://vim.wikia.com/wiki/Get_Alt_key_to_work_in_terminal). –

+0

Существует ли аналогичный подход к этому, что будет работать с tmux, так что, т. е. Md может быть привязан? – George

5

Мой терминал будет производить ^[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, чтобы исправить все ключевые альт отображения.

Смежные вопросы