Подтвердить что ты не робот

VIM - Как сопоставить Shift-Enter

Я пытаюсь настроить поведение клавиши Enter в режиме Normal в VIM. Вот мой .vimrc:

nmap <CR> o<Esc>
nmap <S-CR> i<CR><Esc>

Я пытаюсь сделать Enter просто добавлением новой строки после текущей строки при нажатии. Однако, если нажата комбинация Shift-Enter, я хочу разбить текущую строку на курсор.

Последнее не работает. Всякий раз, когда я нажимаю Shift-Enter, он просто добавляет строку, не разбивая ее на курсор.

4b9b3361

Ответ 1

Из-за того, что ввод на клавиатуре обрабатывается внутренне, это, к сожалению, сегодня вообще не возможно в терминальной версии Vim (<S-CR> должен работать в GVIM на всех платформах и в консоли Windows Vim). Это известная точка боли и тема различных обсуждений на vim_dev и #vim IRC-канале.

Некоторые люди (прежде всего Пол ЛевНерд Эванс) хотят исправить это (даже для консоли Vim в терминалах, которые поддерживают это), и выпустили различные предложения, ср. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Но на сегодняшний день никаких патчей или добровольцев еще не вышли, хотя многие выразили желание иметь это в будущем выпуске Vim 8.


Примечание по отображению <CR>:

Если вы отображаете <CR> в нормальном режиме, это будет мешать выбору элементов истории в окне командной строки и при прыжке с ошибкой под курсором в окне быстрого удаления/списка местоположений! (Если вы не добавите следующее:)

:autocmd CmdwinEnter * nnoremap <CR> <CR>
:autocmd BufReadPost quickfix nnoremap <CR> <CR>

Примечание в :nmap:

Вы должны использовать :noremap; он делает отображение неустойчивым к переназначению и рекурсии.

Ответ 2

Я также хотел отобразить < S-CR > и обнаружил, что я не мог заставить его работать в режиме CLI, пока не добавил второе отображение, используя Ctrl + V, а затем < Shift + Enter > для отображаемого нажатия клавиши. Тем не менее сопоставление < S-CR > все еще необходимо для того, чтобы GVIm работал, как ожидалось. Это сделает ваш фрагмент .vimrc следующим образом:

nnoremap <CR> o<Esc>
nnoremap <S-CR> i<CR><Esc> " Needed for GVIm
nnoremap ^[0M i<CR><Esc>   " Needed for CLI VIm (Note: ^[0M was created with Ctrl+V Shift+Enter, don't type it directly)

Я тестировал это на Ubuntu 12.04. Happy Vimming!

Ответ 3

Ingo Karkat и romainl на 100% правильны. Однако то, что вы просите, является общим, поэтому я хочу дать вам несколько вариантов.

Я лично рекомендую использовать Tim Pope Unimpaired plugin. Он обеспечивает много сопоставлений, но те, которые вы ищете, это [<space> и ]<space>, которые создают пустые строки выше и ниже текущей строки соответственно. Unimpaired также обеспечивает приятные сопоставления для перемещения по списку quickfix, списку буфера, переключению параметров и многим другим. Подробнее см. :h unimpaired.

Если вы не хотите использовать unimpaired plugin, но, как и приведенные ниже сопоставления, некоторые быстрые сопоставления помещаются в ваш файл ~/.vimrc:

nnoremap <silent> [<space>  :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space>  :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>

Ответ 4

Вы не можете сопоставить <S-CR> в CLI Vim, как бы вы ни старались, потому что Vim не может отличить <S-CR> от <CR>.

Вы должны найти другое сопоставление или палку с помощью GVim/MacVim.

изменить

Некоторые терминальные эмуляторы, такие как iTerm.app или Terminal.app в Mac OS X, позволяют вам настраивать ярлыки для отправки определенных символов в оболочку. Если у вас есть такая возможность, возможно, стоит попробовать, но вы быстро привыкнете к определенному платформе gyzmo, который нельзя портировать так, ну... Я действительно не рекомендую его.

Ответ 5

Мне удалось исправить мой ключ-ключ для терминала Shift + Enter посылая ключ-код, видимо, ожидает Vim. В зависимости от вашего терминала, (Добавление Ctrl + Enter в качестве бонуса!)

iTerm2, откройте Настройки → Профили → Клавиши → [+] (Добавить) →

  • Комбинация клавиш: (Хит Shift + Enter)
  • Действие: Отправить последовательность выхода
  • Esc + [[13;2u

    Повторите для Ctrl + Enter, с последовательностью: [[13;5u

urxvt, добавьте в свой .Xresources файл:

URxvt.keysym.S-Return:     \033[13;2u
URxvt.keysym.C-Return:     \033[13;5u

Alacritty, под key_bindings добавьте следующее к вашему ~/.config/alacritty.yml:

- { key: Return,   mods: Shift,   chars: "\x1b[13;2u" }
- { key: Return,   mods: Control, chars: "\x1b[13;5u" }