2010-06-21 3 views
8

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

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

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

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

ответ

6

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

Некоторые языки позволяют разбить регулярные выражения на несколько строк (perl, C#, Javascript). Как только вы сделаете это, вы можете отформатировать его, чтобы он был более читабельным для обычных глаз. Here's an example of what I mean.

Вы также можете использовать advanced (?x) syntax explained here на некоторых языках. Вот пример:

(?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 
) 

EDIT:

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 
+2

+1: Это хороший способ сделать это. Когда вы пишете функции в собственном Vim, поддержка verbose RE не поддерживается, но если вы хотите это сделать, вы можете использовать конкатенацию строк для достижения того же. – DrAl

3

Этот плагин Вим утверждает, что делать синтаксический higlighting:

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

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

2

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

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

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

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

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

Смежные вопросы