Видалення діапазону з n рядків до і після відповідного рядка?


12

У мене є файл конфігурації, що повторюється, і я хотів би зіставити регулярний вираз і видалити діапазон рядків до і після відповідності. Я також хотів би видалити збіг в одній команді.

Я можу використовувати ...

:g/match/-1d

... кілька разів видалити більше одного рядка перед матчем ...

... і поєднайте його з кількома дзвінками до ...

:g/match/+1d

... видалити більше одного рядка після матчу ...

Але чи є можливість видалити діапазон рядків до, після, включаючи, збіг з однією командою?

Відповіді:


21

Ти майже там; Ви також можете вказати діапазон рядків, який є у формі [line1],[line2][command], а не просто [line][command](як ви зараз використовуєте).

Ви можете використовувати .для посилання на поточний рядок.

  • Для поточного та наступного рядка: :g/match/.,+1d
  • Для поточного та попереднього рядка: :g/match/-1,.d
  • Для попереднього, поточного та наступного рядка: :g/match/-1,+1d

Дивіться :help [range]докладнішу інформацію, і в цій відповіді є ще кілька прикладів .


Чи синтаксис однаковий у sed?
leeand00

3
@ leeand00 Ні. Все, що потрібно :g, - це виконати команду ex у рядках, що відповідають шаблону. Отже, введення тексту :g/match/.,+1dбуде точно таким же, як і переходити до всіх рядків match, а вводити текст:.,+1d
Мартін Турной

Це найкрутіша річ, яку я дізнався про vim за деякий час. Дякую, що поділились!
lps
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.