Как вставить новую строку с помощью 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