This questionはすでに重複行を削除する方法を扱っていますが、リストが最初にソートされることを強制します.
uniq
最初に並べ替えずに、連続した重複行の削除手順 (つまり) を実行したいと思います。
前の例:
Foo
Foo
Bar
Bar
後の例:
Foo
Bar
This questionはすでに重複行を削除する方法を扱っていますが、リストが最初にソートされることを強制します.
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
に
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
これが古いことは知っていますが、並べ替えも気にしない場合は、次のことも言及する価値があります(OPがそれを避けたかったことは知っています):
:sort u