Проблема здесь в эмуляции терминала.Большинство терминалов не могут различить непечатаемые клавиши [1] и те клавиши, которые объединены с клавишами-модификаторами.
Однако вы все равно можете заставить работать желаемую комбинацию, если ваше терминальное приложение имеет возможность переназначать комбинации клавиш (как iTerm2, например, делает).Сопоставьте комбинацию приложения терминала с каким-нибудь символом Unicode, который вы никогда не будете использовать, затем сопоставьте этот ключ в Vim с желаемым эффектом, и вы можете обойти это ограничение.
Для этого примера в iTerm2 откройте ключиПанель настроек, добавьте глобальную комбинацию клавиш, введите shift и return, дайте ей действие Set Text, а затем поставьте ✠ (мальтийский крест, но вы можете использовать любой случайный символ Юникода, который вряд ли будет использоваться) в качестве его значения.,В вашем .vimrc добавьте следующие строки:
" Map ✠ (U+2720) to <Esc> as <S-CR> is mapped to ✠ in iTerm2.
inoremap ✠ <Esc>
Или:
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]: Например, пробел, табуляция, ввод, удаление, управление, alt, escape.