2013-04-21 2 views
35

Я хочу вставить новые строки в обычном режиме в vim, используя Shift-Enter и Ctrl-Enter. Я пытаюсь некоторые решения и смесительные решения от Vim Wikia - Insert newline without entering insert mode но Shift-Enter и Ctrl-Enter не ответил:Вставьте новую строку без ввода в режиме вставки, vim

" put a new line before or after to this line 
nnoremap <S-CR> m`o<Esc>`` 
nnoremap <C-CR> m`O<Esc>`` 

" reverse J command 
nnoremap <C-J> vaW<Esc>Bi<CR><Esc>k:s/\s\+$//<CR>$ 
+0

Каков ваш 'TERM' (if * nix)? – timss

+0

'echo $ TERM' ->' xterm' Почему? – helq

+0

Может быть уместно, как интерпретируются ключи. Используете ли вы экран или tmux? При этом я попробовал пару альтернатив, и он будет работать только для 'map o ' здесь. – timss

ответ

7

Благодаря тому, как ввод с клавиатуры обрабатывается внутри, это, к сожалению, не вообще возможно сегодня. (Этот частный случай должен работать в GVim, хотя.) Некоторые комбинации клавиш, как Ctrl + неалфавитный не могут быть отображены, и Ctrl + письмо против Ctrl + Сдвиг + письмо нельзя отличить. (Если ваш терминал не отправляет отдельный код termcap, который больше всего этого не делает.) В режиме ввода или командной строки попробуйте ввести комбинацию клавиш. Если ничего не происходит/не вставлено, вы не можете использовать эту комбинацию клавиш. Это также относится и к <Tab>/<C-I>, <CR>/<C-M>/<Esc>/<C-[> и т.д. (только исключение составляет <BS>/<C-H>.) Это известная точка боли, и предметом различных дискуссий по vim_dev и канала #vim IRC.

Некоторые люди (прежде всего Пол ЛевНерд Эванс) хотят исправить это (даже для консоли Vim в терминалах, которые поддерживают это), и плавают various proposals.

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

+0

кажется неудобным и странным, спасибо за объяснение – helq

+0

Это в основном из-за исторических причин, но, к сожалению, довольно сложно изменить. –

39

Моя альтернатива использует oo, чтобы вставить новую строку под ток через это отображение (соответственно OO.) (Соответственно более.): nmap oo o<Esc>k (. Соответственно nmap OO O<Esc>j)

+0

Отличный ответ. Просто «o» работает и переходит в режим вставки. Спасибо – jpincheira

+0

То, что беспокоило меня больше всего с другими ответами, было ярлык. Это способствует моим предпочтениям. – Canella

+0

I ** ** nmap o k ** т.к. Shift + J удаляет новая линия. – Mo2

1

Я использую: s/\ п/\ r \ r/g (подставляем новую строку с двумя новыми строками, что совпадает с «o»).

+0

нужен для этого прикованный кабррев – zzapper

1

Это то, что я использую:

nmap <CR> :a<CR><CR>.<CR> 

Я попытался nmap <CR> o<Esc>, но он сделал UI Glitchy, как это переключение в режим вставки и обратно.

-2

Вы можете воспользоваться взломом, чтобы сделать это.

В режиме редактирования вы можете использовать p для вставки текущего буфера обмена. Поскольку o добавляет новую строку, вы можете использовать o<ESC>ddp, чтобы добавить новую строку под курсором; оттуда, p добавит новую строку, пока вы не удалите что-то еще.