¿Hay un patrón como ^ en vim?

20

En el modo normal de Vim, el 0comando lo lleva a la primera columna de la línea y lo ^lleva al inicio lógico de la línea (por ejemplo, el primer carácter que no es un espacio en blanco). En el mundo regex, ^coincide con el primer personaje de la línea, espacio en blanco o no. ¿Vim tiene un patrón que se comporta como su comando '^', que coincide con el comienzo lógico de una línea?

Miguel
fuente
Creo que ^ en una expresión regular normalmente coincide con el inicio de la línea, no con el primer carácter. ^. coincidirá con el inicio y luego el primer carácter, no el inicio y luego el segundo carácter.
bdsl

Respuestas:

17

No hay un acceso directo para que coincida con el primer carácter que no sea un espacio en blanco en una línea, debe crear el patrón usted mismo, como:

^\s*restofpattern

Si no desea incluir el espacio en blanco en su coincidencia, debe usar una aserción de ancho cero, como:

\(^\s*\)\@<=restofpattern

No es exactamente bonito, pero al menos hace el trabajo.

Karl Bielefeldt
fuente
6

Para que coincida con el primer carácter que no sea un espacio en blanco, simplemente usaría \Scomo lo hace normalmente.


Si usa ^una expresión regular en vim, coincidirá con el inicio real de la línea, incluso si contiene espacios en blanco.

Por ejemplo, esta línea comienza con un espacio:

 <- there's a space there you can't see :)

Este comando vim eliminará el espacio inicial:

:%s/^ //

resultando en lo siguiente:

<- there's a space there you can't see :)

Por lo tanto, la expresión regular se comportará como espera, incluso si el comando no lo hace.

Michael Hampton
fuente
Supongo que vas a explicar el voto negativo. Esta respuesta, hasta donde yo sé, es correcta.
Michael Hampton
1
No voté en contra, pero a modo de aclaración: me preguntaba si Vim tiene un operador que coincida con el primer carácter de la línea que no sea un espacio en blanco. El ^operador (como todas las implementaciones sensatas de expresiones regulares), coincidirá con el primer carácter incluso si es un espacio en blanco.
Michael
Bueno, ¿cómo esperabas hacerlo normalmente? Por lo general, en una expresión regular, usaría algo como \Shacer coincidir el primer carácter que no sea un espacio en blanco.
Michael Hampton
2
\Scoincidirá con cualquier carácter que no sea un espacio en blanco. Para decirlo de otra manera, me pregunto si Vim tiene una forma abreviada de ancho cero para esto: ^\W*\S.
Michael
1
Ningún motor que conozco proporciona esa funcionalidad, pero, una vez más, ¿cuándo le habría importado un motor de uso general? Vim no es un motor de expresiones regulares de uso general. Es un editor que tiene un motor de expresiones regulares, así que me preguntaba si tenía alguna construcción especial para algo que solo importa dentro de un editor.
Michael