"M-" привязки в vim на iTerm2/Terminal не работают

Я заметил, что iTerm2 предлагает очень удобную функцию использования "Option key as + ESC" (или как мета, но, по-видимому, это устаревшее).

Я попробовал их оба, и ключ опции работает как ожидается в режиме Bash (set -o emacs) и Emacs, но не в Vim. Таким образом, я не могу использовать никаких привязок "M-". Я обнаружил, что:

  • Если я устанавливаю опцию "+ ESC", vim просто понимает клавишу ESC + и не имеет понятия, что я на самом деле имел в виду мета-ключ.
  • Если я устанавливаю опцию "meta", ключи, измененные с помощью "option", ведут себя так же, как без модификатора (не знаю, как формально проверить, что vim понимает из комбинации клавиш, которую я набираю).

"M-" отображения отлично работают в MacVim (7.3.53), но не за консолью, а не в объеме этого вопроса.

Мне интересно, как заставить эти сопоставления работать в Vim, под iTerm2 или Terminal.

Мои спецификации:

  • MAC OS X Lion 10.7.2
  • iTerm2 1.0.0.20111020
  • vim @7.3.107_0 + python26 [хотя MacPorts]

Ответы

Ответ 1

Я загрузил последнюю версию iTerm2 и попытался посмотреть, что она отправила в/что было напечатано Vim (i<C-v><M-a>) со следующими настройками:

  • Опция в качестве опции:

    Vim печатает æ, что нормально и ожидается на моей французской клавиатуре

  • Вариант как мета:

    Вим остается там, ожидая чего-то. Ничего не печатается. Если я нажимаю Option и a в последовательности, я просто получаю a. Опция нажатия и a в некотором случайном порядке может печатать á, что является странным и совершенно неожиданным.

  • Опция как + ESC:

    Vim печатает ^[a, что означает символ Escape, за которым следует символ a.

Из этих тестов видно, что Vim никогда не получит <M-> без какой-либо гипотетической черной магии.

Если вы придерживаетесь "Option as + ESC", кажется, вам придется изменить все ваши пользовательские сопоставления <M-something> на <Esc>something. Это может сработать, но это сделает любую прозу на любом неанглийском языке больной.

Что я делаю: я оставляю ключ Option так, чтобы он мог легко вводить символы типа œ…«», и я использую <Leader> (сопоставляется с ,, см. :help mapleader) для всех моих пользовательских сопоставлений.

Некоторым людям здесь нравится резервировать их для плагинов и выступать за более простой и потенциально более безопасный подход.

inoremap <leader>, <C-x><C-o> "my way (copied elsewhere)
inoremap ,, <C-x><C-o>        "another way

Ответ 2

Я оставил свой ключ опции, чтобы действовать как Обычный, и обнаружил, что Вим видел их как привязки <T-. Так, например, у меня есть эта настройка сопоставления в моем .vimrc, чтобы перейти в конец слова, когда он находится в режиме вставки:

noremap! <T-Right> <C-o><Right>;