こんにちは山岡です。ごめんなさい、直接の解決ではありません。

>>>>> In <867jv7ixao.fsf@crisis.moonrabbit.co.jp>
>>>>>    Ryuhei Funatsu <ryu@moonrabbit.co.jp> wrote:

> こんにちは、船津と申します。

> 最近、emacsのバージョンを21.3から21.3.50.2上げました。

[...]

> M-x replace-regexp
> Replace regexp: ^ with: mv "

> というのを良くやります。
> 21.3.50.2では、1000行以上のファイルに上記処理を行なうと
> ところどころの行で^@(NULL)が挿入される場合があります。

簡単に再現できました。

(let ((buffer (get-buffer-create "*testing*"))
      i)
  (pop-to-buffer buffer)
  (erase-buffer)
  (while (not (search-forward "\000" nil t))
    (erase-buffer)
    (setq i 1)
    (while (<= i 1000)
      (insert (format "%05d\n" i))
      (setq i (1+ i)))
    (goto-char (point-min))
    (replace-regexp "^" ".")
    (goto-char (point-min))))

;; *scratch* バッファにこれをコピーして最下行の行末で C-j。

どうやらこれは replace-regexp を定義している lisp/replace.el で
はなくて、何かの src/*.c にバグがいるのだと思います。

[...]

> 1. この現象は.emacs等の設定で直るものなのでしょうか?

ユーザ設定ではどうにもならない気がします。

> 2. 21.3.50.1でも同様の問題が発生するでしょうか?
> 3. もし21.3.50.1では問題が発生しないとして、これをCVSから取得する方法は
>    あるでしょうか?

普通、最後の数字は船津さんかどなたがか Emacs を作るたびに上がっ
ていく番号で、開発中のソースの新旧などとは関係ありません。:)
src/ChangeLog や lisp/ChangeLog ファイルを見るのが確実でしょう。
例えば、大雑把に昔のソースを CVS で取り出す場合は

cvs co -D '6 months ago' emacs

という手がありますが。
ナンでしたら、開発陣に投げてみましょうか?

ところで、ぼくはすべての行頭に同じものを挿入する場合、こんなふう
にしています。

M-x replace-string RET
Replace string: C-j with C-jmv "

ここで C-j は改行文字で、実際には C-q C-j とタイプします。
これだと置換の元が空文字ではなくなるので、似た問題は起きないので
はないでしょうか。

;; つい最近、空文字にマッチする正規表現を使うプログラムを書いた
;; ので不安になりました。
-- 
Katsumi Yamaoka <yamaoka@jpl.org>
;; ちょっと書き間違いがあったので supersede しました。^^;;