在emacs中隐藏^ M.

56 emacs

有时我需要在行结尾中读取具有^ M(control-M)的日志文件.我可以做一个全局替换来摆脱它们,但随后会有更多内容记录到日志文件中,当然,它们都会回来.

设置unix样式或dos样式的行尾编码似乎没有多大区别(但unix样式是我的默认值).我正在使用未定 - (unix | dos)编码系统.

我在Windows上,读取log4net创建的日志文件(虽然log4net显然不是这种烦恼的唯一来源).

任何提示?

bin*_*nOr 76

(defun remove-dos-eol ()
  "Do not show ^M in files containing mixed UNIX and DOS line endings."
  (interactive)
  (setq buffer-display-table (make-display-table))
  (aset buffer-display-table ?\^M []))
Run Code Online (Sandbox Code Playgroud)

JohanBockgård的解决方案.我在这里找到.

  • 如果你想要运行这个函数几乎总是将以下内容添加到`.emacs`(花了一些时间来查找):`(add-hook'text-mode-hook'remove-dos-eol)` (4认同)
  • 多年来,我一直在忍受 ^M。谢谢你。 (2认同)

Edr*_*ric 19

Emacs的现代版本,知道如何处理UNIX和DOS行结束,所以当^ M的文件中显示出来,这意味着有两个文件中的混合物.当存在这样的混合时,emacs默认为UNIX模式,因此^ Ms是可见的.真正的解决方法是修复程序创建文件,以便它使用一致的行结尾.

  • Emacs错了.真正的解决方法是修复Emacs.例如,git创建的冲突文件在'control'行中没有^ M s(例如以<<<<<<开头的行).git忽略文件结尾的任何行是完全有效的,因为控制行是'meta'. (5认同)
  • 这个答案解释了 emacs 的行为,但没有解决这个问题。OP 希望*看不到* CR (^M) 字符,尽管它们仍然存在。 (2认同)

ash*_*ley 6

关于什么?

C-x RET c dos RET C-x C-f FILENAME RET
Run Code Online (Sandbox Code Playgroud)

我制作了一个有两行的文件,第二行有一个回车符.Emacs会在Unix编码中打开文件,切换编码系统什么都不做.但是,universal-coding-system-argument上面的工作.

  • 对已经打​​开的文件略微修改:`Cx RET c dos RET Mx revert-buffer RET` (4认同)

T.E*_*.D. 5

我相信您可以将文件使用的行编码系统更改为 Unix 格式

C-x RET f UNIX RET
Run Code Online (Sandbox Code Playgroud)

如果这样做,模式行应该更改为添加单词“(Unix)”,并且所有这些 ^M 都应该消失。