Как объединить и отрицать эти два шаблона вместе?

#vim

#vim

Вопрос:

В VIM я хочу удалить все строки, которые не состоят из 2 или 3 символов.

 :g/^..$/d
:g/^...$/d
  

Они удаляют 2 или 3 символьные строки. Как объединить два в один и отменить его, а именно «не удалять 2 или 3 строки символов»

Ответ №1:

Вы можете использовать :v для выполнения команды в строках, которые не соответствуют шаблону.

Однако для этого требуется, чтобы вы использовали один шаблон… Что в вашем случае вы можете легко сделать, используя = модификатор, чтобы при необходимости сопоставить последний элемент.

Итак, чтобы удалить все строки, содержащие 2 или 3 символа, вы можете использовать:

 :g/^...=$/d
  

И удалить все строки, кроме тех, которые содержат 2 или 3 символа:

 :v/^...=$/d
  

Комментарии:

1. Приятно, я не знал об = . Но это не регулярное выражение, не так ли? Эквивалентом регулярного выражения было бы ? ?

2. @LievenKeersmaekers Смотрите ссылку на справку Vim по регулярным выражениям Vim. Vim также принимает ? значение необязательного. В разделе «очень волшебно» вы также можете опустить обратную косую черту.

3. Я просмотрел ссылку, но сомневаюсь, что когда-либо смогу освоить смешивание модификаторов regex и vim (не говоря уже о том, чтобы понять, когда это использовать).

Ответ №2:

Ответ №3:

Как насчет «удалить все строки, содержащие менее двух или более трех символов»?

 :g/^.{,1}$|^.{4,}/d