Вставьте пустые строки без ввода режима вставки

Я часто оказываюсь подпрыгивая на 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 пробелов над моей текущей строкой.

Любые предложения о том, как я могу исправить это, чтобы разрешить диапазоны и все же вернуться к исходной позиции курсора по завершении?

Ответ 1

Вы можете использовать :call append(linenumber, repeat([''], 5)). Он не перемещает курсор.

Ответ 2

Плагин unimpaired добавляет сопоставления, которые делают то, что вы хотите. Вы можете вставить пустую строку над курсором с помощью [<space> или под курсором с помощью ]<space>. Оба эти сопоставления могут быть добавлены с помощью счетчика.

Ответ 3

Я добавил это в мой .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>``

Я предпочитаю это решение по нескольким причинам:

  • Обычно я не использую клавиши - или _ в обычном режиме, и они расположены на том же физическом ключе на моей клавиатуре.
  • Кажется, что установка плагина для этого является излишним. Я избегаю загрузки плагинов для простых вещей, поскольку они вводят новый код в мою среду, который я еще не полностью понимаю или доверяю, и это может мешать другим настройкам или плагинам.
  • Я попробовал решение от автора этого вопроса, находящегося в его комментарии, в соответствии с принятым ответом, но после этого команда . делает странные и тревожные вещи.
  • Я обычно предпочитаю нажимать . несколько раз, передавая числовой аргумент, так что вместо того, чтобы сидеть там, подсчитывая вещи на моих пальцах, я просто продолжаю нажимать ., пока он не станет прав (менее концептуальная визуализация и более реальное видение), К сожалению, даже это решение не работает так, как я хочу, с помощью команды .. Однако, сопоставляя - и _, их можно нажимать повторно для одного и того же эффекта. Просто стыдно, что он не ближе к домашнему ряду...

ПРЕДУПРЕЖДЕНИЕ: Маркировка клавиши ` влияет на список переходов. Вы можете использовать любую другую отметку, если это делает ваше удовольствие ++