簡體   English   中英

Emacs在進程緩沖區中顯示^ M

[英]Emacs showing ^M in a process buffer

目前,我有一個帶有CRLF樣式換行符的utf-8-auto (emacs modeline報告該緩沖區為utf-8-auto-dos )進程緩沖區。 當我通過process-send-regionprocess-send-string將多行文本寫入緩沖區時,每行都帶有^M后綴。

使這個問題變得奇怪的是,直接從流程寫入流程緩沖區的文本不包含^M

實際上,源文本的來源似乎沒有任何區別,實際上,即使已標記並發送的多行區域已經出現在進程緩沖區(不包含^M )中,也將在發送時包含它們。

請注意 ,當多行從Windows剪貼板界面到殺戮,或從Emacs緩沖區殺到殺戮時,process-send-region的源文本將始終來自Emacs緩沖區,process-send-string。 )

我還應該補充一點,緩沖區中的傳入文本是通過after-change-functions鈎子解析的(基於輸入進行一些着色),因此,萬不得已時,我會對此傳入regexp-replace-in-string進行額外的regexp-replace-in-string文本作為該鈎子函數的一部分,我想避免這種情況,因為它似乎是錯誤的 ,但是如果沒有其他效果,我將其添加為hacky解決方案。

附錄

我更新了緩沖區的編碼設置以及使用utf-8-dos而不是utf-8-auto ,並且^M消失了。

因此,在我的應用程序的緩沖區設置部分中,我做了...

(switch-to-buffer "sock-buffer")
(set-process-coding-system (get-process sock-process) 'utf-8-dos 'utf-8-dos)
(set-buffer-file-coding-system 'utf-8-dos nil)
(set-buffer-process-coding-system 'utf-8-dos 'utf-8-dos)

然后減少到...

(switch-to-buffer "sock-buffer")
(set-buffer-process-coding-system 'utf-8-dos 'utf-8-dos)

而且一切正常。

這是因為這些文件位於DOS / Windows行尾。 您可以使用Cx [Enter] f Unix [Enter]將它們轉換為Unix編碼。

^L是分頁符。 我見過幾次它們可以分隔源代碼的不同部分(用於文本打印機中的老式列表),或者在文本文檔中可以插入實際的“新頁面”命令。

從更新開始,您可以在這里看到必須將set-process-coding-system選擇為正確的編碼系統。

除了dos2unix方法之外,您還可以使用Emacs中的MULE命令之一,或者(我最喜歡的),因為這些字符被錯誤地視為文本的一部分,因此可以使用以下命令替換它們,以替換文本中的字符串: M-%Cq CM返回

M-%是query-replace命令。

Cq的意思是“讓我鍵入下一個字符而不將其解釋為RETURN鍵”。

我相信您會因為換行不一致(例如Windows換行與* nux的不一致)而看到這些,您應該嘗試使用dos2unix

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM