如何只补全函数名

当我用spacemacs的配置时,编写部分函数名后希望能只补全函数名(为了能够作为另一个函数参数)

但是发现我按确定后,总是变成函数调用的形式,既有括号又有参数

如何才能只补全函数名呢?

可能我表达的不够清楚

如下,我只想要补全 FillMessageHeader

但是,我按 return 后

它变成了调用形式…

company-backends看看,dabbrev dabbrev-all-buffers dabbrev-code之类肯定是只补全单词本身的,我记得以前我在php里用gtags的时候会出现这样的补全,删掉company-backends里的company-gtags可能可以搞好,但是补全会变少(dabbrev最多到all-buffers,没有未打开文件)。所以大概要改company-gtags的行为。。

我记得山人有期视频里讲到取消diminish mode-line的company字符,让它显示完整的,可以看到当前补全用的具体backend,可能对研究这个有帮助。


find-function company-gtags可以看到(defun company-gtags (command...的body中的(cl-case command...里有

(post-completion (let ((anno (company-gtags--annotation arg)))
                       (when (and company-gtags-insert-arguments anno)
                         (insert anno)
                         (company-template-c-like-templatify anno))))

给它加个advice,(when (equal command 'post-completion))时不ad-do-it就行了吧,搞不清advice可以直接删了这部分然后重新defun覆盖之

1 个赞

我之前還很討厭某個 gtags 插件自動提示是否重建 GTAGS 的功能

1 个赞

探寻了一下 company.el

使用一下函数就可以了

(defun company-complete-selection-literally ()
  "Insert the selected candidate literally."
  (interactive)
  (when (company-manual-begin)
    (let ((result (nth company-selection company-candidates)))
      (company--insert-candidate result)
      (company-abort)  ;; 原本是 (company-finish result)
      ))
  )
1 个赞

我发现还是有点问题的,

company-abort 中调用的是 company-completion-cancelled-hook

而正常情况会调用

(company-call-backend 'pre-completion result)
(run-hook-with-args 'company-completion-finished-hook result)
(company-call-backend 'post-completion result)

这就导致 company 无法做一些比较有用的事情,比方说,对 candidates 根据使用量排序。

(不过,我一般是用 company-search-mode 的,所以这个影响不大)

这个总归不是个最佳的解决方案,虽然可以通过重写一个 company-abort 函数,把里面的 company-completion-cancelled-hook 改成 company-completion-finished-hook ,但是仍旧可能缺失 backend 部分提供的功能。

或许只有给 company 提 issue 加入只补全文字的接口,即 company frontend 能告诉 backend 只补全文字。

可以修改自定义一个backend

sort也能定义,统计通过post-completion处理计数。

命令说明

1 个赞