当我用spacemacs的配置时,编写部分函数名后希望能只补全函数名(为了能够作为另一个函数参数)
但是发现我按确定后,总是变成函数调用的形式,既有括号又有参数
如何才能只补全函数名呢?
当我用spacemacs的配置时,编写部分函数名后希望能只补全函数名(为了能够作为另一个函数参数)
但是发现我按确定后,总是变成函数调用的形式,既有括号又有参数
如何才能只补全函数名呢?
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
覆盖之
我之前還很討厭某個 gtags 插件自動提示是否重建 GTAGS
的功能
探寻了一下 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)
))
)
我发现还是有点问题的,
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 只补全文字。