【问题标题】:Emacs Org-Mode: Turn off line numbersEmacs Org-Mode:关闭行号
【发布时间】:2011-07-10 22:11:43
【问题描述】:

我最近从vim 移动到Emacs,因为我想使用org-mode。我在Emacs23Org-mode 中打开了一个~10000 行、50kb 的文件,然后添加了大约10 个一级标题。在 Ubuntu 10.04/32bit 下的 Emacs23 中具有 3GB RAM 的四核性能非常慢,以至于无法使用。我在Org-mode 电子邮件列表中找到了two threads 讨论这个问题。似乎启用linum 会导致性能下降。如果必须,我可以在.org 文件中没有行号,但我不想禁用我编辑的所有文件的行号。如果我要在“Emacs”中“生活”,我会想要所有其他文件的行号。

如何仅对部分或全部 .org 文件禁用 linum?如果我在Emacs 中打开了多个文件并在它们之间切换,是否可以这样做?我发现了一些关于禁用主要模式here 的行号的讨论,但是我没有什么可以实现的(尽管页面上的linum-off.el 脚本mentioned 看起来很有希望,但我(还)不知道(E) Lisp,所以我无法根据需要更改它)。

我将Org-modeEmacs23 附带的版本6.21b 更新到版本7.5,但没有任何区别。 Emacs GUI 中的性能非常糟糕,以至于应用程序根本无法响应。 -nw 的性能“更好”,但仍然无法使用。

【问题讨论】:

  • +1。 +1。 +1。 (显然 SO 有一个错误,其中 +1 仅在第一次有效)。这对我有多大帮助,我怎么强调都不过分。
  • linum 会减慢粘贴到 any 模式的速度。 :(

标签: emacs org-mode emacs23


【解决方案1】:

尝试将其添加到您的 .emacs 中:

(defun nolinum ()
  (global-linum-mode 0)
)
(add-hook 'org-mode-hook 'nolinum)

这是假设您使用 linum 而不是其他东西来编号行。无论如何,您可以将此钩子添加到 org-mode 以禁用任何可能使 org 变慢的操作在您使用 org-mode 时。

免责声明:我没有安装 linum,所以我无法对此进行测试,但它应该可以工作。

【讨论】:

  • 谢谢。我将这些行添加到 .emacs 并打开了一个 .org 文件(它会自动将 Emacs 置于 org 模式),但行号仍然存在。如果我打开其他文件然后访问 .org 文件,情况也是如此——行号仍然存在。我可能会尝试我的问题中提到的linum-off.el 脚本。
  • 我将您的脚本更改为“nil”而不是“0”,并且在打开 .org 文件时,Emacs 报告“关闭 global-linum-mode;最好传递一个显式参数。”,但是行号保留。当该行包含“0”而不是“nil”时,此文本不会显示(正如我所说,我不知道 Elisp)。
  • 已解决。请参阅有问题的“更新”。
  • 全局次要模式往往不与模式挂钩的通常处理方式配合——用于定义全局次要模式的标准宏使用after-change-major-mode-hook打开模式,然后该挂钩运行模式挂钩。因此,您的模式挂钩会短暂关闭模式,然后再次打开。
【解决方案2】:

我尝试了以下方法,效果很好:

(defun nolinum ()
  (interactive)
  (message "Deactivated linum mode")
  (global-linum-mode 0)
  (linum-mode 0)
)

(global-set-key (kbd "<f6>") 'nolinum)

(add-hook 'org-mode-hook 'nolinum)

当然,您不需要键绑定。我建议您将其保留用于测试目的,如果一切正常,请禁用它。

【讨论】:

    【解决方案3】:

    如果你输入 M-x customize,在 Convenience 组中进入 Linum,将 Linum Eager 更改为 off,或者将 Linum Delay 更改为 on,将大大提高性能。

    在我的笔记本电脑(3 GB RAM,双核)上,性能缺陷(与关闭 linum 相比)并不明显,但在我的上网本上,大约 3000 行 130KB 文件(约 50分页时延迟 -150 毫秒)。

    【讨论】:

    • 其实看linum的代码,是其中之一,不是两者都有。 ` (if linum-eager (add-hook 'post-command-hook (if linum-delay 'linum-schedule 'linum-update-current) nil t)`
    【解决方案4】:

    linum-off.el 在我的问题中提到已经解决了这个问题。说明在文件中:将文件放入 Emacs 加载路径并将 (require 'linum-off) 添加到 ~/.emacs。此脚本仅对指定的模式关闭行号。我已经测试过了,效果很好。

    【讨论】:

    • 在 ~/.emacs.el 中使用 (global-linum-mode) 和 (add-hook 'org-mode-hook (lambda () (linenum-mode 0))) 更简单。
    • @bzg:感谢您的评论,它直接解决了我的问题。但是,“linum-off.el”允许在几种模式下禁用行号,这很有用 [(defcustom linum-disabled-modes-list '(eshell-mode wl-summary-mode compilation-mode org-mode dired-mode)]。
    【解决方案5】:

    使用nlinum,一个更快的替代方案。

    【讨论】:

      【解决方案6】:

      你只需要加上(add-hook 'org-mode-hook (lambda () (linum-mode 0)))。

      【讨论】:

      • 你测试过这个吗?在我的情况下(global-linum-mode on)它不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多