如何配置Aspell使其搜索多个路径下的字典文件?
我完全懂你的感受——已经靠符号链接搞定了自定义字典的加载,但总觉得用绝对路径或者软链有点“凑活”,想找个更原生的方法让Aspell同时搜索多个字典路径对吧?
先复盘下你当前的实现:你在/my/custom/en_GB-foo.multi里配置加载自定义的foo.rws和系统的en_GB.multi,一开始用绝对路径觉得麻烦,后来建了软链/my/custom/base指向系统字典目录/usr/lib64/aspell-0.60,调用时用aspell --lang=en_GB --variety=foo --dict-dir=/my/custom check file.txt就能正常工作,而且Aspell加载基础字典后还会自动用系统路径解析后续相对路径,这点确实很省心。
回到你的核心问题:有没有“正规”的方法让Aspell搜索两个路径的字典文件?其实Aspell本身没有直接支持同时指定多个--dict-dir的参数,但有几个更优雅的原生替代方案,比软链更合适:
用自定义配置文件指定双路径
你可以创建一个Aspell配置文件(比如/my/custom/aspell.conf),在里面同时设置自定义字典路径和系统字典路径:dict-dir /my/custom data-dir /usr/lib64/aspell-0.60之后调用Aspell时指定这个配置文件就行:
aspell --conf=/my/custom/aspell.conf --lang=en_GB --variety=foo check file.txt这样Aspell会同时在
dict-dir(你的自定义目录)和data-dir(系统字典目录)里查找需要的字典文件,你的.multi文件就能直接写add foo.rws和add en_GB.multi,不用再依赖软链。通过环境变量传递多路径配置
不想单独建配置文件的话,直接用ASPELL_CONF环境变量一次性传递路径配置:ASPELL_CONF="dict-dir /my/custom; data-dir /usr/lib64/aspell-0.60" aspell --lang=en_GB --variety=foo check file.txt效果和配置文件一样,Aspell会同时检索两个路径下的字典文件。
把自定义字典放到Aspell默认搜索路径
Aspell默认会搜索用户主目录下的.aspell文件夹,你可以把en_GB-foo.multi和foo.rws放到~/.aspell/目录下,这样调用时连--dict-dir都不用指定:aspell --lang=en_GB --variety=foo check file.txt你的
.multi文件里直接写add foo.rws和add en_GB.multi就行,Aspell会自动先在用户目录找自定义文件,再去系统目录找基础字典。
另外补充下你之前踩的坑:local-data-dir主要是用来指定本地语言数据文件的路径,和字典文件的搜索路径不是一回事;而多次指定--dict-dir的话,Aspell只会生效最后一个路径,所以才没起作用。
总的来说,上面这几个方法都是更“正规”的原生方案,不用依赖软链就能实现多路径字典搜索的需求。
备注:内容来源于stack exchange,提问作者Tim




