この質問は既に解決済みですが、「sed & awk, 2nd Ed.」で優れた解決策を見つけました。(O'Reilly) 共有する価値があると思いました。vim はまったく使用せず、代わりに sed を使用します。このスクリプトは、1 つまたは複数の空白行 (これらの行に空白がないと仮定) のすべてのインスタンスを単一の空白行に置き換えます。コマンドラインで:
sed '/ˆ$/{
N
/ˆ\n$/D
}' myfile
sed は実際にファイルを編集するのではなく、編集した行を標準出力に出力することに注意してください。この入力をファイルにリダイレクトできます。
sed '/ˆ$/{
N
/ˆ\n$/D
}' myfile > tempfile
ただし、 に直接書き込もうとするとmyfile
、ファイルの内容全体が削除されるだけであり、これは明らかに望んでいるものではありません。出力を に書き込んだ後tempfile
、ただただmv tempfile myfile
! 複数の空白行のすべてのインスタンスは、単一の空白行に置き換えられます。
さらに良い:
cat -s myfile > temp
mv temp myfile
猫ってすごいですよね?
最高:
vim 内で実行する場合は、vim 内の行の範囲でシェル コマンドを実行する vim の便利な機能を使用して、複数の空白行のすべてのインスタンスを 1 つの空白行に置き換えることができます。
:%!cat -s
それだけで、ファイル全体が再フォーマットされます。