Как вставить в новую строку с Vim? - PullRequest
118 голосов
/ 28 августа 2009

Мне часто приходится вставлять некоторые вещи в новую строку в vim. Что я обычно делаю, это:

o<Esc>p

Который вставляет новую строку и переводит меня в режим вставки, затем выходит из режима вставки и, наконец, вставляет.

Три нажатия клавиш. Не очень эффективно. Есть идеи получше?

Ответы [ 12 ]

57 голосов
/ 28 августа 2009

Вскоре после :help p написано:

:[line]pu[t] [x]    Put the text [from register x] after [line] (default
                    current line).  This always works |linewise|, thus
                    this command can be used to put a yanked block as
                    new lines.

:[line]pu[t]! [x]   Put the text [from register x] before [line]
                    (default current line).

К сожалению, оно не короче вашего текущего решения, если вы не объединили его с какой-то картой клавиатуры, как предложено в другом ответе. Например, вы можете сопоставить его с любой клавишей (даже p):

:nmap p :pu<CR>
46 голосов
/ 28 августа 2009

Параметры:

1) Используйте yy, чтобы восстановить всю строку (включая символ конца строки). p вставит строку в новую строку после текущей, а P ( Shift - P ) вставит над текущей строкой.

2) Создайте отображение: тогда это всего один или два ключа:

:nmap ,p o<ESC>p
:nmap <F4> o<ESC>p

3) Функциональная версия отображения (на самом деле ненужная, но только для полноты):

:nmap <F4> :call append(line('.'), @")<CR>

" This one may be a little better (strip the ending new-line before pasting)
:nmap <F4> :call append(line('.'), substitute(@", '\n$', '', ''))<CR>

:help let-register
:help :call
:help append()
:help line()
:help nmap
24 голосов
/ 28 августа 2009

Вы можете вставить буфер в режиме вставки, используя <C-R>, за которым следует имя буфера для вставки. Буфер по умолчанию ", поэтому вы должны сделать

o<C-R>"

Я обнаружил, что я использую <C-R>" очень часто, и связал это с <C-F> в моем vimrc:

inoremap <C-F> <C-R>"
18 голосов
/ 16 июня 2015

Это все еще использует три нажатия клавиш, но я считаю, что это проще, чем Esc:

o<Alt-p>

Поскольку после нажатия o вы находитесь в режиме вставки, модификатор Alt позволит вам использовать команду, как если бы вы ее не использовали.

9 голосов
/ 07 февраля 2013

Лично я nmapped Введите (CR) как это:

nmap <CR> o<Esc>k

... на основе этой статьи Vim Wikia.

Таким образом, я могу создавать новые строки непосредственно из обычного режима, и в сочетании с желанием вставить новую строку ниже, я бы сделал:

<CR>jp

Вы также можете пропустить k в nmap выше, в зависимости от того, какую функциональность вы предпочитаете из Введите , так что это будет просто <CR>p.

Я также отобразил jj на Esc , что также поможет в этом случае. Esc слишком далеко от домашнего ряда, чтобы понять, насколько он важен для vim.

Не короче, чем другие решения, но я думаю, что он кажется менее неуклюжим, чем некоторые из них, и у него тоже есть другие применения.

5 голосов
/ 28 августа 2009

Если вы копируете целую строку, а затем вставляете целую строку, используйте Y, чтобы сначала восстановить строку или строки, включая разрыв строки, и p для вставки. Вы также можете использовать V, который является визуальным режимом line , в отличие от обычного v для визуального режима.

3 голосов
/ 10 декабря 2013

У меня есть отображение inoremap jj <ESC>. Так что легко вставить новую строку с ojj и Ojj, а затем p.

так ojjp вставьте новую строку. у него есть еще один удар, чем o<esc>p, но ojjp для меня легко.

2 голосов
/ 27 мая 2019

]p пасты на линии ниже

[p пасты на линии выше

Преимущества:

  • работает со всем восстановленным текстом (слово, строка, символ и т. Д.)
  • отступ вставленного текста в соответствии с отступом текста вокруг него
  • 2 нажатия клавиш вместо 3 и гораздо более «легких» ударов
  • сохраняет мой .vimrc минимально возможным и не использует отображение
  • быстро
2 голосов
/ 05 августа 2016

Я нашел элегантное решение для этого. Если вы помещаете регистр янки в буфер обмена вашей ОС (что в любом случае замечательно), наберите

set clipboard+=unnamed

, чем вы можете сделать o<Ctl-v>.

Помимо меньшего количества штрихов, это улучшается как для o<Esc>p, так и :pu, поскольку сохраняет отступ: оба других параметра начинаются с нулевого символа в новой строке.

Предостережение заключается в том, что это может зависеть от ОС. Все, что я знаю, это то, что он работает на последней версии OS X, но буфер обмена - это лишь один из многих способов получить рывок в буфере обмена ОС.

1 голос
/ 27 октября 2017

Если вы также хотите завершить в режиме вставки, можно вставить в режиме вставки, используя CTRL-R ". https://stackoverflow.com/a/2861909/461834

Все еще три нажатия клавиш, но без выхода, и вы сохраняете нажатие клавиш, если все равно хотите закончить вставку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...