Удаление смежных повторяющихся строк в vi без сортировки

В C func() означает, что вы можете передать любое количество аргументов. Если вам не нужны аргументы, вы должны объявить как func(void). Тип, который вы передаете своей функции, если не указан по умолчанию int.

13
задан Community 23 May 2017 в 12:34
поделиться

4 ответа

Только что нашел решение здесь . Следующее регулярное выражение работает правильно:

g/^\(.*\)$\n\1$/d
25
ответ дан 1 December 2019 в 17:25
поделиться

Если вы просто хотите удалить смежных повторяющихся строк, просто используйте uniq, ничего не сортируя.

:%!uniq
3
ответ дан 1 December 2019 в 17:25
поделиться
:%!uniq

если вы используете систему unix или систему, в которой есть программа uniq

16
ответ дан 1 December 2019 в 17:25
поделиться

Если вы хотите удалить несмежные дубликаты, вы можете использовать

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

(который удалит все, кроме последней копии строки)

, который изменит

Foo
Bar
Foo
Bar
Foo
Baz
Foo
Quux

на

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
13
ответ дан 1 December 2019 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: