在大部份的編輯器中,對付太長的文字列通常用的是自動換行 (line wrap),就我目前所知,在 Emacs 中有以下幾種不同方式可以選擇:
Line wrap
預設行為即是一般常見的 line wrap。在這種環境下的文字內容並不會被更動,僅在顯示時將超出視窗邊界的部份顯示在下一行,同時在換行處加上一個記號 (如箭頭標示處):
在切割視窗時情況不同:
可以設定一下得到相同行為:
(setq truncate-partial-width-windows nil)
Truncation
打開 truncate line 以後,超出視窗邊界的部份不顯示,同時會在邊界處顯示一個特殊符號作為識別 (與 line wrap 時用的符號不同)。一般適合在寫程式的時候使用
M-x toggle-truncate-lines
也可以寫到 .emacs
(setq default-truncate-lines t)
為了方便可以設個快速鍵:
(global-set-key [f11] 'toggle-truncate-lines)
Filling text
fill 是破壞性操作,會根據 fill-column 的值強制在特定位置插入換行字元。手動操作時只需要按下 M-q 即可,或是乾脆啟用 auto fill:
M-x auto-fill-mode
fill-column
換行寬度可以自行修改,因為設定 fill-column 要求一個數值當作參數,:
C-u 60 M-x set-fill-column
或
C-u 60 C-x f
fill-prefix
fill-prefix 的內容會自動加到被修改的文字列前面,預設為 nil (代表換行後前面不加任何字)。假設 fill-prefix 為 "… ",則換行後會在該列最前面加上 "… "。
設定這個參數可以用 set-fill-prefix 或 C-x .,要注意的是這個動作會將游標所在位置前的同列文字設為 fill-prefix,若在斷行處操作,則整列文字都會被採用。因此我建議透過 eval 方式設定:
M-: (setq fill-prefix "... ")
或乾脆寫進 .emacs
fill prefix 對於整理程式碼註解很有幫助,但對於一般文字也許會造成困擾。要取消 fill-prefix 只需要找個空行再設定一次即可 (minibuf 會顯示 "fill-prefix cancelled")
Long line mode
相較於 fill mode,long line mode 則是溫和的非破壞性操作,只是在顯示上調整成 fill mode 的效果 (soft newline),並不會真的插入換行 (hard newline):
M-x longlines-mode
但顯示與實際內容畢竟有差別,可以將真正的換行處以特殊符號表示以資識別:
M-x longlines-show-hard-newlines
在處理長文字列的顯示上,Emacs 提供了豐富的設定以應付各種需求。就我個人來說,對於一般的文章我習慣用 line wrap 型式顯式;而在編輯程式碼的時候,這種方式反而會破壞縮排的視覺效果,這時改用 truncation 就很適合了。至於 long line mode,我到現在還沒用過。當然,一般編輯程式碼的時候很少會出現超長的程式碼 (也許寫 gtk 程式時例外XD),閱讀上非常不便。非不得已的時候,我會想辦法在 80 columns 內先斷行 (以前留下來的習慣@@),非超出視窗不可的部份,就交給強大的編輯器來處理吧!







