Подтвердить что ты не робот

Есть ли подходящая команда Vime regexp OR? Каков наилучший способ найти несоответствие, если иное?

У меня есть некоторые несоответствующие операторы if и fi в script. Я хотел бы разделить все, кроме как если бы и фишки. Просто я вижу структуру. Почему я так плохо работал с таким мощным редактором? Мне нужен оператор BIGFATOR для регулярного выражения или какого-то прозрения, которое ускользнуло меня... Мне не важно, чтобы на регулярных выражениях отображалось только что-то практическое, работающее в VIM7.2.

: g/[^\t], если [/print

распечатает ifs

: g/[^\t] fi/print

распечатает fi

Что я хочу сделать или условия

: g/[^\t] fi BIGFATOROPERATOR [^\t] fi/print

У меня был успех, делающий следующее... но я чувствую, что работаю ТРУДЫМ!

: вызов TripMatch ('[^\t] *, если [', 'else', 'fi [\ t $]')

функция! TripMatch (str1, str2, str3)

пусть var1 = a: str1

пусть var2 = a: str2

пусть var3 = a: str3

пусть max = line ( "$" )

пусть n = 1

для n в диапазоне (1, max)

let currentline = getline (n)

if currentline =~? var1

   echo n "1:" currentline

else

   if currentline =~? var2

      echo n "2:" currentline

   else

      if currentline =~? var3

         echo n "3:" currentline

      else

         let foo = "do nothing"

      endif

   endif

endif     

ENDFOR

EndFunction

4b9b3361

Ответ 1

:g/[ ^\t]if\|[ ^\t]fi/print

BIGFATOROPERATOR - \|. Он назывался оператор чередования. В PCRE это просто |. Он сбежал в Vim/ex, потому что | используется в других местах для общих команд (или что-то - FIXME).

Ответ 2

Если вы хотите удалить все остальные строки, кроме тех, у которых есть if, else или fi, вы можете использовать этот

%v/\(if\|else\|fi\)/d   

'v' является противоположностью 'g' и удаляет любые строки, которые не соответствуют регулярному выражению.

Чтобы добавить к тому, что сказал страг, символ трубы '|' я убежден, что Vim предполагает, что вы будете искать буквенные символы чаще, чем вам понадобится обширный RegExps.

Вы можете заставить Vim использовать менее escaped RegExps, установив "магический" уровень на "очень", когда в ex-режиме:

Использование "\ v" означает, что в шаблоне после всех ASCII-символов, кроме '0' - '9', 'a' - 'z', 'A' - 'Z' и '_' имеют особое значение. "очень магия"

Смотрите: he/magic для получения дополнительной информации

Не рекомендуется, чтобы в вашем vimrc установленный уровень магии по умолчанию был "очень" (как в файле справки).

Ответ 3

:h /\|

Если вы пропустили \|, вы, вероятно, пропустили много других pattern "токенов".