Подсветка синтаксиса для регулярных выражений в Vim - PullRequest
9 голосов
/ 22 июня 2010

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 22 июня 2010

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

Некоторые языки позволяют разбивать регулярные выражения на несколько строк (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
3 голосов
/ 22 июня 2010

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

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

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

2 голосов
/ 22 июня 2010

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

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

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

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

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

...