基于 Company 编写了一个带中文注释的英文补全助手

这样更好,方便修改

等我研究一下startdict的格式

再提一个 issue

输入 good 弹出候选词:

image

输入 good- 然后候选词都没用了:

image

应该将连字符也纳入 prefix

Edit:

亲测将 company-grab-word 换成 company-grab-symbol 可以解决问题:

image

你说的几个问题都修复了:

  1. 错误的加入 prefix 到补全列表中
  2. 词典中有的例句现在可以补全一句话了
  3. good-bye 连接符不能补全的问题

除此之外我写了一个 python 脚本: https://github.com/manateelazycat/lazycat-emacs/tree/master/site-lisp/extensions/english-helper

现在大家可以自己用 stardict.py 脚本导入自己喜欢的 stardict 词典进行补全了, stardict.py 脚本运行完了, 会自动在当前目录下生成新的 company-english-helper-data.el

最后不要打开 company-english-helper-data.el 这个文件, 11万行单词, emacs会卡死的

2 个赞

可以在第一行指定打开的mode

;; -*- mode: fundamental; -*-

Good idea, 已经实现了

为什么不用sqlite3

没必要啊, 直接内存查词典多快啊, 不用每次都要读取数据库

可 以 缓 存

真的没有必要了, 英文补全怎么简单怎么来, 用合适的技术就好。

英文补全就字典就刚刚好, sqlite 都重了。

我想改个解释

我是从 stardict 字典中直接转换的, 如果想要深度自定义解释, 可以直接修改 stardict.py 这个脚本, 很简单的, 前后 20 行。

搭车问:我在web-mode里想让company补全包括-,现在是modify-syntax-entry-看作word的,我想把它看作symbol,这样更正确一点,那么就要改company让它补全symbol而非word,该怎么写才能办到呢?

方便把代码贴出来吗?

(modify-syntax-entry ?- "w" web-mode-syntax-table)

describe-syntax可以看到"w"表示word-constituent。希望改成

(modify-syntax-entry ?- "\_" web-mode-syntax-table) ;; \好像是多余的

这样-是symbol的一部分,但不是word的一部分。

第二种写法company不会补全-,所以暂时用的第一种,怎么告诉company:“为我补全symbol,而不止是word”?

用的 company-web-html backend?

company-backends:

((company-dabbrev-code company-gtags company-etags company-keywords)
 company-files company-dabbrev)

先搞清楚是哪个 backend 在起作用,如果是第一个 dabbrev-code 的话,它本身就是 grab-symbol 的:

(prefix (and (or (eq t company-dabbrev-code-modes)
                     (apply #'derived-mode-p company-dabbrev-code-modes))
                 (or company-dabbrev-code-everywhere
                     (not (company-in-string-or-comment)))
                 (or (company-grab-symbol) 'stop)))

用的 spacemacs 吗?编辑什么文件?web-mode 第一个 backend 不应该是这个啊?用 html layer 的话,第一个 backend 是 company-web-html

company-css & company-html在osx上很卡,我去掉了。起作用的似乎是company-dabbrev

如果是 dabbrev, 补全symbol的方式很简单:

(setq company-dabbrev-char-regexp "[\\.0-9a-z-_'/]") ;adjust regexp make `company-dabbrev' search words like `dabbrev-expand'
(setq company-dabbrev-code-other-buffers 'all) ;search completion from all buffers, not just same mode buffers.
(setq company-dabbrev-downcase nil) ;don't downcase completion result from dabbrev.
1 个赞