部分的にマングルされたデータを含む100,000以上のファイル、混合テキスト+バイナリファイル(httpヘッダーを含むjpg画像データの単一ファイル)があり、一部のヘッダーフィールドにはdosスタイル^ M ^ Jの行末があり、一部はunixスタイル^Jのみです。 。vimがこのようなファイルを開くと、unix形式として扱われます。したがって、^ Mがないすべてのヘッダー行は、1つ追加する必要があります。しかし、これは非常に難しいことが証明されています。
:1,11s/Cache-Control:.*\zs^M\{0,}$/^M/
動作しません。置換文字列として\=printf( "%s"、 "^ M")を使用しても、そのバリエーションをすべて試しました。ただし、結果は常にファイル内の新しい空の行になります。
コマンドで^Mを追加できる唯一の方法は、
:exe "normal A\<c-q>\<c-m>\<Esc>"
さて、1つの方法は、最初に既存の^ Mを削除してから、前に追加することです。しかし、よりエレガントな1つのコマンドソリューションはありますか?
(誤解がないように、このようなファイルの簡単な例を次に示します。
HTTP/1.1 200 OK
Server: Apache/2.2.3
(more lines...)
Cache-Control: public, max-age=214748
(more lines...)
ÿØÿá Exif II* ÿì
)。
編集/解決策:100,000以上のファイルに関して、^ Mが欠落している場合にのみ一致するバージョン(キャッシュ制御ラインでのみ^ Mが欠落していることに関して)は次のとおりです(すべてのファイルがマングルされているわけではないため、これにより「アップデート!"):
:1,11s/^Cache-Control:.\{-}\zs\(^M*$\)\(^M\)\@<!/\^M/i