我正在编写配置文件,我需要定义进程是否需要Windows格式文件或unix格式文件。我有一份预期文件的副本 - 有没有办法可以检查它是否使用\ n或\ r \ n而不退出emacs?
答案 0 :(得分:7)
如果在Unix上打开文件时在模式行上显示(DOS),则行结尾为Windows样式。如果在Windows上打开文件时说(Unix),那么行结尾是Unix风格的。
从Emacs 22.2手册(节点:模式行):
如果缓冲区的文件使用 回车换行,冒号 更改为反斜杠('\')或 '(DOS)',取决于操作 系统。如果文件只使用 回车,结肠指示器 更改为正斜杠 ('/')或'(Mac)'。在某些系统上, Emacs显示'(Unix)'而不是 冒号用于使用换行符的文件 行分隔符。
这是一个功能 - 我认为 - 展示了如何从elisp检查Emacs已经确定哪种线路结尾类型。如果看起来非常复杂,也许就是这样。
(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")))))
答案 1 :(得分:2)
如果你进入hexl模式(M-x hexl-mode),你应该看到行终止字节。
答案 2 :(得分:0)
使用find-file-literally在emacs中打开文件。如果行末尾有^ M个符号,则需要一个Windows格式的文本文件。
答案 3 :(得分:0)
如果文件中没有nil
终结符,则以下Elisp函数将返回"\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))