Вставить пустую строку в vim?

25

Я часто обнаруживаю необходимость вставлять пустую строку под или над текущей строкой при редактировании в vim. oи Oбудет делать это, но впоследствии они переключаются в режим вставки, что раздражает. Есть ли встроенная команда для этого, которая останется в обычном режиме?

Эндрю Ферье
источник

Ответы:

10

Оба плагина Тим Поуп, а также мой собственный плагин LineJuggler предоставляют [<Space>и ]<Space>сопоставления для добавления [count]пустых строк выше / ниже текущей строки.

По сути, это сводится к следующему:

nnoremap <silent> ]<Space> :<C-u>put =repeat(nr2char(10),v:count)<Bar>execute "'[-1"<CR>
nnoremap <silent> [<Space> :<C-u>put!=repeat(nr2char(10),v:count)<Bar>execute "']+1"<CR>
Инго Каркат
источник
Теперь я использую это, поэтому я отметил это как «правильное» решение; но все ответы здесь великолепны.
Эндрю Ферье
Отличный совет, хотя я предпочел карту <Space>oи <Space>Oвместо.
Симлев
26

Я использовал эти

map <Enter> o<ESC>
map <S-Enter> O<ESC>

по моему .vimrcгодами.

Нажмите Enter, чтобы вставить пустую строку ниже текущей, Shift + Enter, чтобы вставить ее выше.

Мистер Шунц
источник
Я отмечаю это правильно, так как это самое простое решение, хотя все эти ответы хорошие.
Эндрю Ферье
Так просто! Это должен быть принятый ответ!
Шехарьяр
Если вы не хотите, чтобы курсор перемещался при нажатии Enter, поместите kв конец первой карты и jв конец второй карты.
Зондо
1
Обратите внимание, что отображение Shift-Enter работает только с версией графического интерфейса vim, а не с версией терминала. stackoverflow.com/questions/16359878/vim-how-to-map-shift-enter
ishmael
7

Еще один способ вставить строки выше или ниже:

nnoremap <Enter> :call append(line('.'), '')<CR>
nnoremap <S-Enter> :call append(line('.')-1, '')<CR>

Обратите внимание, что решение от romainl и Mr Shunz переместит курсор на вновь вставленную строку, в то время как этот, а также Ingo Karkat будут держать курсор в том же месте.

возьми два
источник
1

Нет, для этого нет встроенной команды.

Эти отображения делают то, что вы хотите:

nnoremap <leader>o o<Esc>
nnoremap <leader>O O<Esc>
romainl
источник