推荐入坑TabNine


#21

我是不是应该把lsp给关了。。关了的话 跳转怎么办

还有我org-mode也不补全 我把lsp关了 啥也不补全了 无限提示左下角 难受


#22

免费版索引上限 100400KB,会不会很容易达到?


#23

我怎么关了 lsp 啥也不提示了。左下角无限TabNine process restart limit rached 啊啊啊 为啥你们都是好的。我又跪了。我的心好累

是不是要把二进制 放在项目根目录?


#24

免费版是400kb,只是大型项目会超过,但是超过还是提供补全,只是没那么多而已,也够用。


#25

大家用都没问题 我这个二进制文件一直报超过上限 是不是要换个位置 它怎么确定项目根目录

默认位置是 ~/.Tabnine 直接爆了

重新下载了二进制 好了 感觉还不错 没有lsp了跳转怎么办


#26

试用过,免费版还是太弱


#27

tabnine是我学校一位大神同学做的😂

我觉得完整版卖太贵了,而且还是闭源的,一个补全软件不应该卖这么贵。我也考虑一段时间了,这里有没有人感兴趣一起做个开源版?


#28

company-tabnine在没有补全的情况下不能fallback到其他后端,没法配合使用……提了个issue给作者

卧虎藏龙啊


#29

有啊有啊,交流下?

看了下这段介绍,感觉得装个N卡lol

Deep TabNine requires a lot of computing power: running the model on a laptop would not deliver the low latency that TabNine’s users have come to expect. So we are offering a service that will allow you to use TabNine’s servers for GPU-accelerated autocompletion. It’s called TabNine Cloud, it’s currently in beta, and you can sign up for it here.


#30

巨好用啊,平时工作使用 VSCode ,一直超希望加入 Emacs 的本地代码方面的补全,现在真是完美解决了,Thanks :grin:


#31

你用的是免费版还是收费版的?差别大吗?


#32

目前使用的免费版,VSCode 的一个插件,刚大概进行了一些功能性的测试,还没有展开使用,不过光是有这个功能,已经让我很开心了,:rofl: ,毕竟在此之前,只能默默忍受


#33

用下来感觉不错 大家能搞个开源版本就更好了

那么问题来了。补全有了 跳转怎么解决呢~


#34

先研究研究gpt-2

我觉得跳转用lsp就很好了


#35

我用了TabNine 把lsp给关了 lsp不是依赖后端的么。。我怕有冲突


#36

我记得tabnine官网说和lsp是兼容的。


#37

现在tab9可以和其他后端配合使用了,tab9后端我放在最前面,其他后端后备顶上

(defun use-package-list-insert (elem xs &optional anchor after test)
  "Insert ELEM into the list XS.
If ANCHOR is also a keyword, place the new KEYWORD before that
one.
If AFTER is non-nil, insert KEYWORD either at the end of the
keywords list, or after the ANCHOR if one has been provided.
If TEST is non-nil, it is the test used to compare ELEM to list
elements. The default is `eq'.
The modified list is returned. The original list is not modified."
  (let (result)
    (dolist (k xs)
      (if (funcall (or test #'eq) k anchor)
          (if after
              (setq result (cons k result)
                    result (cons elem result))
            (setq result (cons elem result)
                  result (cons k result)))
        (setq result (cons k result))))
    (if anchor
        (nreverse result)
      (if after
          (nreverse (cons elem result))
        (cons elem (nreverse result))))))

(with-eval-after-load 'lsp-mode
  (require 'company-lsp)
  (setq company-backends
        (use-package-list-insert #'company-lsp company-backends
                                 'company-tabnine t)))

(with-eval-after-load 'company
  (push #'company-tabnine company-backends))

#38

好的 我等会试试


#39

你在加拿大读书?富人呀


#40

可以通过 company-transformers 实现 TabNine 和 lsp 同时用

(defun company//sort-by-tabnine (candidates)
  (if (or (functionp company-backend)
          (not (and (listp company-backend) (memq 'company-tabnine company-backend))))
      candidates
    (let ((candidates-table (make-hash-table :test #'equal))
          candidates-1
          candidates-2)
      (dolist (candidate candidates)
        (if (eq (get-text-property 0 'company-backend candidate)
                'company-tabnine)
            (unless (gethash candidate candidates-table)
              (push candidate candidates-2))
          (push candidate candidates-1)
          (puthash candidate t candidates-table)))
      (setq candidates-1 (nreverse candidates-1))
      (setq candidates-2 (nreverse candidates-2))
      (nconc (seq-take candidates-1 2)
             (seq-take candidates-2 2)
             (seq-drop candidates-1 2)
             (seq-drop candidates-2 2)))))

(add-to-list 'company-transformers 'company//sort-by-tabnine t)
;; `:separate`  使得不同 backend 分开排序
(add-to-list 'company-backends '(company-lsp :with company-tabnine :separate))

以上代码效果就是, 前 2 个 candidates 是 company-lsp 的, 接着的 2 个是 TabNine 的.


company-tide 能和其它 tabnine 共存吗?