如何使用emacs查找和删除文本文件中的不可见字符

Tal*_*Kit 10 emacs

我有一个名为COPYING的txt文件,它在Windows上编辑.它包含windows风格的eol

$ file COPYING 
COPYING: ASCII English text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)

我尝试使用dos2unix将其转换为unix样式.以下是输出

$ dos2unix COPYING 
dos2unix: Skipping binary file COPYING
Run Code Online (Sandbox Code Playgroud)

我很惊讶地发现dos2unix程序将其报告为二进制文件.然后使用其他编辑器(不是emacs),我发现该文件包含一个控制字符.我有兴趣使用emacs查找文件中的所有不可见字符.

通过谷歌搜索,我找到了以下使用tr的解决方案

tr -cd '\11\12\40-\176' < file_name
Run Code Online (Sandbox Code Playgroud)

如何以emacs的方式做同样的事情.我尝试了hexl模式.hexl模式在单个缓冲区中显示文本及其相应的ascii值,这很好.如何查找ASCII值不是11-12,40-176的字符(即制表符,空格和可见字符).我试图为该搜索创建一个正则表达式,但它非常复杂.

ata*_*lor 15

要查看隐形字符,您可以尝试whitespace-mode.将显示空格和制表符,并在不同的面中显示符号.如果编码系统被自动检测为dos(显示(DOS)在状态栏上),则也会隐藏一行末尾的回车.运行revert-buffer-with-coding-system将其切换为Unix或二进制(例如C-x RET r unix),它们将始终显示为^M.二进制编码系统也会将任何非ASCII字符显示为控制字符.


Gil*_*il' 4

默认情况下,Emacs 不会隐藏任何字符。按Ctrl+ Meta+ %,或者Esc如果前者对您的手指来说太难,或者Ctrl如果您愿意的话,然后按 + 。然后,对于正则表达式,输入%M-x replace-regexp RET

\n\n
[^@-^H^K-^_^?]\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,在我写的地方^H,先输入Ctrl+Q然后输入Ctrl+ H,按字面意思输入 \xe2\x80\x9ccontrol-H\xe2\x80\x9d 字符,其他字符也类似。您可以按Ctrl+Q然后Ctrl+ Spacefor ^@,通常Ctrl按 +Q然后Backspacefor ^?。将所有出现此正则表达式的地方替换为空字符串。

\n\n

由于您已在 Emacs 中打开该文件,因此您可以在使用该文件时更改其行结尾。按C-x RET f( Ctrl+ X Return F) 并输入us-ascii-unix文件所需的新编码。

\n