2010-06-21 29 views
8

Cada vez que miro las expresiones regulares de cualquier complejidad, mis ojos comienzan a regar. ¿Existe alguna solución para dar diferentes colores a los diferentes tipos de símbolos en una expresión de expresiones regulares?resaltado de sintaxis para expresiones regulares en Vim

Idealmente me gustaría resaltar diferentes caracteres literales, secuencias de escape, códigos de clase, anclas, modificadores, lookaheads, etc. Obviamente, la sintaxis cambia ligeramente entre los idiomas, pero eso es una arruga que se tratará más adelante.

Puntos de bonificación si esto puede coexistir de alguna manera con el resaltado de sintaxis que Vim hace para cualquier idioma que use la expresión regular.

¿Existe esto en alguna parte, o debería estar allí haciéndolo?

Respuesta

6

Las expresiones regulares pueden no estar resaltadas con sintaxis, pero puede buscarlas para que sean más legibles por otros medios.

Algunos lenguajes le permiten romper expresiones regulares en múltiples líneas (perl, C#, Javascript). Una vez que haga esto, puede formatearlo para que sea más legible para los ojos normales. Here's an example of what I mean.

También puede usar el advanced (?x) syntax explained here en algunos idiomas. He aquí un ejemplo:

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

EDITAR:

Como Al señalado, también se puede utilizar la concatenación de cadenas, si todo lo demás falla. Aquí hay un ejemplo:

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: Esta es una buena manera de hacerlo. Cuando escribe funciones en Vim nativo, no hay soporte para RE detallados, pero si quiere hacerlo, puede usar la concatenación de cadenas para lograr lo mismo. – DrAl

2

Vim ya tiene resaltado de sintaxis para las expresiones regulares de perl. Incluso si no conoce Perl, puede escribir su expresión regular en perl (abra un nuevo búfer, establezca el tipo de archivo en perl e inserte '/regex/') y la expresión regular funcionará en muchos otros idiomas, como PHP, Javascript o Python donde usaron la biblioteca PCRE o copiaron la sintaxis de Perl.

En un archivo Vimscript, puede insertar la siguiente línea de código para obtener resaltado de sintaxis para expresiones regulares:

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

Puede jugar un poco con la expresión regular entre comillas dobles hasta que lo tienes trabajo.

Es muy difícil escribir resaltado de sintaxis para expresiones regulares en algunos idiomas porque las expresiones regulares se escriben dentro de cadenas entre comillas (a diferencia de Perl y Javascript, donde son parte de la sintaxis). Para que tenga una idea, este syntax script for PHP resalta la expresión regular dentro de cadenas dobles e individuales, pero el código para resaltar solo la expresión regular es más larga que las secuencias de comandos de sintaxis completas de la mayoría de los idiomas.

Cuestiones relacionadas