Буферы копирования копий vim

Предположим, у меня есть следующий текст (для ясности я пронумеровал строки), а курсор находится в начале 5-й строки:

1
2 var x = 1;
3 var y = 2;
4 
5 if (true) {
6     print("Hey!");
7 }

Хорошо, теперь я пытаюсь вырезать строки 5, 6, 7 (все это "если" штуковина). Для этого я делаю: Vjjd. Теперь, кажется, я нахожусь в начале четвертой строки, которая является пустой строкой.

Мой вопрос: возможно ли в этот момент удалить 4-ю строку без потери ранее скопированных строк 5, 6, 7 (это "если" штука), так что я смогу вставить их где-нибудь еще, скажем, на 1-й строке позже?

Ответ 1

Вы всегда можете yank или удалить в регистр, используя n, где n - это любой ключ. См. список доступных регистров в "справочных регистрах", некоторые из которых имеют особое значение. Например, вы можете сделать:

> "a3dd (to delete the last three lines into a register called a)
> dd (to delete the blank line) 
> "ap (to paste the a register)

Вы также можете использовать объявление Vjj, чтобы соответствовать тому, что вы делали в исходном вопросе.

Ответ 2

Да: вы можете использовать регистр Blackhole buffer: type "_dd

Ответ 3

если ваша строка # 4 пустая строка, это легко, вам не нужно играть с регистром. просто выполните:

kJ

это означает:

k: move to #3
J: (shift-J) Join #3 and #4

или вы предпочитаете делать это в режиме INSERT.

i<BS>

или

I<c-u>

, если эта строка не пуста:

  • используя регистр для хранения 3 строк или # 4, например, @Derek предложил
  • используя регистр черных дыр, например @Jan, предложите
  • или используя нумерованный регистр.

скажем, теперь вы только что сделали 3dd (без именованного регистра) и указали на непустую строку (# 4), вы могли бы непосредственно сделать dd. 3 строки не исчезли. вы можете вставить их снова:

"2p