[英]Emacs showing ^M in a process buffer
目前,我有一個帶有CRLF
樣式換行符的utf-8-auto
(emacs modeline報告該緩沖區為utf-8-auto-dos
)進程緩沖區。 當我通過process-send-region
或process-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.