如何在nlinum 1.9中仅高亮活动窗口的当前行号?
解决nlinum多窗口下仅高亮活动窗口当前行号的问题
我太懂这个烦恼了——开启nlinum-highlight-current-line后,多窗口环境下所有窗口的对应行号都会被高亮,而不是只聚焦在当前活动窗口的当前行。这里有个靠谱的解决方案,通过自定义nlinum的高亮逻辑来实现你的需求:
1. 重写行号高亮的判断逻辑
我们可以覆盖nlinum默认的内部高亮函数,让它只在当前活动窗口中高亮当前行的行号。把这段代码加到你的Emacs配置文件里:
(defun nlinum--hl-line (linum) (when (and nlinum-highlight-current-line (eq (window-buffer) (current-buffer)) ; 仅对活动窗口的缓冲区生效 (= linum (line-number-at-pos))) (face-remap-add-relative 'nlinum-current-line 'nlinum-highlight)))
2. 窗口切换时自动更新高亮状态
为了确保切换窗口时,行号高亮能同步更新到当前活动窗口,我们给窗口配置变化和缓冲区列表更新的钩子添加nlinum刷新动作:
(add-hook 'window-configuration-change-hook #'nlinum-update) (add-hook 'buffer-list-update-hook #'nlinum-update)
原理说明
- 修改后的
nlinum--hl-line函数新增了(eq (window-buffer) (current-buffer))判断,确保只有当前活动窗口对应的缓冲区才会触发行号高亮,避免非活动窗口跟着“凑热闹”。 - 两个钩子函数会在窗口布局变化、切换窗口或缓冲区更新时,强制nlinum重新渲染行号,保证高亮状态始终和当前活动窗口保持一致。
验证效果
保存配置后重启Emacs,或者直接在*scratch*缓冲区执行这些代码,然后打开多个窗口测试——现在应该只有活动窗口的当前行号会被高亮了,完美解决你的问题!
内容的提问来源于stack exchange,提问作者BiagioF
相关产品推荐
相关产品推荐

