【问题标题】:Why is there blank space where there ought be line numbers in Emacs?为什么在 Emacs 中应该有行号的地方有空格?
【发布时间】:2014-08-01 11:06:57
【问题描述】:

我正在使用(global-linum-mode t) 在 Emacs 中显示行号。 这工作得很好,直到我使用 ctrl + up/down 命令(forward-paragraphbackward-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)

【问题讨论】:

标签: emacs elisp


【解决方案1】:

Emacs 开发团队的一些主要成员出于各种原因建议避免使用 linum-mode,而是建议使用 nlinum-mode:http://elpa.gnu.org/packages/nlinum.html

我个人使用 linum-mode 的修改版本,并且修复了一些错误 - 如果您继续使用 linum-mode,您可能需要做同样的事情 - 即,像您一样实施自己的错误修复找到他们。修复您看到的错误的最快方法是按照您的命令:

(linum-update-current)

【讨论】:

  • 向前段落跳转后执行 (linum-update-current) 解决了问题;使用建议功能附加命令特别方便。我在您的答案中添加了一个类似于我用来解决问题的代码示例,希望您不要介意!
  • @Caterpillar -- 其他论坛成员投票不接受您提议的答案编辑。很多时候,我所做的是通过添加三个下划线符号来创建分隔线来编辑我自己的问题,然后我写:“EDIT(2014 年 8 月 22 日):使用 advice 创建了一个示例(部分)@lawlist 在下面的答案中提供的代码......”然后我对每个新的编辑重复这个过程。我通常会赞扬其他人的答案让我走上了正轨,然后我会根据需要不断改进自己的解决方案。
  • 似乎他们做到了,尽管我无法理解为什么。 From what I've gathered,在其他人的答案中添加材料应该没有问题。总之,谢谢你的回复!
猜你喜欢
  • 2019-04-17
相关资源
最近更新 更多