Как вставить в строку, где находится курсор? - PullRequest
48 голосов
/ 21 февраля 2012

Команда p вставляется под курсором, а P - над курсором.Какую команду вставить в строку, где находится курсор?

Ответы [ 10 ]

35 голосов
/ 21 февраля 2012

Все зависит от типа данных в регистре, который вы вставляете.Если данные ориентированы на строки (например, с y y ), они будут вставлены как целая строка выше или ниже курсора.Если данные ориентированы на символы (например, y 2 w ), то они будут вставлены в или перед позицией курсора в текущей строке.

См. :help linewise-register для получения дополнительной информации о взаимодействии между типом регистра и командой put.

17 голосов
/ 21 февраля 2012

Меню Редактировать в gvim содержит следующее:

  • Вставить = " + г P

  • Поставить перед = [ p

  • Поставить после = ] p

Если вы используете vim в Windows, вы можете сделать следующее, чтобы получить Ctrl + C и Ctrl + V работать как положено:

source $VIMRUNTIME/mswin.vim
behave mswin
8 голосов
/ 22 февраля 2012

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

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

Существует несколько способов сделать это:

  • "_ddP

    1. "_dd удаляет всю текущую строку в «регистре черной дыры», следующая строка теперь является текущей строкой.

    2. P помещает содержимое безымянного регистра выше текущей строки.

  • Vp

    1. V переводит вас в режим VISUAL LINE и визуально выделяет всю текущую строку

    2. p заменяет выбор содержимым безымянного регистра

  • S<C-r>"

    1. S удаляет содержимое текущей строки и помещает вас в INSERT mode

    2. <C-r>" помещает содержимое безымянного регистра

Две последние опции имеютИнтересный побочный эффект: содержимое предыдущей строки заносится в неназванный регистр, что делает невозможным выполнение нескольких вставок с одним и тем же содержимым.

К счастью, вы можете обойти эту ситуацию:

  • «Регистр черной дыры», упомянутый в первом решении, работает, ну ... как черная дыра.Все, что вы помещаете в него, исчезает навсегда, поэтому вы можете продолжать использовать p и P с некоторой степенью уверенности в том, что безымянный регистр при вставке остается неизменным.

  • Vimдает вам доступ к 26 алфавитным регистрам, которые вы можете использовать для сохранения макросов или… многократного вставления материала.

    Принимая второе решение в качестве отправной точки, вы начинаете с того, что целую строку вставляете в регистр "a с "ayy затем вы делаете V"ap в другой строке.

Но все вышеперечисленное предполагает, что текст, который вы хотите вставить, является реальной строкой.Vim делает различие между «строковым» и «символьным»: он не позволяет вставлять строку в символьный контекст или наоборот.

Смахивание всей строки с помощью yy сохраняет свою линейность или символьность, и вы не сможете p между двумя символами в одной строке.Для этого вам нужно убедиться, что то, что вы дергаете, не будет интерпретировано Vim как линейное.Например, давайте предположим, что вы находитесь на первом символе первой строки и хотите нажать ipsum dolor и поставить его на обычное место между lorem и sit:

ipsum dolor
lorem  sit amet

. Вы должны ввести"ayee, чтобы поместить ваш восстановленный текст в регистр "a, поместите курсор в нужное место и введите "aP.

2 голосов
/ 23 декабря 2015

Для вставки в режиме вставки просто нажмите Control + R .Затем введите регистр, например, Shift + + .

Чтобы вставить в командный режим, вы нажимаете P , однако вы должны сделатьубедитесь, что в вашей строке нет символа новой строки (например, дергается 0v$hy), в противном случае она появится над курсором.

То же самое для визуального режима, см. Как вставитьлиния в вертикальном блоке выделения? в Vim SE

1 голос
/ 14 мая 2014

Мне нужно было так часто «приводить» содержимое регистра в определенный (символьно / линейно / блочно) режим, я написал для него плагин UnconditionalPaste . Он предоставляет gcp, glp и т. Д. Альтернативы встроенным командам вставки, которые запускают определенный режим (и теперь еще несколько вариантов этой темы, например вставка с запятыми или запрошенными символами).

С его помощью вы можете просто использовать gcp / gcP для вставки после / перед позицией курсора, независимо от того, как вы дернули текст.

1 голос
/ 02 сентября 2013

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

Чтобы вырезать и вставить целую строку, используйте ^ D и p.

0 голосов
/ 25 апреля 2018

Shift + v выделит всю строку, но вы не хотите этого делать.Вместо этого нажмите CTRL + v в начале строки, которая будет выделена символом, затем $ , чтобы выбрать ее до конца строки.yank y и вставьте p .

0 голосов
/ 24 января 2018
  1. разделить строку на 2, куда вы хотите вставить

  2. вставить раздел между ними

  3. объединить3 строки с j, как описано здесь ( Удалить новую строку в Vim )

работает, но утомительно, и пришлось подумать, поискать это => vi и emacsмусор софт

0 голосов
/ 10 ноября 2017

(я знаю, что эта ветка старая, просто оставляю это и надеюсь, что это кому-то может помочь)

Вдохновленный комментариями @ wbg выше относительно удаления перевода строки, я добавил их в свои отображения:

nnoremap <leader>p :let @"=substitute(@", '\n\+$', '', '')<CR>p

inoremap <leader>p <esc>:let @"=substitute(@", '\n\+$', '', '')<CR>pa

Это полезно, когда у меня есть файл с некоторыми SQL-кодами (построчно), и мне нужно вмешаться в код.

0 голосов
/ 21 февраля 2012

Я не уверен, что есть один.Я попытался найти документацию и наткнулся на следующие три документа:

К сожалению, все три имеют только две команды, которые вы перечислили.В частности, третья ссылка гласит, что The commands to paste are p and P...

...