【发布时间】:2014-08-01 11:06:57
【问题描述】:
我正在使用(global-linum-mode t) 在 Emacs 中显示行号。
这工作得很好,直到我使用 ctrl + up/down 命令(forward-paragraph 和 backward-paragraph)来导航缓冲区,此时某些行号被错误地渲染(见附图)。
仅当我使用所述命令跳过整个代码段时才会发生这种情况,并且如果我开始通过其他方式导航缓冲区,问题会立即消失(即行号正确呈现)。
这个问题在 C 和 C++ 模式(可视化)中都存在,我在 x86-64 Fedora 19 上使用 Emacs 24.3.1。
虽然 go-to-line 命令在导航编译错误和警告方面服务于我的目的,但我想保留行号,因为我发现它们有助于快速估算函数的长度。 到目前为止,我还没有发现其他地方提到过这个问题,我不确定这是否是 Emacs 的预期行为,或者我是否要提交错误报告。
有没有人遇到过这个问题或知道它的起源?
修复:
问题可以通过调用(linum-update-current) 来解决,正如@lawlist 在下面的回答中所描述的那样。重复执行此操作的一种简单方法是将命令附加到 forward-paragraph 的执行中,这可以使用 Emacs Lisp advice feature 完成:
(defadvice forward-paragraph (after forward-paragraph-linum-update)
"Perform (linum-update-current) after jumping forward one
paragraph to ensure line numbers are being rendered
correctly."
(linum-update-current))
(ad-activate 'forward-paragraph)
【问题讨论】:
-
使用nlinum。