linumからdisplay-line-numbersへ移行
これまでEmacsで行番号を表示するといったらlinumが一般的だったが、ver.26からはdisplay-line-numbers-modeが使えるようになったらしい1。linumよりも速いとか。早速導入してみる。
;; display line numbers
(if (version<= "26.0.50" emacs-version)
(progn
(global-display-line-numbers-mode)
;; テーマはdeeper-blueを使用している。これに合わせた色を選んだつもり
(set-face-attribute 'line-number nil
:foreground "DarkOliveGreen"
:background "#131521")
(set-face-attribute 'line-number-current-line nil
:foreground "gold")))
最終行どうなってるのか分からん問題
で、見た目はこんな感じになる。
まあ悪くないのだが、最終行(画像でいうと5行目)に改行があるのかないのか、見分けがつかないのが気になる2。すなわち、空行があってもなくても同じ表示であり、カーソルを終端まで移動させないと空行の有無がわからない。フォーマットによっては最終行を空行にすることが推奨されているので(例えばYAML)、見ただけでわかるようにしたい3。他のエディタ(例えばPyCharm)では、空行にも行番号が振られているので分かりやすい。
妥協案
いろいろ調べてみたものの、満足なソリューションが見つからなかった。バッファの最後に[EOB]
のような記号を表示させるとか、whitespace-modeで行末を表示させる、といった方法はありそうだが、やりたいことに対して手間をかけすぎている気がする。現状採用しているのは次の設定。
(setq-default indicate-empty-lines t)
(setq-default indicate-buffer-boundaries 'left)
フリンジ(フレームの左端にある領域をこう呼ぶらしい)に空行やバッファの終端を表示できる。次のように表示される:
これは5行目に改行があるとき。
こちらはないとき。カギカッコのようなマークが点線(空行を表す)と繋がっていないので異常と気が付きやすい。