7

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

我目前能做的最好的就是M-x package-list-packagesC-s但这有一些缺点:

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

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

4

5 回答 5

9

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

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

于 2016-12-18T02:48:03.280 回答
1

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

于 2020-05-28T02:20:00.560 回答
1

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

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

于 2016-12-19T22:31:51.973 回答
0

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

(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

于 2021-04-29T14:51:37.290 回答
0
  1. M-x package-install
  2. ENTER
  3. 开始输入您要安装的包(例如:)xah-find并使用自动完成选项来选择您选择的包。

学分:@elethan

于 2019-04-20T13:16:38.643 回答