Emacs是否有可用的“包搜索”功能?

7
在Emacs中,M-x绑定键可让您搜索和执行可用的命令。我正在寻找一个类似的功能,可以从Emacs存储库中搜索和安装可用软件包。
目前最好的方法是使用M-x package-list-packages命令,然后使用C-s进行搜索,但是这有一些缺点:
  1. 需要您导航到可用软件包列表,而我希望能够在Emacs的大多数地方工作。
  2. 仅允许您在软件包列表中循环,而我希望显示缩小结果列表的内容。
  3. 不支持模糊匹配(如Helm)。
我在寻找的功能是否存在?还是有一个提供此功能的Emacs软件包?如果有,我在哪里可以找到它?

2
只需启用helm-mode,然后使用M-x package-install即可。 - Simon Fromme
5个回答

9
看起来像是M-x package-install可以满足你的需求。如果你已经安装了helm,那么你将拥有一个类似于helm的界面来搜索和安装软件包。即使没有helm,它也可以从任何缓冲区调用,支持缩小范围,如果你安装了helm,它还支持模糊匹配。
我仍然倾向于使用M-x package-list-packages,除非我确切知道我在寻找什么,因为与package-install不同,它允许你查看软件包的详细信息和描述。我已经将C-s绑定到helm-occur,所以我也可以使用helm-like界面在这个缓冲区中搜索。此外,在*Packages*缓冲区中,你可以使用f (package-menu-filter),它允许你根据逗号分隔的关键字列表缩小软件包列表。但是,我可以理解你想避免你在帖子中提到的package-list-packages方面的问题。

1
安装ido-ubiquitous软件包并启用(ido-ubiquitous-mode 1),以及(setq ido-enable-flex-matching t)以启用弹性匹配(不确定是否必要,但我已经设置了)。这基本上使所有完成使用ido,包括package-install。您可以使用C-SPC缩小范围,或使用<tab>弹出完成缓冲区。
我通常使用list-packages。我使用flex-isearchisearch环绕或没有匹配项时自动启动弹性匹配。

谢谢jpkotta,我选择了elethan的解决方案,因为我已经安装和配置了Helm。 - achalk

1
根据这里发现有一个叫做M-x list-matching-lines的东西可以实现你所需的功能(在包中搜索字符串)。我已经尝试过了。截屏中显示了输入的顺序。我没有安装任何特殊的功能来获得此功能。

更为常见的是 M-x occur,默认情况下绑定到 M-s olist-matching-lines 是一个别名。 - phils

0
  1. M-x package-install
  2. ENTER
  3. 开始输入您想要安装的软件包(例如:xah-find),并使用自动完成选项选择您选择的软件包。

鸣谢:@elethan


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 调用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接