質問

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

役に立ちましたか?

解決

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")))))

他のヒント

hexl-mode(M-x hexl-mode)を使用すると、回線終了バイトが表示されるはずです。

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

次のElisp関数は、ファイルに" \ r \ n" ターミネータが含まれていない場合、 nil を返します(それ以外の場合、最初に出現したポイントを返します)。これを .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))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top