我正在尝试使用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 或将其绑定到更容易的密钥。它会剥离 ^Ms在Anymode中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top