如何让white-space-mode不影响行号的显示

image

好好的行号,显示成这个样子,不能忍

沉了,刷一波存在感

white-mode 是什么?你的行号是如何显示的?

white-space-mode

行号就是开启了global-linum-mode

横线那是 tab ?我一直用的是空格所以显示的是点点点,没遇到你这种情况。

我猜在Linum Mode下关闭white-space-mode应该可以,就是不知道咋写,小白一枚

我自己也用空格

打开别人写的东西,还是经常遇到tab

我想你指的是 whitespace-mode

至于你的问题,你可以试试定制 whitespace-mode 的显示风格:不显示空格(因为这没什么用),Tab 就用默认的样式,应该就没事了,比如我的

(setq whitespace-style
      '(face
        ;; trailing blanks
        trailing
        ;; empty lines at beginning and/or end of buffer
        ;; empty
        ;; line is longer `whitespace-line-column'
        lines-tail
        ;; tab or space at the beginning of the line according to
        ;; `indent-tabs-mode'
        indentation
        ;; show tab as » (see `whitespace-display-mappings')
        tab-mark))

更好的方法是用 Emacs 26 的 M-x display-line-numbers-mode,因为它压根就没这个问题。

还是比较习惯横线的显示方式,我试试26

这个 display-line-numbers-mode 的样式怎么调呢?比如背景和格式?有没有什么资料?

M-x customize-group Linum

文档里有说明,C-h S display-line-numbers-mode (info-lookup-symbol) 或 (info "(emacs) Display Custom"),我不用行号,没了解过。

好像 linum 的格式化之类的一些属性还是不能用

谢谢,读了一下发现能定制的地方很少啊。只能期待以后能增强一下吧。。

这是不可能的。因为 linume 并不是一个独立的空间,它只是在你当前的 buffer 把正文内容往左/右侧移动,留出一段空白,然后通过一个浮动层(overlay)把行号显示上去,本质上 linum 也是当前 buffer 内容的一部分。

这个问题可以从以下几个方面考虑:

  1. 使用 display-line-numbers-mode (简单有效,但是必须是 Emacs 26 以上版本)
  2. 修改 linum 行号格式,不显示空格,比如:0042,还可以进一步美化,把前缀的 0 都改成背景色隐藏掉。可以通过 linum-format 来实现,它不仅仅可以是字符串 %04d,还可以是函数 (setq linum-format 'linum-format-func),函数就可以做很多事情了。
  3. 修改 overlay 文本的样式,whitespace-mode 其实也是通过 overlay 来“装饰” buffer 内容的,所以,两端都分别可以实现(可能要更加深入了解两个 mode 的代码,具体我也没看):
    1. linum 端,在 whitespace 之后,把行号文本的样式再改回来;
    2. whitespace 端,判断如果启用了 linum,跳过行号文本。

感谢大神提供思路,我会尝试下,争取突破到处抄配置这个阶段

whitespace-mode 本来就是关着的,你应该看看你的配置,把开启的代码去掉。

我同时开启了whitespace-mode和linum-mode,但是我不想让whitespace-mode的tab和空格显示在行号上。 仔细想想,我上面那个想法应该不对,应该是不可能实现的

tab 那条横线我猜你是用了 :strike-through。若真是这样,linum-mode 的 overlay 优先级更高, 可以试试在 linum face 中添加(Emacs 25 版本中未作测试):

:strike-through nil    

空格中的圆点,如果不介意 左对齐 的效果的话,可以试试

(setq linum-format "%d")

至少它在我这里(whitespace-style 中设置了 spacesspace-mark)没有出现圆点。

1 个赞

非常感谢,strike-through nil完美解决问题

顺便问一下,行号旁边的分割线宽度怎么设