系统:macOS 10.12 emacs版本:25.2.1
我调用counsel-locate(SPC f L)命令查找文件,无论我输入什么它都是Nothing found。我查看了一下counsel-locate这个函数,它说明里说会调用系统的locate命令,然后我在系统里装了GNU findutils这个库,并在spacemacs里启用了osx这个layer,但是还是一点用都没有。请教大神,这个问题如何解决
系统:macOS 10.12 emacs版本:25.2.1
我调用counsel-locate(SPC f L)命令查找文件,无论我输入什么它都是Nothing found。我查看了一下counsel-locate这个函数,它说明里说会调用系统的locate命令,然后我在系统里装了GNU findutils这个库,并在spacemacs里启用了osx这个layer,但是还是一点用都没有。请教大神,这个问题如何解决
brew install coreutils
基本可以确定是这个问题的解决。
BSD 的工具经常和 GNU 工具的参数有区别,所以要装这个东西。
今天Google了一下,在Mac上运行locate需要依靠/var/db/locate.database
这个文件,生成这个文件需要运行
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
我试了一下这个方法就OK了
这个库并没有locate这个命令,但我也试了安装,没什么用
macOS 下可以用 mdfind
,好像和 Spotlight 的数据来源相同,我的印象中它的数据库是即时更新的,不像 locate
那样定期更新。
mdfind也是可以,但要用的话应该要自己修改spacemacs配置吧。 对于我来说,刚接触emacs和spacemacs,暂时还没能力改配置
在 macOS 下使用 locate 体验不太好,毕竟不是亲生的。
mdfind(spotlight) 和 locate 都开启的话,感觉有点浪费系统资源。不过还是看各人需求,locate 基于文件名的全局索引。而 mdfind 可以同时索引内容和文件名,还可以限定搜索路径。
我偶尔用 locate 来搜索"系统文件"($HOME之外的),所以不常驻内存,半年更新一次 locate.database 都没关系。mdfind 用来查找 $HOME 底下的文件,这个需要实时更新。
Locate生成的那个db文件我的系统就17mb,感觉应该还好…
可以看看有没有 counsel-mdfind
或 counsel-spotlight
之类的。
mdfind
/ Soptlight 已经包含了 locate
的功能,但我的印象中,前者的搜索词(Query)的语法比较复杂,似乎也缺少文档,Apple 给几个例子1就算完了。而且似乎还无视隐藏目录,比如用 init.el
是找不到我的 Emacs 配置的。除了打开应用,我没发现 Spotlight 对我有什么用。