好好的行号,显示成这个样子,不能忍
沉了,刷一波存在感
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 内容的一部分。
这个问题可以从以下几个方面考虑:
- 使用
display-line-numbers-mode
(简单有效,但是必须是 Emacs 26 以上版本) - 修改 linum 行号格式,不显示空格,比如:0042,还可以进一步美化,把前缀的 0 都改成背景色隐藏掉。可以通过
linum-format
来实现,它不仅仅可以是字符串%04d
,还可以是函数(setq linum-format 'linum-format-func)
,函数就可以做很多事情了。 - 修改 overlay 文本的样式,
whitespace-mode
其实也是通过 overlay 来“装饰” buffer 内容的,所以,两端都分别可以实现(可能要更加深入了解两个 mode 的代码,具体我也没看):- linum 端,在 whitespace 之后,把行号文本的样式再改回来;
- 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
中设置了 spaces
和 space-mark
)没有出现圆点。