Есть ли простой встроенный способ удалить первую и последнюю строку блока в vim? - PullRequest
4 голосов
/ 19 сентября 2011

Довольно распространенная задача в программировании - снять условие с текущего блока.

В vim есть простой способ удалить первую строку (оператор if) и последнюю строку (закрывающую фигурную скобку) текущего блока и, возможно, сделать соответствующий повторный отступ. Если для этой встроенной функции не существует простой комбинации клавиш, каков простой способ ее написания?

Если подумать немного об этом, то, конечно, условие в операторе if может занимать несколько строк, поэтому, по-видимому, для полного захвата требуется сценарий. Однако для моего кода простое удаление первой и последней строк охватило бы 95% случаев.

Ответы [ 3 ]

7 голосов
/ 19 сентября 2011

Возможное решение

yiBvaBVpgv<
  • yiB дергает внутренний блок
  • vaBV выберите блок, затем выберите его также
  • p вставить поверх визуально выделенного текста
  • gv< повторно выбрать текст и де-отступ

Окружение, как сопоставления, или удаление окружающего блока:

nnoremap dsB yiBvaBVpgv<

ib предоставил более короткое решение. Это решение не изменяет визуальные метки: '<, '>

diB]pkdk
  • diB удаляет текущий внутренний блок
  • ]p вставьте недавно удаленный текст ниже конца блока, но измените отступ.
  • kdk переместить строку вверх, а затем удалить 2 строки вверх, тем самым удалив начало и конец блока.
2 голосов
/ 19 сентября 2011

Как насчет чего-то вроде di{ dk k "2p?Или чуть более элегантно, <i{ di{ dk k "2p.Обратите внимание, что вы должны быть внутри блока, чтобы это работало - если вы находитесь на открывающих или закрывающих строках блока, вы вместо этого воздействуете на окружающий блок.

1 голос
/ 26 мая 2012
command! -range=% Delete1$ <line1>delete _|<line2>delete _
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...