我正在编写配置文件,我需要定义进程是否需要Windows格式文件或unix格式文件。我有一份预期文件的副本 - 有没有办法可以检查它是否使用\ n或\ r \ n而不退出emacs?

有帮助吗?

解决方案

如果在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")))))

其他提示

如果你进入hexl模式(M-x hexl-mode),你应该看到行终止字节。

使用find-file-literally在emacs中打开文件。如果行末尾有^ M个符号,则需要一个Windows格式的文本文件。

如果文件中没有" \ r \ n" 终止符,则以下Elisp函数将返回 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