4

構成ファイルを作成していますが、プロセスでWindows形式のファイルとUNIX形式のファイルのどちらを使用するかを定義する必要があります。期待されるファイルのコピーを持っています-emacsを終了せずに\nまたは\r\ nを使用しているかどうかを確認する方法はありますか?

4

4 に答える 4

7

Unixでファイルを開いたときにモードラインに(DOS)と表示されている場合、行末はWindowsスタイルです。Windowsでファイルを開いたときに(Unix)と表示されている場合、行末はUnixスタイルです。

Emacs 22.2マニュアル(ノード:モードライン)から:

バッファのファイルがキャリッジリターンラインフィードを使用している場合、オペレーティングシステムに応じて、コロンは円記号('\')または'(DOS)'のいずれかに変更されます。ファイルがキャリッジリターンのみを使用している場合、コロンインジケータはスラッシュ('/')または'(Mac)'のいずれかに変わります。一部のシステムでは、Emacsは改行を行区切り文字として使用するファイルのコロンの代わりに「(Unix)」を表示します。

これは、Emacsが行末のタイプであると判断したものをelispからチェックする方法を示す関数です。非常に複雑に見える場合は、おそらくそうです。

(defun describe-eol ()
  (interactive)
  (let ((eol-type (coding-system-eol-type buffer-file-coding-system)))
    (when (vectorp eol-type)
      (setq eol-type (coding-system-eol-type (aref eol-type 0))))
    (message "Line endings are of type: %s"
             (case eol-type
               (0 "Unix") (1 "DOS") (2 "Mac") (t "Unknown")))))
于 2008-10-24T17:40:40.117 に答える
2

Hexl モード (Mx Hexl モード) にすると、回線終端バイトが表示されます。

于 2008-10-24T19:39:23.513 に答える
0

find-file-literallyを使用してemacsでファイルを開きます。行の最後に^M記号がある場合は、Windows形式のテキストファイルが必要です。

于 2008-10-24T17:30:50.793 に答える
0

次の Elisp 関数は、ファイルにターミネータがnilない"\r\n"場合に戻ります (そうでない場合は、最初に出現したポイントを返します)。に入れ、.emacsで呼び出すことができますM-x check-eol

(defun check-eol (FILE)
  (interactive "fFile: ")
  (set-buffer (generate-new-buffer "*check-eol*"))
  (insert-file-contents-literally FILE)
  (let ((point (search-forward "\r\n")))
    (kill-buffer nil)
    point))
于 2008-10-24T18:11:14.377 に答える