2009-05-08 13 views
34

Quiero espacios partido en el principio de las líneas de VimNo puede coincidir con uno o más espacios en blanco en Vim

Pseudocódigo de lo que quiero hacer

^()* 

Sé lo siguiente del manual de

notation  meaning    equivalent decimal value(s)   
----------------------------------------------------------------------- 

<Space>   space       32  *space* 

no estoy seguro de cómo utilizar el valor decimal 32.

¿Cómo se puede unir uno o más espacios en blanco en Vim?

Respuesta

62

Typing

/^ \+ 

En el modo de comando coincidirá con uno o más caracteres de espacio en el principio de una línea.

Typing

/^\s\+ 

En el modo de comando coincidirá con uno o más caracteres de espacio en blanco (pestañas etc., así como espacios) al principio de una línea.

6

Si he entendido bien ..

/ * coincidirá con 0 o más espacios

/ {0,n} coincidirá 0 a n espacios (donde n es un número)

Para que coincida con 1 o más espacio comenzando desde el principio de la línea:

/^ \+ 
+0

@gacrux: su comando también coincide con los signos de comentario #. –

+1

Sí, no comprueba el "comienzo de la línea"^ – MSalters

+2

@Masi: ¿puede aclarar a qué se refiere? La respuesta de gacrux hace exactamente lo que pides (coincide con cero o más espacios).No coincide con los caracteres "#", pero coincidirá con los espacios cero a cada lado de ellos (y cualquier otro carácter). –

0

/ * partidos cero o más espacios

Ejemplo:

/foo *bar coincidirá foobar, foo bar, foo         bar , etcetera`.

Tenga en cuenta que si desea utilizar paréntesis como en su ejemplo, debe escaparse con un \\. Las expresiones Vim no son expresiones regulares estándar de Perl ni expresiones regulares POSIX. Usted ejemplo sería:

\\(\\)* 
2

Si usted está buscando para adaptarse a cualquier tipo de espacio en blanco (ya sea espacial o pestaña) la siguiente expresión regular es aplicable

^[\s]* 

^ coincide con el comienzo de la línea
[\s]/[\t] partidos espacio o carácter de tabulación (ambos parecen funcionar, aunque de acuerdo a la documentación que debe usar vim [\s]
* proporciona la repetición, o 0 r más

por supuesto utilizando el / para buscar como se mencionó por otros.

+0

not \ s? Pensé que solo había pestañas –

+0

De acuerdo con la documentación, tienes toda la razón, pero parece funcionar en gvim. Voy a alterar en consecuencia. – Andy

+0

He tenido una jugada y [\ t] * funciona para que coincida con el espacio y la pestaña, pero [\ t] solo coincide con las pestañas. Debe ser algo que me falta en la expresión regular. – Andy

12

Por cierto, no se sorprenda si está utilizando la opción hlsearch y todo su texto se ilumina después de ingresar / * - en lugar de solo los espacios. ¡Eso es porque cero espacios pueden coincidir en cualquier lugar!

Por lo tanto, igualar cero o más de cualquier cosa solo es útil cuando se usa junto con otra cosa.

adición después de la clarificación de la pregunta: ¿

para que coincida con uno o más espacios en blanco al principio de una línea de hacer:

/^\s\+ 

Ver:

:help whitespace 
:help /\+ 
+0

Gracias por señalarlo. Aclaré la pregunta. –

1

Ya casi ha terminado. No necesitas el(). La expresión regular es sólo "^ *", y en Vim que buscar con/por lo que había entrar /^ *

Tenga en cuenta que esto coincide con el cada línea, ya que cada línea comienza con cero o más espacios! Entonces, ¿realmente piensas eso? Si se refería a "uno o más espacios", debe reemplazar * por \+ (en la mayoría de los idiomas regex, es +, pero el + se escapó en vim). Así, /^ \+

+1

En vim necesita escaparse del + - por lo que sería/^ \ + Esto es diferente de la expresión regular compatible con Perl, creo. – gacrux

+0

SO es un Wiki, por lo que ahora está arreglado, gracias. – MSalters

6

espacios al principio de la línea en Vim:

/^ * 

Eso es:

  • '/' para la búsqueda.
  • '^' para el inicio de la línea.
  • ' ' para al menos un espacio.
  • ' *' para cero o más espacios después de eso.
+0

Si quiere hacer coincidir uno o más espacios, puede usar/^ \ + en lugar de dos espacios. El mismo número de caracteres pero un poco más claro, creo. – gacrux

+0

@paxdiablo, ¿podría dejarme saber si quisiera hacer coincidir al menos 2 espacios en el medio de las líneas? – Amir

0

Para unir espacios o pestañas desde el comienzo de la línea, también puede usar: ^\s*.

0

Creo que realmente se puede hacer es coincidir espacios hasta algún tipo de personaje no espacial, ¿verdad? Prueba esto:

^\(\+\)

O, para cualquier tipo de espacio en blanco:

^\(\s\+\)

En Vim expresiones regulares (,) y + necesitará ser escapado. Además, si planea utilizar la retro-referencia, la sintaxis es \ 1 (el primer grupo, por ejemplo) y no $ 1 como Perl.

Cuestiones relacionadas