之前用 ido 是有这样的功能的: 我之前打开过 /path1/test.1, 现在在任意目录下 c-x c-f 输入 test.1(甚至文件名的一部分), Emacs 就会自动搜索并打开 /path1/test.1 这个文件. 效果请看 gif 动画.
现在我从 ido 转向了 ivy, 请问一下这个功能在 ivy 下如何实现?
.
之前用 ido 是有这样的功能的: 我之前打开过 /path1/test.1, 现在在任意目录下 c-x c-f 输入 test.1(甚至文件名的一部分), Emacs 就会自动搜索并打开 /path1/test.1 这个文件. 效果请看 gif 动画.
现在我从 ido 转向了 ivy, 请问一下这个功能在 ivy 下如何实现?
.
recentf 应该是
据我所知,Ivy 不能在C-x C-f 快速打开之前打开过的文件,但是Ivy 可以快速打开之前打开过的文件。也就是说 Ivy 有类似的功能,但是实现的细节跟Ido 不一样,比如 ivy-switch-buffer
在切换buffer 的时候就可以打开之前打开的文件.
counsel-recentf
,或者打开ivy-use-virtual-buffers
,然后用ivy-switch-buffer
。(setq ivy-virtual-abbreviate 'full)
使switch-buffer显示recentf的全部文件名。
https://oremacs.com/swiper/#basic-customization
实在不想用 recentf 这种方法, 但是目前还找不到比较完美的解决方案
既然ivy没有自带的功能,建议楼主自己用ivy写一个命令整合find-file和recentf。没有合适的功能就自己实现就是Emacs之道。
+1
我觉得 counsel-bookmark 更有用
我用 helm recentf 插件, 不喜欢那种把 minibuffer 撑的很大的插件。
我最开始也尝试用 helm, 但是反应速度有点慢, 我就转到 ivy 了.
可以参考我的配置文件:EmacsWiki: init-helm.el
默认就用常用的, 偏门的利器单独绑按键,不要啥插件默认都打开,特别是那些全局搜索的插件。
我十年前开发 anything 的时候,把所有插件都弄上了,即使不用也要加上, 十年过后,发现平常用的就那几个插件, 像 helm-pacman helm-brew 这种插件,单独绑一个单独的按键, 偶尔用用就可以了。
试试在C-x C-f之后按C-r
会出现 Reverse-i-search, 并不是想要的结果哦
C-x C-f
之后用 M-p
。
默认绑定到的是 ivy-previous-history-element
不知道能不能满足你要求。
把recentf
和counsel-find-file
混合起来就ok了, 其实也不用重写那么复杂, ivy自己有一个函数做的这个事(被用于显示virtual-buffer)
(defun counsel-find-file--with-recentf-source ()
"Mix the `recentf' and current directory's files"
(require 'recentf)
(recentf-mode 1)
(mapcar (lambda (x)
(put-text-property 0 (length x)
'face 'ivy-virtual x)
x)
(mapcar #'substring-no-properties recentf-list)))
(ivy-set-sources
'counsel-find-file
'((original-source)
(counsel-find-file--with-recentf-source)))
不过如果切换目录之后, 新添加的内容就会自动消失, 我不是很懂counsel-find-file里用了什么黑魔法, 就没仔细去弄.
像这种不常用的我都直接M-x
了,也不费事
很棒! 先用上了, 期待改进