Предположим, у меня есть 50 строк в редакторе vim и мне нужно удалить определенные строки (5,9,16,28) одной командой.
решение1
Манипулировать отдельными строками одновременно неудобно, но это возможно:
:g/\v%5l|%9l|%16l|%28l/d
:g/.../
- Действуйте по линиям, соответствующим шаблону/.../
.\v
-очень волшебно, меньше экранирования специальных символов в регулярных выражениях.%<num>l
- совпадение по номеру строки<num>
(то есть%5l|%9l|...
совпадение с 5-й или 9-й строкой или ... ).:d
удаляет строки.
Если это всего лишь одна строка или диапазон строк, вы можете сделать :<num>d
или :<start>,<end>d
(например, :5d
для пятой строки или :9,16d
для диапазона строк с 9-й по 16-ю (включительно)).
решение2
:5d|9d|16d|28d
Как поставить четыре одиночные команды в ряд. Но лучше перевернуть:
:28d|16d|9d|5d
Чтобы нумерация оставалась постоянной.
Более гибкий способ — использовать vimscript. Если сжать это до одной строки, то получится:
:for n in [28,16,9,5] | call deletebufline("%",n,n) | endfor