在Emacs中,如何剥离Cr(^M)并留下LF(^J)字符?
-
19-09-2019 - |
题
我正在尝试使用hexl模式手动从文本文件中删除一些特殊字符,但看不到如何在HEXL模式下删除任何内容。
我真正想要的是删除运输返回并保留线额字符。 HEXL模式是正确的方法吗?
解决方案
无需hexl模式。只需使用 ^J的 ^j ^m进行全球搜索和重复位置,对我有用。 :)然后保存文件,杀死缓冲区并重新访问文件,以便窗口显示新的文件模式(UNIX vs dos)。
其他提示
无需找到替换。只是使用。
M-x delete-trailing-whitespace
您还可以设置文件编码
C-x RET f unix
糟糕。该 ^J ^m需要以两个字面字符的形式输入。利用 c-q
c-j
, c-q
c-m
对于替换字符串,请使用 c-q
c-j
.
还有一个命令行工具称为 UNIX2DOS/DOS2UNIX 这是专门用于转换行结尾的。
假设您希望将DOS编码的文件更改为UNIX编码,请使用MX Set-Buffer-File-File编码系统(CX RET F)将编码系统设置为“ UNIX”并保存文件。
如果要删除返回马车(通常显示为 ^M
)并离开线馈送。您只需访问带有任何转换的文件:
M-x find-file-literally /path/to/file
因为带有托架返回的文件通常以DOS模式显示(隐藏了托架返回)。模式线可能会显示 (DOS)
在左侧。
完成此操作后, ^M
会出现,您可以像任何角色一样删除它们。
您不需要使用HEXL模式。反而:
- 以向您显示这些 ^m的方式打开文件。请参阅上面的MX Find-File-Literly/path/to/file。在Xemacs中,您也可以进行Cu CX CF并选择二进制编码。
- 选择要替换的字符串并使用MW复制
- 做m-%(查询替换)并粘贴您要使用CY复制的内容
- 当提示是什么替换为
- 可能的按!现在替换所有发生
关键是,即使您不输入要替换的内容,也可以随时选择/复制它。
(在HEXL模式下)我不确定您是否可以 删除字符. 。我总是将它们转换为空格或其他字符,并切换到常规文本编辑器,并将其删除。
从 http://www.xsteve.at/prg/emacs/xsteve-functions.el:
;02.02.2000
(defun xsteve-remove-control-M ()
"Remove ^M at end of line in the whole buffer."
(interactive)
(save-match-data
(save-excursion
(let ((remove-count 0))
(goto-char (point-min))
(while (re-search-forward (concat (char-to-string 13) "$") (point-max) t)
(setq remove-count (+ remove-count 1))
(replace-match "" nil nil))
(message (format "%d ^M removed from buffer." remove-count))))))
将其添加到您的 .emacs
并通过 M-x xsteve-remove-control-M
或将其绑定到更容易的密钥。它会剥离 ^M
s在Anymode中。