Не удается сопоставить ‹S-CR› в Vim

Получил свой первый Mac на выходных, и я пытаюсь приспособиться. Эта строка в моем vimrc, которая работала в моих окнах, не будет работать с vim через iTerm.

inoremap <S-CR> <Esc>

Я хочу, чтобы Shift-Enter действовал как Escape в режиме вставки. Я пытался использовать Enter и Return, но для этого мне нужно использовать клавишу Fn на моем Macbook, что так же раздражает, как и клавиша escape.

Я ценю помощь!


person JoeQuery    schedule 22.03.2011    source источник
comment
Возможный дубликат VIM - Как сопоставить Shift-Enter   -  person rafi    schedule 26.02.2017


Ответы (3)


Проблема здесь с эмуляцией терминала. Большинство терминалов не могут отличить непечатаемые клавиши [1] от клавиш, объединенных с клавишами-модификаторами.

Однако вы все равно можете заставить работать желаемую комбинацию, если ваше терминальное приложение имеет возможность переназначать комбинации клавиш (как это делает, например, iTerm2). Сопоставьте комбинацию терминального приложения с некоторым символом Unicode, который вы никогда не будете использовать, затем сопоставьте эту клавишу в Vim с желаемым эффектом, и вы сможете обойти это ограничение.

Для этого примера в iTerm2 откройте панель «Настройки клавиш», добавьте глобальную горячую клавишу, введите сдвиг и возврат, задайте для нее действие «Установить текст», а затем поставьте ✠ (мальтийский крест, но вы можете использовать любой случайный маловероятно -be-used символ Unicode) в качестве его значения. В вашем .vimrc добавьте следующие строки:

" Map ✠ (U+2720) to <Esc> as <S-CR> is mapped to ✠ in iTerm2.
inoremap ✠ <Esc>

Or:

inoremap <S-CR> <Esc>
" Map ✠ (U+2720) to <S-CR>, so we have <S-CR> mapped to ✠ in iTerm2 and
" ✠ mapped back to <S-CR> in Vim. 
imap ✠ <S-CR>

Ввод <S-CR> в Vim в iTerm2 теперь в конечном итоге приведет к <Esc> в Vim по желанию.

[1]: например. пробел, вкладка, ввод, удаление, контроль, альт, выход.

person Tadhg    schedule 24.08.2012
comment
Принятый ответ просто объясняет проблему. Этот ответ предлагает решение. Спасибо Tadhg, я узнал что-то новое :) - person justin; 19.04.2014

Это потому, что для iTerm ‹S-CR› совпадает с ‹CR›, введите Ctrl+V Return, затем Ctrl+V Shift+Return, и вы увидите, что в обоих случаях вставляется один и тот же символ.

Итак, когда вы набираете ‹S-CR›, Vim получает ‹CR›, и ваше сопоставление не запускается.

person Raimondi    schedule 22.03.2011

MacVim — это эквивалент GVim: графический интерфейс для Vim. Вы не запускаете MacVim через iTerm. Вы либо запускаете версию с графическим интерфейсом (MacVim.app), либо версию CLI ($ vim).

Вы можете запустить графический интерфейс из CLI, но настройки iTerm никоим образом не будут мешать настройкам MacVim.

В MacVim ваше отображение работает отлично.

Насколько мне известно, все или большинство «терминалов» обрабатывают так же, как . Может, стоит попробовать другую последовательность, например jj?

person romainl    schedule 22.03.2011
comment
Вы правы, я имел в виду Vim через Terminal. Я отредактировал свой исходный пост, чтобы отразить это. Благодарю за разъяснение! - person JoeQuery; 22.03.2011