VIMで、重複しているすべての行を削除し、ファイルに存在する一意の行のみを残す方法を探しています。マクロが望ましいですが、コマンドまたは関数は素晴らしいでしょう。
重複した行といくつかの一意のファイルがあるとします。
1Apple
1Apple
2Peach
2Peach
2Peach
3Beer
4Banana
4Banana
4Banana
すべての行を削除して、すべてが残るようにします。
3Beer
私が本当に欲しい1つのユニークなライン。
重複を削除して一意のリストを取得するために常にsortuを使用していますが、ファイルに一意の行が必要な場合があります。
VIMでこのケースを処理する方法はありますか?
これは、substituteコマンドと後方参照を使用して実行できます。
s/^\(.*\)\(\n\1\)\+//
これは、行がソートされている場合にのみ機能することに注意してください。これは、次の行で最初のグループを1回以上照合して削除することで機能します。
これを行うには、「uniq」コマンドを使用できます-
uniq -u filename-to-check.txt
フィルタリングするすべての行を選択します。
:'<,'>!uniq -u<CR>
を実行すると、'<,'>
の範囲が自動的に追加されます。
バッファ全体をフィルタリングする場合は、何も選択せずに:%!uniq -u<CR>
を実行します。
フィルタについては、:h filter
で読むことができます。
uniq
ツールをフィルターとしてVimから直接呼び出すことができます。
:!%uniq -u