如何配置GNU Emacs默认写UNIX或DOS格式的文件?

19

多年来,我一直在我的.emacs.el文件中使用这些功能:

(defun dos2unix ()
  "Convert a DOS formatted text buffer to UNIX format"
  (interactive)
  (set-buffer-file-coding-system 'undecided-unix nil))

(defun unix2dos ()
  "Convert a UNIX formatted text buffer to DOS format"
  (interactive)
  (set-buffer-file-coding-system 'undecided-dos nil))
这些函数使我能够轻松地在格式之间切换,但我不确定如何配置Emacs以默认使用一种特定的格式,而不管我正在使用哪个平台。目前情况是,当我在Windows上运行时,Emacs会保存为Windows格式;当我在UNIX / Linux上运行时,Emacs会保存为UNIX格式。
我想指示Emacs始终以UNIX格式编写,无论我在哪个平台上运行。我该怎么做?
我应该添加一些文本模式钩子,调用其中一个函数吗?例如,如果我在Windows上,则在找到文本文件时调用dos2unix?
2个回答

26

我在我的 .emacs 文件中有很多这样的东西:

(setq-default buffer-file-coding-system 'utf-8-unix)
(setq-default default-buffer-file-coding-system 'utf-8-unix)
(set-default-coding-systems 'utf-8-unix)
(prefer-coding-system 'utf-8-unix)

我不知道哪个是正确的,我只是有点迷信。


7
"setq-default"而不是"set-default"是更改上述变量的正确方式。否则,您需要引用变量名。 - e40
更正了setq-defaults。 - Brian Burns
变量default-buffer-file-coding-system是什么?我在Emacs 27.2中似乎找不到它。 - jdhao

15
我给问题和答案点了赞,但花了几分钟时间修改了一些信息,所以我会添加它。 首先,我检查了用户181548的答案中每个变量和函数的文档,通过将其首先剪切并粘贴到Emacs中,然后分别将光标放在每个变量和函数上,并分别输入C-h v RET和C-h f RET 。 这表明我可能只需要
(prefer-coding-system 'utf-8-unix) 

尝试使用其他行似乎没有改变预先存在的缓冲区编码(通过键入C-h C RET RET检查(describe-coding-system),并每次使用g刷新)。 因此,我省略了其他行,并创建了一个按键绑定,以快速更改任何仍为DOS的旧文件,即:

(defun set-bfr-to-8-unx ()
  (interactive)
  (set-buffer-file-coding-system
   'utf-8-unix)
  )
(global-set-key (kbd "C-c u") 
        'set-bfr-to-8-unx
        )

对于好奇的人,想要发现上述函数的第3和第4行,(set-buffer-file-coding-system 'utf-8-unix),我使用了C-x RET f RET手动更改当前缓冲区的编码,然后使用M-x command-history RET查看这些按键如何转换为代码。

现在也许我的git提交不再抱怨CR(回车符)了。


顺便提一句,对于一组文件(例如从dired中),键盘宏可能很有用来更改编码。现代的键绑定可以在https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#Basic-Keyboard-Macro找到。(我们可以使用`F3`和`F4`而不是`C-x (`等). - Brady Trainor
点赞去除了冗余;那一行就足以处理utf-8-unix编码和LF行结尾。我本来想根据这篇文章再加上(set-language-environment "UTF-8"),但最终决定不需要。谢谢! - legends2k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接