【问题标题】:Is there some kind of "package-search" function available for Emacs?Emacs 是否有某种“包搜索”功能?
【发布时间】:2017-05-03 10:32:01
【问题描述】:

在 Emacs 中,M-x 键绑定允许您搜索和执行可用命令。我正在寻找一种类似的功能/功能,可以让您从 Emacs 存储库中搜索和安装可用的包。

目前我能做到的最好是M-x package-list-packages其次是C-s,但这有一些缺点:

  1. 它要求您导航到可用包的列表,而我想要在 Emacs 中的大多数地方都可以使用的东西。
  2. 它只允许您循环浏览包列表,而我想要显示缩小的结果列表的东西。
  3. 不支持模糊匹配(如 Helm)。

我正在寻找的功能是否存在?或者是否有为 Emacs 提供此功能的包?如果是这样,我在哪里可以找到它?

【问题讨论】:

  • 只需使用 M-x package-install 并启用 helm-mode

标签: emacs package package-managers emacs-helm


【解决方案1】:

听起来M-x package-install 应该做你想做的事。如果您安装了helm,您将拥有一个类似 helm 的界面来搜索和安装软件包。即使没有helm,它也可以从任何缓冲区调用,它支持缩小,如果你确实安装了helm,它支持模糊匹配。

我仍然倾向于使用M-x package-list-packages,除非我确切地知道我在寻找什么,因为与package-install 不同,它允许您查看包的详细信息和描述。我将C-s 绑定到helm-occur,因此我也可以使用类似头盔的界面搜索此缓冲区。此外,在*Packages* 缓冲区中,您可以使用f (package-menu-filter),它允许您根据逗号分隔的关键字列表缩小包列表的范围。但是,我可以理解您想要避免在您的帖子中概述的package-list-packages 方面。

【讨论】:

    【解决方案2】:

    安装ido-ubiquitous 包并启用(ido-ubiquitous-mode 1)(setq ido-enable-flex-matching t) 以启用弹性匹配(不确定是否有必要,但我已经设置好了)。它基本上使所有完成都使用 ido,包括package-install。您可以使用C-SPC 缩小范围,或使用<tab> 来弹出完成缓冲区。

    我通常使用list-packages。我使用flex-isearchisearch 环绕或没有匹配后自动开始弹性匹配。

    【讨论】:

    • 谢谢 jpkotta — 我已经安装和配置了 Helm,所以我已经使用了 elethan 的解决方案。
    【解决方案3】:
    1. M-x package-install
    2. ENTER
    3. 开始输入您要安装的包(例如:xah-find)并使用自动完成选项来选择您选择的包。

    致谢:@elethan

    【讨论】:

      【解决方案4】:

      根据找到here 的屏幕截图,M-x list-matching-lines 之类的东西可以满足您的需求(通过包进行字符串搜索。)我已经尝试过了。输入内容的顺序显示在屏幕截图中。我没有安装任何特殊的东西来获得这个功能。

      【讨论】:

      • 更好地称为M-x occur,默认绑定到M-s olist-matching-lines 是别名。
      【解决方案5】:

      这将对包名称和摘要执行搜索:

      (defun apropos-package--filter (string)
        (let (packages)
          (dolist (package-assoc package-archive-contents)
            (let ((package (cadr package-assoc)))
              (when (or (string-match-p (regexp-quote string) (package-desc-summary package))
                        (string-match-p (regexp-quote string) (prin1-to-string (package-desc-name package))))
                (push package packages))))
          packages))
      
      (defun apropos-package (string)
        (interactive "sSearch for package: ")
        ;; Initialize the package system if necessary.
        (unless package--initialized
          (package-initialize t))
        (let ((packages (apropos-package--filter string)))
          (if (null packages)
          (message "No packages")
            (package-show-package-list (mapcar 'package-desc-name packages)))))
      

      使用M-x apropos-package调用命令

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-04
        • 2015-09-06
        • 2017-09-20
        • 2020-11-03
        • 2020-08-02
        • 2012-10-31
        • 2011-04-20
        • 1970-01-01
        相关资源
        最近更新 更多