如何使用linum-mode将行号右对齐?

9
我希望我的linum-mode行号能够右对齐。我在emacswiki上找到了最接近的东西,但是它不起作用 - 它似乎是将数字左对齐而不是右对齐这个片段可以在这里找到。抱歉我的缩进很糟糕,lisp对我来说相当陌生 :)
(setq linum-format                               
      (lambda (line)                                    
    (propertize                                  
     (format                                 
      (let                                   
      ((w (length (number-to-string (count-lines (point-min)         
                             (point-max))))))    
    (concat "%" (number-to-string w) "d ")) line) 'face 'linum)))

有什么想法吗?
4个回答

21
你可以使用值'dynamic',这样你就不必选择任意量的填充。
(custom-set-variables '(linum-format 'dynamic))

或者你也可以使用以下命令进行自定义:M-x customize-variable RET linum-format

此外,@asmeurer 问如何在使用 dynamic 后仍然在数字后添加一个空格。没有简单的方法来做到这一点,但可以通过使用 defadvice 包裹 linum-update-window 函数来实现,该函数已经包含在该函数中用于 dynamic 的代码中:

(defadvice linum-update-window (around linum-dynamic activate)
  (let* ((w (length (number-to-string
                     (count-lines (point-min) (point-max)))))
         (linum-format (concat "%" (number-to-string w) "d ")))
    ad-do-it))

谢谢。您也可以使用 M-x customize 进行更改。 - asmeurer
1
你如何在使用动态语言的同时,在数字后面添加一个空格?我相信这很简单,但我对Lisp还是比较新手。 - asmeurer
1
@asmeurer 我更新了我的答案,展示了如何使用defadvice在数字后仍然添加空格。是的,你可以使用customize,它与custom-set-variables相关。 - aculich

4

自定义变量linum-format,例如将其对齐到右侧7个字符:

(custom-set-variables '(linum-format (quote "%7d")))

2
如果能够动态完成,我会更喜欢这个,但是一旦文件超过1000行,那也无所谓了。谢谢! :) 我选择了“%4d”。 - monotux

1

在2022年,对于Emacs 28.1版本,该命令为:

(setq linum-format 'dynamic)

-3

修改 linum.el 和 byte-compile-file 为 .elc。

适用于 Emacs 23.3。

linum.el 的第 143 行。

                  (concat "%" (number-to-string w) "d" " | ")))))

我将默认的端口更改为 "xxx |"。


直接更改代码不是一个好的长期解决方案,除非你打算提交一个上游补丁并认为它会被接受,否则当你的emacs安装升级时,你将失去这些更改。相反,在你的init.el文件中,你可以为linum-update-window函数添加defadvice,就像我的答案的最新编辑所示。 - aculich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接