请问 native 版本的 windows Emacs (非 minGW-w64 版本) 下如何使用 xeft 呢?

确实没用过xeft, 如果是搜文本内容的话,我个人不太喜欢,特别是笔记多起来以后,会有很多相似的结果还要去过滤,实在需要搜文本再用rg去搜就好了。

xeft 是逻辑搜索,跟搜索引擎的高级搜索一样。

rg 是正则搜索。

khoj 是自然语言搜索/语义搜索。

这三者不是互相替代的关系,你没用过就体会不到其中的区别。

2 个赞

谢谢!第一次知道 recoll 这个软件,确实是基于 xapian 构建的,emacs 里也有不少有关插件,不过它的 windows 版是收费的,我再去了解一下。

:+1: 我一直用的 org-roam,笔记用 Git 管理,通过 Github 跨平台共享,要搜索全文就用 consult-ripgrep 这个命令,速度也很快。

是的,我也是这套工作流,只要做笔记的时候把headline做好加入到roam的数据库中,基本上很少需要去全文搜索,很高效。

我目前也是的,不过也实在有点眼馋,想试试 Xeft 之类的工具怎么样

确实,命名很重要。我是不用 org-roam 那个 org-roam-dailies 的,我的 node 都有名字。

想请教一下你会写 daily notes 之类的吗?比如一些总结、计划、流水性质的笔记,或者说一些暂时不知道如何归类的笔记,我之前是按照 org-mode 默认的那种 datetree 即在一个 journal.org 里的,后来还是按照 org-roam-dailies 的方式分开在每天的 org 文件里,目前感觉各有利弊

我比较懒,不用 org-roam的 daily notes。临时的笔记我会 org-capture 到 agenda 的 inbox.org 里面,或者先记在手机的 Borg 里面,也是会自动同步到agenda的 inbox.org。有空了觉得有用再整理到 org-roam 里面去。

1 个赞

感谢,笔记确实还是需要整理。

重新编译一个是唯一办法。。。不过怕麻烦的话,用ripgrep或者ugrep配合consult-ripgrep或者consult-grep最方便,速度也快,就是UI没有xeft那么漂亮。

看来 windows 下只能这样了,我目前主要也是有必要时用 counsel-rgcolor-rg 检索, deft 太慢了,今天尝试了 @suliveevil 推荐的 org-recoll, windows 下搜索中文存在乱码问题,看来 windows 下用 Emacs 还是限制多多,先不折腾了。。

官方的 emacs 也是用 mingw-w64编译的,默认是支持动态模块的,可以看 module-file-suffix 变量的值判断是否支持动态模块,支持的话值在 Windows 上应该是 .dll

没有加载成功的原因应该是 xapian-lite.dll 依赖一些动态库,但是那些动态库 emacs 找不到。

可以通过 ldd xapian-lite.dll 查看依赖哪些动态库,将没有的拷贝到 emacs.exe 目录

或者将 mingw64 的 bin 目录加到环境变量 PATH 中,eg. C:\msys64\mingw64\bin

3 个赞

大佬太强了!我的 Emacs module-file-suffix 返回的确实是 .dll,用 ldd xapian-lite.dll 查看的结果是这样的:

确实除了几个 windows 系统文件以外,都在 mingw64 的 bin 目录下。把 mingw64 的 bin 目录加到环境变量 PATH 后,Emacs 里运行 M-x xeft 可以正常出 xeft 的界面了。

这里还踩到的一个坑是本来 xeft-database 设置的是 ~/xeft_db/,结果报 xeft-full-reindex: Xapian library error: "DatabaseCreateError: c:/Users/xxx/xeft_db/: mkdir failed (File exists)",设置成 ~/xeft_db (去掉最后的斜杠) 后解决了这个问题。

不过现在还有两个小问题,一个是找到结果后,在条目上执行 xeft--find-file-at-point (回车) 后跳转的位置不对,不是关键词位置;另外似乎 Github 上的动图 (如下) 是实时出结果,我这边每次输入检索式后需要执行 xeft-refresh-full (默认是 C-c C-g) 后,才能更新结果。

Demo gif

太感谢了!折腾了两天,本来都快放弃了 :joy:

出结果是绑定的 SPACE 键,gif 上应该不是实时的,应该是按了空格键

好吧,那应该就不是问题了。但是我试了一下,我这边在检索式上按空格没有刷新结果,我看了默认的 xeft-mode-map 是这样的:

(defvar xeft-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map (kbd "RET") #'xeft-create-note)
    (define-key map (kbd "C-c C-g") #'xeft-refresh-full)
    (define-key map (kbd "C-c C-r") #'xeft-full-reindex)
    (define-key map (kbd "C-n") #'xeft-next)
    (define-key map (kbd "C-p") #'xeft-previous)
    map)
  "Mode map for `xeft-mode'.")

不知道是不是作者用空格绑定了 xeft-refresh 函数。

readme 提到了按空格预览,不需要任何配置 ,可能是你的emacs配置影响了吧

空格绑定的是 push-button

1 个赞

谢谢!我明白你的意思了,可能我没有表达清楚,我这边在条目上是按空格是可以预览的。

我是说在输入检索式的时候,似乎这个 gif 上在敲击检索式的时候,下面的检索结果就在刷新,deft 也是这样的,但是我用 xeft 的时候,输入检索式的过程中下面的检索结果不是实时更新的,我每次要按 C-c C-g 或者 M-x xeft-refresh 才能更新。

重启了下 Emacs,现在 xeft 里也能够输入检索式的时候实时更新下面的结果了 :joy:

非常感谢大家的帮助!总算用上 xeft 了,确实检索速度还挺快的。