Как удалить отдельные строки в редакторе vim

Как удалить отдельные строки в редакторе vim

Предположим, у меня есть 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

Связанный контент