12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Emacsの行番号表示にモヤモヤした話

Last updated at Posted at 2019-04-05

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")))

最終行どうなってるのか分からん問題

で、見た目はこんな感じになる。
Screenshot from 2019-04-05 22-58-34.png
まあ悪くないのだが、最終行(画像でいうと5行目)に改行があるのかないのか、見分けがつかないのが気になる2。すなわち、空行があってもなくても同じ表示であり、カーソルを終端まで移動させないと空行の有無がわからない。フォーマットによっては最終行を空行にすることが推奨されているので(例えばYAML)、見ただけでわかるようにしたい3。他のエディタ(例えばPyCharm)では、空行にも行番号が振られているので分かりやすい。

妥協案

いろいろ調べてみたものの、満足なソリューションが見つからなかった。バッファの最後に[EOB]のような記号を表示させるとか、whitespace-modeで行末を表示させる、といった方法はありそうだが、やりたいことに対して手間をかけすぎている気がする。現状採用しているのは次の設定。

(setq-default indicate-empty-lines t)
(setq-default indicate-buffer-boundaries 'left)

フリンジ(フレームの左端にある領域をこう呼ぶらしい)に空行やバッファの終端を表示できる。次のように表示される:
Screenshot from 2019-04-05 22-59-03.png
これは5行目に改行があるとき。

Screenshot from 2019-04-05 22-59-14.png
こちらはないとき。カギカッコのようなマークが点線(空行を表す)と繋がっていないので異常と気が付きやすい。

  1. 参考:emacs 26で入ったdisplay-line-numbersを利用する

  2. display-line-numbers-modeだけの話ではなく、linumでも同様である。Emacsの基礎的な部分に関わることで簡単には修正できないのかも。

  3. 保存時に警告させるとか、別なソリューションがあることに執筆時点で気がついた。

12
13
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?