在emacs中,如何去除CR(^ M)并保留LF(^ J)字符?

问题描述 投票:35回答:10

我正在尝试使用hexl模式从文本文件中手动删除一些特殊字符,但看不到如何在hexl模式下删除任何内容。

我真正想要的是删除回车符并保留换行符。十六进制模式是执行此操作的正确方法吗?

emacs hex hex-editors
10个回答
10
投票

不需要十六进制模式。只需对^ J ^ M进行全局搜索和替换^ J ^ M就可以了。 :)然后保存文件,取消缓冲区,然后重新访问文件,以便窗口显示新的文件模式(Unix与DOS)。


0
投票

我使用此功能:

(defun l/cr-sanitise ()
  "Make sure current buffer uses unix-utf8 encoding.
If necessary remove superfluous ^M. Buffer will need to be saved
for changes to be permanent."
  (interactive)
    (set-buffer-file-coding-system 'utf-8-unix)
    (delete-trailing-whitespace)
    (message "Please save buffer to persist encoding changes."))

85
投票

无需查找替换。只需使用。

M-x delete-trailing-whitespace

您也可以通过以下方式设置文件编码

C-x RET f unix

31
投票

糟糕。 ^ J ^ M需要作为两个文字字符输入。使用c-q c-jc-q c-m,对于替换字符串,使用c-q c-j


9
投票

还有一个名为unix2dos/dos2unix的命令行工具,专门用于转换行尾。


8
投票

假设您希望将DOS编码的文件更改为UNIX编码,请使用M-x设置缓冲区文件编码系统(C-x RET f)将编码系统设置为“ unix”并保存文件。


5
投票

如果要删除回车符(通常显示为^M)并保留换行符。您无需任何转换即可访问文件:

M-x find-file-literally /path/to/file

因为带有回车符的文件通常以DOS模式显示(隐藏回车符)。模式行可能会在左侧显示(DOS)

完成后,将显示^M,您可以像删除任何字符一样删除它们。


4
投票

您不需要使用十六进制模式。相反:

  • 以一种向您显示那些^ M的方式打开文件。请参阅上面的M-x从字面上查找文件/ path / to / file。在XEmacs中,您还可以执行C-u C-x C-f并选择二进制编码。
  • 选择要替换的字符串并使用M-w复制它
  • 执行M-%(查询替换)并粘贴要使用C-y复制的内容
  • 出现提示时,请输入Enter以代替它
  • 可能按!现在替换所有出现的内容

重点是,即使您不输入要替换的内容,也可以始终选择/复制它。


3
投票

(在十六进制模式下)我不确定您可以删除字符。我总是将它们转换为空格或其他字符,切换到常规文本编辑器,然后将其删除。


1
投票

来自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

© www.soinside.com 2019 - 2024. All rights reserved.