1

部分的にマングルされたデータを含む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

4

1 に答える 1

6

単一のコマンドはのようになり:v/^M/s/$/\^M/ます。これは、を使用します。つまり、バックスラッシュでエスケープされ<C-v><C-m>たリテラル文字を挿入します。^M

于 2012-07-27T14:02:59.970 に答える