Ответ 1
Просто нашел решение здесь. Следующее регулярное выражение работает правильно:
g/^\(.*\)$\n\1$/d
В этом вопросе уже рассматриваются способы удаления повторяющихся строк, но выполняется принудительное сортирование списка.
Я бы хотел выполнить этап удаления смежных повторяющихся строк (т.е. uniq
) без их первой сортировки.
Пример до:
Foo
Foo
Bar
Bar
Пример после:
Foo
Bar
Просто нашел решение здесь. Следующее регулярное выражение работает правильно:
g/^\(.*\)$\n\1$/d
:%!uniq
если вы используете систему unix или систему с программой uniq
Если вы хотите удалить несмежные дубликаты, вы можете использовать
:g/^\(.*\)\ze\n\%(.*\n\)*\1$/d
(который удалит все, кроме последней копии строки)
который изменил бы
Foo
Bar
Foo
Bar
Foo
Baz
Foo
Quux
to
Bar
Baz
Foo
Quux
Если вы хотите удалить все, кроме первой копии, попробуйте
:g/^/m0
:g/^\(.*\)\ze\n\%(.*\n\)*\1$/d
:g/^/m0
который изменил бы
Foo
Bar
Foo
Bar
Foo
Baz
Foo
Quux
к
Foo
Bar
Baz
Quux
Если вы просто хотите удалить повторяющиеся строки смежных, просто используйте uniq, не сортируя ничего.
:%!uniq
:%s/^\(.*\)\(\n\1\)\+$/\1/ge
это мой ответ для вас
Я знаю, что это старо, но стоит упомянуть, что следующее также работает, если вы не против сортировки (я знаю, что OP хотел его избежать):
:sort u