2010-04-29 17 views

Respuesta

24

acaba de encontrar la solución here. La siguiente expresión regular funciona correctamente:

g/^\(.*\)$\n\1$/d 
15
:%!uniq 

si estás en un sistema UNIX o un sistema que tiene el programa uniq

+0

Buena sugerencia, debería haber mencionado en la pregunta de que estoy en Windows (y no en Cygwin). – dukedave

2

Si lo que desea es eliminar contiguos líneas duplicadas, sólo tiene que utilizar uniq sin ordenar nada.

:%!uniq 
9

Si desea eliminar duplicados no contiguos podría utilizar

:g/^\(.*\)\ze\n\%(.*\n\)*\1$/d 

(lo que eliminará todos excepto el último ejemplar de una línea)

que cambiaría

Foo 
Bar 
Foo 
Bar 
Foo 
Baz 
Foo 
Quux 

a

Bar 
Baz 
Foo 
Quux 

Si desea eliminar todos menos la primera copia, trate

:g/^/m0 
:g/^\(.*\)\ze\n\%(.*\n\)*\1$/d 
:g/^/m0 

que cambiaría

Foo 
Bar 
Foo 
Bar 
Foo 
Baz 
Foo 
Quux 

a

Foo 
Bar 
Baz 
Quux 
0
:%s/^\(.*\)\(\n\1\)\+$/\1/ge 

esta es mi respuesta para usted

0

Sé que esto es viejo, pero vale la pena mencionar lo siguiente también funciona si no le importa la clasificación, así (sé que el PO quería evitarlo):

:sort u 
Cuestiones relacionadas