系统情况:GNU Emacs 28.2 , MacOS 12.6
我将consult-locate-args
设置为mdfind -name
现test文件夹中通过创建4个内容为空的org文件,其文件名分别为:
- apple_fruit.org
- banana_香蕉_fruit.org
- lemon_fruit.org
- orange_橙子_fruit.org
当使用M-x consult-locate
搜索包含fruit的org文件时,(假设电脑上只有这四个文件符合搜索条件)
第一种情况,输入fruit.org
或者 fruit org
,搜索结果为:
- apple_fruit.org
- lemon_fruit.org
两个文件名字中包含中文字的文件没有显示在搜索结果中。
第二种情况,输入fruit kind:org
时,则四个文件均显示在搜索结果中。
我想请教一下是什么导致这两种情况的区别? 是否有办法让第一种情况的搜索显示四个文件?
另附一些mdfind和spotlight的资料:
我这儿试了下没问题:
命令行也是正常的:
➜ ~ mdfind -name fruit.org | nl
2024-02-08 15:23:08.585 mdfind[60324:2667544] [UserQueryParser] Loading keywords and predicates for locale "en_US"
2024-02-08 15:23:08.585 mdfind[60324:2667544] [UserQueryParser] Loading keywords and predicates for locale "en"
1 /Users/xcy/test/apple_fruit.org
2 /Users/xcy/test/banana_香蕉_fruit.org
3 /Users/xcy/test/lemon_fruit.org
4 /Users/xcy/test/orange_橙子_fruit.org
大概率只和 mdfind 有关,可以先用命令行进行排查。我的系统语言是英文,但是应该不会分词吧?!
我在zsh中使用mdfind得到的还是不一样的结果。不知道可以通过什么方法去排查呢?
Evangeline@192 test % ls
apple_fruit.org lemon_fruit.org
banana_香蕉_fruit.org orange_橙子_fruit.org
Evangeline@192 test % mdfind -name fruit org
/Users/Evangeline/test/apple_fruit.org
/Users/Evangeline/test/lemon_fruit.org
Evangeline@192 test % mdfind -name fruit.org
/Users/Evangeline/test/apple_fruit.org
/Users/Evangeline/test/lemon_fruit.org
Evangeline@192 test % mdfind -name fruit kind:org
/Users/Evangeline/test/apple_fruit.org
/Users/Evangeline/test/banana_香蕉_fruit.org
/Users/Evangeline/test/orange_橙子_fruit.org
/Users/Evangeline/test/lemon_fruit.org
那这说明是 mdfind 的问题了,和 Emacs 无关。需要调查下 mdfind / Spotlight 的搜索匹配机制。
另外注意 mdfind -name fruit org
中,fruit
是 -name
的参数,匹配文件名,但 org
是 query
,这两者不同。至于它们各自遵循什么规则 manpage 没有解释清楚,但是可以测试验证。
你可以尝试先调查清楚 -name
的作用,先不让 query 介入,即「为什么 mdfind -name fruit.org
搜索不到中文结果?」
➜ ~ mdfind -name fruit.org
2024-02-08 23:07:33.497 mdfind[61688:2735598] [UserQueryParser] Loading keywords and predicates for locale "en_US"
2024-02-08 23:07:33.498 mdfind[61688:2735598] [UserQueryParser] Loading keywords and predicates for locale "en"
/Users/xcy/test/apple_fruit.org
/Users/xcy/test/banana_香蕉_fruit.org
/Users/xcy/test/lemon_fruit.org
/Users/xcy/test/orange_橙子_fruit.org
另外,上面的日志一直提示这个搜索是 locale 相关的。
当我再创建一个文件orange_fruit.org_橙子.org
。此时,我使用fruit.org
搜索,结果中会出现这个新创建的文件。
这样试下来,就好像mdfind -name
在中英文混杂的搜索中,不匹配中文字之后的字符一样。只要fruit 和 org出现在中文字符前面就可以被匹配到。
还有,mdfind -name
是只搜索文件名,且支持多个关键字搜索。比如,搜索mdfind -name fruit org orange
,即可得到刚刚新添加的文件orange_fruit.org_橙子.org
。所以我觉得三个关键字都属于-name
的参数。
hmm,我感到很迷惑。。。。
在zsh中执行locale可得:
Evangeline@evangelinedembp ~ % locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=
好像是一些环境变量。不确定是否有关系。