Как вставить новую строку с помощью vim?

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

o<Esc>p

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

Три нажатия клавиш. Не очень эффективно. Любые лучшие идеи?

Ответ 1

Вскоре после :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>

Ответ 2

Параметры:

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

Ответ 3

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

o<C-R>"

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

inoremap <C-F> <C-R>"

Ответ 4

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

o<Alt-p>

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

Ответ 5

Лично я nmapped Enter (CR), как это:

nmap <CR> o<Esc>k

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

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

<CR>jp

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

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

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

Ответ 6

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

Ответ 7

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

поэтому ojjp вставьте новую строку новой строки. он имеет еще один штрих, тогда o<esc>p, но ojjp мне легко.

Ответ 8

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

set clipboard+=unnamed

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

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

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

Ответ 9

]p вставляет в строку ниже

[p вставляет строку выше

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

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

Ответ 10

Если вы также хотите завершить режим вставки, его можно вставить в режиме вставки с помощью CTRL-R ". fooobar.com/questions/21294/...

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

Ответ 11

Это решение применяется только тогда, когда блок скопированного текста начинается с новой строки (в отличие от захвата фрагмента текста где-то внутри строки), но вы всегда можете запустить свою копию на последнем символе, который хотите захватить, затем перейдите к последнему символу в конце строки до начала требуемого блока копирования. Затем, когда вы хотите вставить его, поместите курсор в конец строки, под которой вы хотите вставить текст и нажмите p. Если я не испортил объяснение, это должно обеспечить эффект, который вы ищете.

Ответ 12

Я использую следующее сопоставление в моей конфигурации Neovim:

nnoremap <leader>p m'o<ESC>p''
nnoremap <leader>P m'O<ESC>p''

Небольшое объяснение:

  • m': установить метку в текущей позиции курсора.
  • o<Esc>p: создать новую строку ниже и вставить текст в эту строку
  • O<Esc>P: создать новую строку выше и вставить текст в эту строку
  • '': установить курсор в исходное положение

Смотрите :h mark для получения дополнительной информации о знаках в Vim.

Ответ 13

Функция ниже может вставить вставленный текст в новую строку и сохранить выравнивание с предыдущей строкой.

function! Basic_Paste_To_New_Line()
   normal ^
   let current_column = col('.')
   normal o
   call cursor(0,current_column)
   normal P
endfunction