是否有某种"包搜索"功能可用于Emacs?

时间:2016-12-18 00:54:56

标签: emacs package package-managers emacs-helm

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

目前我能做的最好的事情是M-x package-list-packages,然后是C-s,但这有一些缺点:

  1. 它要求您导航到可用包列表,而我喜欢可以在Emacs中的大多数地方使用的内容。
  2. 它只允许您在包列表中循环,而我喜欢显示缩小结果列表的内容。
  3. 它不支持模糊匹配(如Helm)。
  4. 我正在寻找的功能是否存在?或者是否有一个为Emacs提供此功能的包?如果是这样,我在哪里可以找到它?

5 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

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

我通常使用list-packages。在flex-isearch包裹或没有匹配后,我使用isearch自动启动flex匹配。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

  1. M-x package-install
  2. ENTER
  3. 开始键入要安装的软件包(例如:xah-find),然后使用自动完成选项选择所需的软件包。

积分:@elethan

答案 4 :(得分: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 调用命令