Подсветка синтаксиса для регулярных выражений в Vim

Каждый раз, когда я смотрю на регулярные выражения любой сложности, мои глаза начинают слезиться. Есть ли какое-либо существующее решение для предоставления различных цветов к различным видам символов в regex выражении?

Идеально я хотел бы другое выделение за буквенные символы, escape-последовательности, коды класса, привязки, модификаторы, предвидения, и т.д. Очевидно, синтаксис изменяется немного через языки, но это - морщина, с которой будут иметь дело позже.

Бонусные очки, если это может так или иначе сосуществовать с Vim подсветки синтаксиса, делают для любого языка, использует regex.

Это существует где-нибудь, или я должен там делать его?

10
задан Conner 11 August 2012 в 00:51
поделиться

3 ответа

Регулярные выражения могут не выделяться синтаксисом, но вы можете попытаться сделать их более удобочитаемыми другими способами.

Некоторые языки позволяют разбивать регулярные выражения на несколько строк (Perl, C #, Javascript). Как только вы это сделаете, вы можете отформатировать его, чтобы он был более читабельным для обычных глаз. Вот пример того, что я имею в виду .

Вы также можете использовать расширенный синтаксис (? X), описанный здесь , на некоторых языках. Вот пример:

(?x:          # Find word-looking things without vowels, if they contain an "s"
   \b                       # word boundary
   [^b-df-hj-np-tv-z]*      # nonvowels only (zero or more)
   s                        # there must be an "s"
   [^b-df-hj-np-tv-z]*      # nonvowels only (zero or more)
   \b                       # word boundary
)

РЕДАКТИРОВАТЬ :

Как указал Al , вы также можете использовать конкатенацию строк, если ничего не помогает. Вот пример:

regex = ""          # Find word-looking things without vowels, if they contain an "s"
   + "\b"                       # word boundary
   + "[^b-df-hj-np-tv-z]*"      # nonvowels only (zero or more)
   + "s"                        # there must be an "s"
   + "[^b-df-hj-np-tv-z]*"      # nonvowels only (zero or more)
   + "\b";                      # word boundary
6
ответ дан 4 December 2019 в 00:59
поделиться

Этот плагин Vim утверждает, что делает подсветку синтаксиса:

http://www.vim.org/scripts/script.php?script_id=1091

Я не думаю, что это именно то, что вам нужно, но я думаю, это приспособлено для вашего собственного использования.

3
ответ дан 4 December 2019 в 00:59
поделиться

В Vim уже есть подсветка синтаксиса для регулярных выражений Perl. Даже если вы не знаете самого perl, вы все равно можете написать свое регулярное выражение на perl (откройте новый буфер, установите тип файла на perl и вставьте ' / regex / ') и регулярное выражение будет работать на многих других языках, таких как PHP, Javascript или Python, где они использовали библиотеку PCRE или скопировали синтаксис Perl.

В файл vimscript вы можете вставить следующую строку кода, чтобы получить подсветку синтаксиса для регулярного выражения:

let testvar =~ "\(foo\|bar\)"

Вы можете поиграть с регулярным выражением в двойных кавычках, пока оно не заработает.

Очень сложно написать подсветку синтаксиса для регулярных выражений на некоторых языках, потому что регулярные выражения записываются внутри строк в кавычках (в отличие от Perl и Javascript, где они являются частью синтаксиса). Чтобы дать вам представление, этот синтаксический сценарий для PHP действительно выделяет регулярное выражение внутри строк с двойными и одинарными кавычками, но код для выделения только регулярного выражения длиннее, чем все остальные языки синтаксические скрипты.

2
ответ дан 4 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: