我有一个名为COPYING的txt文件,它在Windows上编辑。它包含windows风格的eol
$ file COPYING
COPYING: ASCII English text, with CRLF line terminators
我尝试使用dos2unix将其转换为unix样式。以下是输出
$ dos2unix COPYING
dos2unix: Skipping binary file COPYING
我很惊讶地发现dos2unix程序将其报告为二进制文件。然后使用其他编辑器(不是emacs),我发现该文件包含一个控制字符。我有兴趣使用emacs找到文件中的所有不可见字符。
通过谷歌搜索,我找到了以下使用tr
的解决方案tr -cd '\11\12\40-\176' < file_name
如何以emacs的方式做同样的事情。我尝试了hexl模式。 hexl模式在单个缓冲区中显示文本及其相应的ascii值,这很好。如何查找ASCII值不是11-12,40-176的字符(即制表符,空格和可见字符)。我试图为该搜索创建一个正则表达式,但它非常复杂。
答案 0 :(得分:13)
要查看隐身字符,您可以尝试whitespace-mode
。将显示空格和制表符,并在不同的面中显示符号。如果编码系统被自动检测为dos(在状态栏上显示(DOS)
),则也会隐藏行尾的回车符。运行revert-buffer-with-coding-system
将其切换为Unix或二进制(例如 C-x RET r unix ),它们将始终显示为^M
。二进制编码系统也会将任何非ASCII字符显示为控制字符。
答案 1 :(得分:3)
默认情况下,Emacs不会隐藏任何字符。按 Ctrl + Meta + %,或 Esc 然后 Ctrl + %如果前者手指太硬,或M-x replace-regexp RET
如果您愿意。然后,对于正则表达式,输入
[^@-^H^K-^_^?]
但是,在我写^H
的地方,输入 Ctrl + Q 然后 Ctrl + H ,从字面上输入“控制-H”字符,对其他人来说同样如此。您可以按 Ctrl + Q 然后按 Ctrl + 空格获取^@
,通常 Ctrl {/ kbd> + Q 然后 Backspace ^?
。用空字符串替换所有出现的正则表达式。
由于您已在Emacs中打开文件,因此您可以在使用时更改其行结尾。按C-x RET f
( Ctrl + X 返回 F )并输入us-ascii-unix
作为文件的新所需编码。
答案 2 :(得分:1)
结帐M-x set-buffer-file-coding-system
。来自文档:
(set-buffer-file-coding-system CODING-SYSTEM &optional FORCE NOMODIFY)
将当前缓冲区的文件编码系统设置为CODING-SYSTEM。 这意味着当您保存缓冲区时,它将被转换 根据CODING-SYSTEM。有关可能值的列表 CODING-SYSTEM,使用M-x列表编码系统。
所以,从DOS到UNIX,M-x set-buffer-file-coding-system unix
。