Emacs 有某种可用的 "package-search" 函数吗?
Is there some kind of "package-search" function available for Emacs?
在 Emacs 中,M-x
键绑定允许您搜索和执行可用的命令。我正在寻找一个类似的 function/functionality,它可以让您从 Emacs 存储库中搜索和安装可用的包。
目前我能做的最好的是M-x package-list-packages
其次是C-s
,但这有一些缺点:
- 它要求您导航到可用包的列表,而我想要在 Emacs 中的大多数地方都可以使用的东西。
- 它只能让您循环浏览包列表,而我想要显示缩小结果列表的东西。
- 它不支持模糊匹配(像 Helm)。
我正在寻找的功能是否存在?或者是否有为 Emacs 提供此功能的软件包?如果是这样,我在哪里可以找到它?
听起来 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
),它允许您根据逗号分隔的关键字列表缩小包列表。但是,我可以理解您想避免 post 中概述的 package-list-packages
方面。
安装 ido-ubiquitous
包并启用 (ido-ubiquitous-mode 1)
和 (setq ido-enable-flex-matching t)
以启用弹性匹配(不确定是否有必要,但我已设置)。它基本上使所有补全都使用 ido,包括 package-install
。您可以使用 C-SPC
缩小范围,或使用 <tab>
弹出完成缓冲区。
我一般用list-packages
。我使用 flex-isearch
在 isearch
环绕或没有匹配后自动开始弹性匹配。
M-x package-install
ENTER
- 开始输入您要安装的包(例如:
xah-find
)并使用自动完成选项 select 您选择的包。
致谢:@elethan
根据发现的屏幕截图 here 有 M-x list-matching-lines
这样的东西可以满足您的需要(通过包搜索字符串。)我试过了。屏幕截图中显示了键入内容的顺序。我没有安装任何特殊的东西来获得这个功能。
这将对包名称和摘要执行搜索:
(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
调用命令
在 Emacs 中,M-x
键绑定允许您搜索和执行可用的命令。我正在寻找一个类似的 function/functionality,它可以让您从 Emacs 存储库中搜索和安装可用的包。
目前我能做的最好的是M-x package-list-packages
其次是C-s
,但这有一些缺点:
- 它要求您导航到可用包的列表,而我想要在 Emacs 中的大多数地方都可以使用的东西。
- 它只能让您循环浏览包列表,而我想要显示缩小结果列表的东西。
- 它不支持模糊匹配(像 Helm)。
我正在寻找的功能是否存在?或者是否有为 Emacs 提供此功能的软件包?如果是这样,我在哪里可以找到它?
听起来 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
),它允许您根据逗号分隔的关键字列表缩小包列表。但是,我可以理解您想避免 post 中概述的 package-list-packages
方面。
安装 ido-ubiquitous
包并启用 (ido-ubiquitous-mode 1)
和 (setq ido-enable-flex-matching t)
以启用弹性匹配(不确定是否有必要,但我已设置)。它基本上使所有补全都使用 ido,包括 package-install
。您可以使用 C-SPC
缩小范围,或使用 <tab>
弹出完成缓冲区。
我一般用list-packages
。我使用 flex-isearch
在 isearch
环绕或没有匹配后自动开始弹性匹配。
M-x package-install
ENTER
- 开始输入您要安装的包(例如:
xah-find
)并使用自动完成选项 select 您选择的包。
致谢:@elethan
根据发现的屏幕截图 here 有 M-x list-matching-lines
这样的东西可以满足您的需要(通过包搜索字符串。)我试过了。屏幕截图中显示了键入内容的顺序。我没有安装任何特殊的东西来获得这个功能。
这将对包名称和摘要执行搜索:
(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