14

Я только начал с Vim вчера, и у меня проблемы с пониманием копирования и вставки. Я понимаю, что для копирования я вхожу в визуальный режим, выделите и затем нажмите. Затем я перехожу к строке, на которую я хочу вставить, но чаще всего мне не нужно удалять какой-либо текст из этой строки. Я делаю это, используя x или dw . Это приводит к тому, что моя оригинальная копия перезаписывается (поскольку x и dw кажется, обрезаются). Как мне обойти это?

Чтобы привести это в пример

$foo = $this->foo->property;
thislineuses($foo);

Итак, с помощью приведенного выше кода я $this->foo->property , затем я бы хотел перейти на строку 2, удалить $foo и вставить. Проблема в том, что когда я удаляю $foo из строки 2, это то, что вставляется вместо $this->foo->property .

5 ответов5

15

Посмотрите на :h copy-move . Янки по умолчанию или удаление идут в место, называемое регистром (регистр с именем "). Если вам нужно удалить какой-либо текст перед вставкой, вам следует избегать перезаписи регистра x, как вы обнаружили. К счастью, вы можете использовать любую другую букву или цифру для обозначения другого регистра.

  • "ayy (вставить строку в регистр a)
  • x , dd и т. д. (удалить текст в безымянный регистр ")
  • "ap (вставьте текст из регистра a
8

Если проблема в том, что вам просто нужно заменить какой-то text text2 , просто выделите текст и вставьте text2 . Затем выделите text и нажмите p или P чтобы вставить text2 вместо text .

Краткое руководство для некоторых распространенных команд vim:http://www.catswhocode.com/blog/100-vim-commands-every-programmer-should-know.

Наслаждайтесь!

Редактировать: обратите внимание, что p вставляет текст после курсора и P перед курсором.

7

Вы можете скопировать в именованный регистр "ayw , удалите, а затем вставить из именованного регистра "ap .

Однако обычно проще просто изменить порядок действий. Выполните вставку, а затем удалите или удалите, а затем выполните копирование / вставку.

Кроме того, вы можете удалить в регистр черной дыры "_d . См. Https://stackoverflow.com/q/54255/70863

3

У вас есть различные регистры, которые вы можете использовать для хранения различных текстовых значений. Если вы хотите сохранить текст в регистр, отличный от того, куда будет перемещен удаленный текст (т. Е. С помощью x или d w ), используйте следующее:

Чтобы сохранить текст в регистре a

  • нажмите " a [команда yank and движений] (сохраняет текст в регистр a)
  • перейдите туда, куда вы хотите вставить текст
  • нажмите " a p (вставьте текст из регистра a)

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

0

Вам не нужно выделять всю строку, если вы используете визуальный режим v (в отличие от V). Если это то, что вы просите.

Если вы говорите об изменении скопированного текста, то сначала вы копируете и стираете части.

И если вы хотите скопировать, то измените оригинал, а затем вставьте, затем вы можете вставить в другой регистр. Как "2y , затем измените, затем перейдите в другое место и "2p .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .