Вырезать и вставить несколько строк в vim
Я запускаю vim 7.3 на Mac 10.7.2, и у меня возникают проблемы с резанием и вставкой нескольких строк.
В моей старой установке Linux (которая была украдена, поэтому я не знаю версий), я мог бы набирать "dd" несколько раз, а затем "p" будет вытаскивать все из них. Например: введите: "dd dd" и две строки будут удалены. Теперь введите "p" , и обе строки вставлены обратно в буфер.
Я знаю, что могу выполнить то, что хочу, набрав "2dd", а затем "p" - но я хотел бы иметь возможность "dd" -out строк, не рассчитывая количество строк раньше времени.
Любые идеи?
Ответы
Ответ 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
но это приведет к тому, что этот регистр будет расти без его очистки