Emacs迷你缓冲区补全的灵活简单工具
本仓库包含:
Ivy,Emacs的通用补全机制。
Counsel,Ivy增强版的常用Emacs命令集合。
Swiper,Ivy增强的Isearch替代品。
Ivy
Ivy是Emacs的通用补全机制。虽然其操作类似于其他补全方案(如icomplete-mode
),但Ivy旨在更高效、更小巧、更简单、使用更流畅,同时具有高度可定制性。
要尝试Ivy,只需调用M-x ivy-mode
。这将启用通用Ivy补全,包括文件和缓冲区名称的特定补全。
安装
从GNU ELPA或MELPA安装ivy
包。
Debian 10(及其衍生版如Ubuntu 18.04)或更高版本的用户可以通过sudo apt install elpa-counsel
安装Ivy、Counsel和Swiper。要添加Hydra支持,请执行sudo apt install elpa-ivy-hydra
。
文档
手册
手册可以在HTML格式查看。
从GNU ELPA或MELPA安装ivy
也会在(ivy)
Info节点下安装手册。
Info页面的源文件在这里。
Wiki
Ivy和Swiper的wiki在这里:wiki。
简单配置示例
(ivy-mode)
(setq ivy-use-virtual-buffers t)
(setq enable-recursive-minibuffers t)
;; 如果你想让 `swiper` 使用它,请启用这个
;; (setq search-default-mode #'char-fold-to-regexp)
(global-set-key "\C-s" 'swiper)
(global-set-key (kbd "C-c C-r") 'ivy-resume)
(global-set-key (kbd "<f6>") 'ivy-resume)
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(global-set-key (kbd "<f1> f") 'counsel-describe-function)
(global-set-key (kbd "<f1> v") 'counsel-describe-variable)
(global-set-key (kbd "<f1> o") 'counsel-describe-symbol)
(global-set-key (kbd "<f1> l") 'counsel-find-library)
(global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
(global-set-key (kbd "<f2> u") 'counsel-unicode-char)
(global-set-key (kbd "C-c g") 'counsel-git)
(global-set-key (kbd "C-c j") 'counsel-git-grep)
(global-set-key (kbd "C-c k") 'counsel-ag)
(global-set-key (kbd "C-x l") 'counsel-locate)
(global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
(define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history)
注意:此配置的部分内容可以通过使用 counsel-mode
来替代。
Counsel
ivy-mode
确保任何使用 completing-read-function
的 Emacs 命令都会使用 ivy 进行补全。
Counsel 更进一步,提供了常用 Emacs 命令的定制版本,以最佳方式利用 Ivy。例如,counsel-find-file
有一些额外的键绑定。按 DEL 键会将你移动到父目录。
启用 counsel-mode
会重新映射那些有 counsel 替代版本的内置 Emacs 函数:
Emacs 命令 | Counsel 对应命令 |
---|---|
execute-extended-command | counsel-M-x |
describe-bindings | counsel-descbinds |
describe-function | counsel-describe-function |
describe-variable | counsel-describe-variable |
apropos-command | counsel-apropos |
describe-face | counsel-describe-face |
list-faces-display | counsel-faces |
find-file | counsel-find-file |
find-library | counsel-find-library |
imenu | counsel-imenu |
load-library | counsel-load-library |
load-theme | counsel-load-theme |
yank-pop | counsel-yank-pop |
info-lookup-symbol | counsel-info-lookup-symbol |
pop-to-mark-command | counsel-mark-ring |
bookmark-jump | counsel-bookmark |
Swiper
Swiper 是 isearch 的一个替代品,它使用 Ivy 来显示所有匹配项的概览。
Swiper 的 Helm 版本也可用: swiper-helm。
截图
这里还有一个十分钟的视频演示。
常见问题
问:如何输入一个与候选项匹配的输入,而不是选择这个候选项?例如:在当前目录存在文件 barricade
的情况下创建一个名为 bar
的文件。
答:按 C-M-j。或者,你可以通过设置 (setq ivy-use-selectable-prompt t)
使提示行可选。
贡献
请查看指南以了解如何报告问题和提交拉取请求。