Вырезать и вставлять несколько строк в VIM - PullRequest
50 голосов
/ 24 января 2012

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

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

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

Есть идеи?

Ответы [ 5 ]

93 голосов
/ 24 января 2012

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

Вы могли бы просто пойти:

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

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

24 голосов
/ 17 января 2015

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

d<n>d

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

p

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

d3d
p
7 голосов
/ 18 сентября 2013

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

:x,yd

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

:,yd

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

5 голосов
/ 24 января 2012

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

one
two
three

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

"qdd
"Qdd
"Qdd

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

"qp

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

1 голос
/ 24 января 2012

Я согласен с @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 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...