在emacs中,如何剥离CR(^ M)并留下LF(^ J)字符?

时间:2009-07-23 13:12:17

标签: emacs hex hex-editors

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

我真正想要的是删除回车并保留换行符。 Hexl模式是正确的方法吗?

10 个答案:

答案 0 :(得分:82)

无需寻找替代品。只需使用。

M-x delete-trailing-whitespace

您还可以通过

设置文件编码
C-x RET f unix

答案 1 :(得分:29)

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

答案 2 :(得分:10)

这不需要hexl模式。只需用^ J Works为我做全局搜索和替换^ J ^ M. :)然后保存文件,终止缓冲区,并重新访问该文件,以便窗口显示新的文件模式(Unix vs DOS)。

答案 3 :(得分:9)

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

答案 4 :(得分:8)

假设您希望将DOS编码文件更改为UNIX编码,请使用Mx set-buffer-file-coding-system(Cx RET f)将编码系统设置为“unix”并保存文件。

答案 5 :(得分:5)

如果要删除回车符(通常显示为^M)并保留换行符。你可以访问文件w / out任何转换:

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

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

完成后,^M会显示,您可以像删除任何角色一样删除它们。

答案 6 :(得分:4)

您不需要使用hexl-mode。代替:

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

重点是即使你不知道如何输入你要替换的内容,也可以随时选择/复制它。

答案 7 :(得分:3)

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

答案 8 :(得分: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

答案 9 :(得分:0)

我使用此功能:

@ConditionalOnProperty