【问题标题】:deft mode terribly slow灵巧模式非常慢
【发布时间】:2014-06-09 10:03:37
【问题描述】:

我刚开始使用emacs24(Ubuntu 附带的那个),以便使用deft mode 在Mac 上模仿notational velocity 的行为。我的~/.emacs-d/init.el 看起来像这样:

(add-to-list 'load-path "~/.emacs.d")
(require 'deft)
(setq deft-directory "~/Notes")
(setq deft-use-filename-as-title t)

为了用txt 文件加载我的文件夹。我在文件夹中有几千个文本文件,文件名包含 CJK 字符。现在,运行deft mode 现在/非常/慢,甚至无法键入在文件中进行搜索。输入一个单词后,我必须等待几分钟才能显示在屏幕上并搜索笔记。即使关闭emacs 也需要很长时间。我的电脑是联想 W540 64 位 i7-4800MQ CPU @ 2.70GHz × 8 和 23.2 GiB 内存(它告诉我)。我正在运行 Ubuntu 14.04。我的 emacs 可能有什么问题?

我是 emacs 的新手,坦率地说,我什至不明白我刚刚在上面写的内容,我只是想从网上找到的教程中拼凑出我想要的设置,所以请原谅可能陷入的任何愚蠢我的问题。提前致谢!

【问题讨论】:

    标签: emacs emacs24


    【解决方案1】:

    notdeft 是一个考虑到这种用例而创建的包;它使用外部后端进行索引和搜索(并且可以处理大量大文件)

    编辑:这里是 GitHub 的链接:https://github.com/hasu/notdeft

    设置起来有点不直观(我认为这是 Deft 的最大亮点)。您必须编译后端,但基本界面是相同的;您只需输入单词,它就会实时更新结果。有一种使用查询语法的高级方法,但这不是必需的。只需搜索“noteContent1 noteContent2 :tagName:”就会列出在某处同时具有内容和标签的文件,并且它可以扩展到千兆字节的笔记。

    【讨论】:

    • 能否添加链接。
    【解决方案2】:

    从 0.9 版开始,变量 deft-file-limitadded,设置“要在 Deft 浏览器中列出的最大文件数”。

    所以要复制trmdttr's configuration answer for 30 files,您需要将其添加到您的配置中:

    (setq deft-file-limit 30)
    

    【讨论】:

      【解决方案3】:

      我发现这个解决方案限制了使用增量搜索时显示的笔记数量:https://github.com/jrblevin/deft/issues/43

        ;; Overwrite `deft-current-files` for the `deft-buffer-setup` and limit it to 30 entries
        (defun anks-deft-limiting-fn (orig-fun &rest args)
          (let
              ((deft-current-files (-take 30 deft-current-files)))
            (apply orig-fun args)))
      
        (advice-add 'deft-buffer-setup :around #'anks-deft-limiting-fn)
      

      这对我有点帮助,虽然在使用几千个音符时,deft 仍然不是很灵巧,就像我一样。

      【讨论】:

        【解决方案4】:

        我很高兴被证明是错误的,但我不认为 deft 旨在处理“几千个文本文件”!您肯定需要某种专门的索引和搜索工具来有效地处理大量数据。

        我有点过时了,但我相信 deft 只是在 Emacs 中打开文件并使用正则表达式搜索来查找匹配项(这对于较少数量的文件来说很好,但它不适合您的使用-案例)。

        我能提出的唯一建议是确保 deft.el 是字节编译的(即你有一个 deft.elc 文件)。否则使用M-x byte-compile-file。但是,即使您当前使用的是未编译的版本,我也不认为它会提供您需要的那种性能改进,从而使其成为可行的解决方案。

        【讨论】:

        • 非常感谢。在您的脑海中,您是否知道任何允许在这样的文本文件语料库中进行全文搜索并很好地处理 unicode 的程序?
        • 恐怕没什么直截了当的(但这不是我曾经研究过的东西,所以我不知道有什么可用的)。 FWIW 我自己使用过的最接近的东西是Apache Solr,它的作用肯定是有效的,但设置起来并不简单,而且我不知道你会如何为这种用途配置它。希望其他人可以提供更好的建议。
        • 具有 24 Gb RAM 的 8 核 i7 是一台非常强大的机器。我无法想象 Emacs 在该硬件上打开一千个文本文件会遇到任何问题,除非每个单独的文件都巨大。(我在功能更弱的计算机上打开了超过 1 Gb 的文本文件,一个一次——它们最初打开的速度很慢,但一旦它们在窗口中,就可以像任何其他文件一样进行编辑)。我怀疑deft-mode 有问题,这使得它在这种特殊情况下效率低下。作为替代方案,Projectile 将您的文件组织在目录中,ag 进行搜索怎么样?
        • @Mårten 和 phils,难道不是 deft 在搜索之前没有真正索引文件的“问题”(取决于用例)吗?如果它更像nvALT 并在将文件保存为单独的文本文件的同时进行并行索引,那就太好了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 2013-11-10
        • 2013-09-15
        • 1970-01-01
        相关资源
        最近更新 更多