21

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

4 ответа4

25

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

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

в моем .vimrc годами.

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

8

Плагин Tim Pope для неповрежденных приложений, а также мой собственный плагин 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>
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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .