3

我正在使用global-linum-mode行号。如果当前行的行号用不同的颜色(和/或不同的背景)突出显示,那就太好了。有人知道如何实现这一目标吗?

谢谢!

4

3 回答 3

8

我从我之前对Emacs 中的相对行号的回答中得出了这个答案,因为它处理了在 linum 格式过程中记住当前行号的相同问题。

我从linum面部继承,但使用来自hl-line. 如果前景和背景不能很好地匹配,您可以使用显式分配前景色
M-x customize-face RET my-linum-hl RET

(require 'hl-line)

(defface my-linum-hl
  `((t :inherit linum :background ,(face-background 'hl-line nil t)))
  "Face for the current line number."
  :group 'linum)

(defvar my-linum-format-string "%3d")

(add-hook 'linum-before-numbering-hook 'my-linum-get-format-string)

(defun my-linum-get-format-string ()
  (let* ((width (1+ (length (number-to-string
                             (count-lines (point-min) (point-max))))))
         (format (concat "%" (number-to-string width) "d")))
    (setq my-linum-format-string format)))

(defvar my-linum-current-line-number 0)

(setq linum-format 'my-linum-format)

(defun my-linum-format (line-number)
  (propertize (format my-linum-format-string line-number) 'face
              (if (eq line-number my-linum-current-line-number)
                  'my-linum-hl
                'linum)))

(defadvice linum-update (around my-linum-update)
  (let ((my-linum-current-line-number (line-number-at-pos)))
    ad-do-it))
(ad-activate 'linum-update)

与其他答案一样,这在生成动态宽度方面比默认dynamic格式更有效,但是您可以通过注释掉该行来使用静态宽度以获得最大速度(add-hook linum-before-numbering-hook 'my-linum-get-format-string)(并可选择修改初始值my-linum-format-string以设置您的首选宽度)。

于 2012-05-15T01:40:30.963 回答
7

它可以通过hlinum扩展来实现。

(require 'hlinum)
(hlinum-activate)

您可以更改linum-highlight-face以自定义背景和前景色。

于 2013-09-25T05:01:06.560 回答
2

我不确定行号,但您可以使用global-hl-line-mode突出显示当前行。

于 2012-05-14T22:27:46.087 回答