我正在编写一个配置文件,我需要定义该过程是否需要 Windows 格式文件或 unix 格式文件。我有一份预期文件的副本 - 有没有办法在不退出 emacs 的情况下检查它是使用 \n 还是 \r\n ?
kanja
问问题
1470 次
4 回答
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")))))
于 2008-10-24T17:40:40.117 回答
2
如果您进入 hexl-mode (Mx hexl-mode),您应该会看到行终止字节。
于 2008-10-24T19:39:23.513 回答
0
使用 find-file-literally 在 emacs 中打开文件。如果行末尾有 ^M 符号,则它需要一个 windows 格式的文本文件。
于 2008-10-24T17:30:50.793 回答
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))
于 2008-10-24T18:11:14.377 回答