Подтвердить что ты не робот

Вырезать и вставить несколько строк в vim

Я запускаю vim 7.3 на Mac 10.7.2, и у меня возникают проблемы с резанием и вставкой нескольких строк.

В моей старой установке Linux (которая была украдена, поэтому я не знаю версий), я мог бы набирать "dd" несколько раз, а затем "p" будет вытаскивать все из них. Например: введите: "dd dd" и две строки будут удалены. Теперь введите "p" , и обе строки вставлены обратно в буфер.

Я знаю, что могу выполнить то, что хочу, набрав "2dd", а затем "p" - но я хотел бы иметь возможность "dd" -out строк, не рассчитывая количество строк раньше времени.

Любые идеи?

4b9b3361

Ответ 1

Считаете ли вы использование визуального режима ?

Вы можете просто пойти:

  • Нажмите V
  • Выберите все, что вы хотите вырезать, не считая
  • Нажмите d
  • Перейдите туда, куда вы хотите вставить
  • Нажмите p

Это должно дать примерно половину количества нажатий клавиш, как метод dd, так как вы нажимаете один ключ на строку, а не два. Бонусные очки, если вы используете 5j (или подобное) для выбора нескольких строк за раз.

Ответ 2

Вы можете ввести:

d<n>d

где <n> - количество строк, которые вы хотите вырезать, а затем вы можете вставить их с помощью:

p

Например, чтобы вырезать и вставить 3 строки:

d3d
p

Ответ 3

Не уверен, что это достаточно близко к тому, что вы пытаетесь, но одна вещь, которую вы могли бы сделать, это использовать определенный регистр и использовать название своего регистра. Это говорит vim добавлять к регистру, а не заменять его, поэтому, если у вас есть строки:

one
two
three

вы можете ввести

"qdd
"Qdd
"Qdd

а затем, если вы введете

"qp

он вернет исходные строки

Ответ 4

Чтобы вырезать и вставить номера строк (do :set number, чтобы увидеть номера строк), для строк x to y do:

:x,yd

или если ваш курсор уже находится в строке x, do

:,yd

Затем перейдите туда, куда вы хотите вставить, и нажмите p

Ответ 5

Я согласен с @Ben S., что это предпочтительный способ выполнить это, но если вы просто хотите повторить свое старое поведение, вы можете перенаправить dd, чтобы добавить к указанному регистру, а затем сопоставить p с вставьте из этого регистра и очистите его.
Это будет иметь недостаток, заключающийся в том, что p работает только с вещами, удаленными с помощью dd (с помощью d} для удаления до конца абзаца не будет помещаться текст в правильный регистр, который будет вставлен позже).

Добавьте в свой vimrc

следующее:
noremap dd "Ddd             "Appends the contents of the current line into register d
noremap p "dp:let @d=""<CR> "Pastes from register d and then clears it out

если вы не хотите, чтобы вставлялось, чтобы очистить содержимое регистра

noremap p "dp               "Paste from register d 

но это приведет к тому, что этот регистр будет расти без его очистки