После того, как вы вложили в Vim прядильную линию, почему я не могу вставить ее снова?

Этот вопрос, скорее всего, был дан раньше, но я попытался выполнить поиск и не смог найти ответ нигде.

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

Так, например, я дернул линию "Эта линия дергалась" на "Я не хочу эту строку" , и поэтому "Эта строка дергается" происходит поверх "Я не хочу эту строку" . Если я снова нажму кнопку p, я не получу "Эта строка дернута", но получит "Я не хочу эту строку" .

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

Ответ 1

Это связано с регистрами vim. Когда вы вставляете протянутую линию над другой строкой, линия, которую вы только что удалили (путем вставки поверх нее), занимает место yanked line в регистре по умолчанию (который хранит yanked lines). Это упрощает работу коммутационных линий. Погрузите один, вставьте поверх другого и вернитесь и снова вставьте. Тем не менее, чтобы сохранить прямую линию, вы можете указать регистр, поэтому вместо y вы можете использовать "ay, и это выдержит вашу строку в регистр a. Теперь для вставки вы можете использовать "ap, и это вставляет содержимое регистра a, которое не будет перезаписано.

В качестве бонуса "+y или "*y и "+p или "*p вставить из системного буфера обмена (вставка другой копии приложения), если он включен в vim (который находится в большинстве систем).

EDIT: Как упоминалось в комментариях, когда вы используете команду yank, yanked text не только переходит в регистр по умолчанию, но также в регистр 0 (который не будет перезаписан, когда вы вставляете что-то еще). Это означает, что вы обычно можете yank с помощью y, а затем вставьте его с помощью "0p, и он не будет перезаписан ничем, что вы наклеиваете.

Ответ 2

Из моего .vimrc:

"Paste in visual mode without copying
xnoremap p pgvy

Пояснение:

xnoremap - переназначить только в визуальном режиме

p - Вставить

gv - Повторно выберите последний выбор (не тот, который вы сейчас используете, но оригинал)

y - скопировать его (последний выбор)

Внутри этого сопоставления вы можете снова и снова вставлять визуально выбранные строки.