Ответ 1
Вы можете использовать :call append(linenumber, repeat([''], 5))
. Он не перемещает курсор.
Я часто оказываюсь подпрыгивая на o или O и ctrl {для вставки пустых строк и возврата из режима вставки.
Мысль о том, что должен быть более простой способ, и надеясь сохранить позицию курсора, я взломал эти неряшливые макросы:
map <Leader>O :let cursorpos = getpos(".")<CR>:i<CR><CR>.<CR>:let cursorpos[1] = cursorpos[1] + 1<CR>:call setpos('.', cursorpos)<CR>
map <Leader>o :let cursorpos = getpos(".")<CR>:a<CR><CR>.<CR>:call setpos('.', cursorpos)<CR>
Однако это не позволяет использовать диапазоны. Было бы неплохо иметь 5\O и получить 5 пробелов над моей текущей строкой.
Любые предложения о том, как я могу исправить это, чтобы разрешить диапазоны и все же вернуться к исходной позиции курсора по завершении?
Вы можете использовать :call append(linenumber, repeat([''], 5))
. Он не перемещает курсор.
Плагин unimpaired добавляет сопоставления, которые делают то, что вы хотите. Вы можете вставить пустую строку над курсором с помощью [<space>
или под курсором с помощью ]<space>
. Оба эти сопоставления могут быть добавлены с помощью счетчика.
Я добавил это в мой .vimrc
"create new line below current line without leaving normal mode or moving cursor
noremap - m`o<Esc>``
"create new line above current line without leaving normal mode or moving cursor
noremap _ m`O<Esc>``
Я предпочитаю это решение по нескольким причинам:
ПРЕДУПРЕЖДЕНИЕ: Маркировка клавиши ` влияет на список переходов. Вы можете использовать любую другую отметку, если это делает ваше удовольствие ++