我在测试文件 a.py
同级目录与上级目录分别创建git仓库进行测试,依然提示 import “mode” could not be resolved
,也尝试创建 .projectile
文件指定项目路径,同样会有提示。
刚才参考 pyright/configuration.md ,在项目路径下添加 pyrightconfig.json 文件进行项目路径配置,不知道是不是文件格式有问题,配置同样没生效
我在测试文件 a.py
同级目录与上级目录分别创建git仓库进行测试,依然提示 import “mode” could not be resolved
,也尝试创建 .projectile
文件指定项目路径,同样会有提示。
刚才参考 pyright/configuration.md ,在项目路径下添加 pyrightconfig.json 文件进行项目路径配置,不知道是不是文件格式有问题,配置同样没生效
lsp-bridge-enable-log 打开,看下 initialize 请求里面的 rootUri/rootPath 相关参数是什么。我怀疑你这个 path 是 “test”, 所以你可能要 import src.mode.xxx 才不报错。
你这是识别成单文件了。 projectile 就别纠结了,lsp-bridge 探测工程不用这个,只看 git。 你 .git 是真的还是假的? 不是建立目录就完了,要 git --init . 这样建立。
可以到 Script 目录打开 cmd 手工执行下,看看是不是有报错。 git rev-parse --is-inside-work-tree
lsp-bridge 判断工程根目录是这个方式,你看手工操作下是不是可以。你这个看起来是这个操作没成功,所以发了单文件。
找到问题原因了,是我的cmd配置问题。
之前为了修改cmd编码格式为UTF-8,所以根据网上教程,修改了注册表:
路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
新建:autorun 值为 chcp 65001
之后每次启动 cmd 会先执行 “chcp 65001”,导致 get_command_result
结果执行失败。
现在删除了该键值,一切正常。感谢~
lsp-bridge能不能增加用tab和S-tab进行候选列表移动的键位绑定啊,这一套键位用习惯了; 另外,lsp-bridge可以增加orderless separator吗?类似corfu做的那样,在比较多的候选项中,可以很快定位到候选项,不用上下移动好多次;
按键自己自定义哈,每个人用tab习惯不一样,有些喜欢补全,有些喜欢下一个,很难兼顾。
目前改变文件内容,lsp就会刷新数据,所以暂时没法实现corfu那种模式。
今天腾出时间,在不破坏原代码的前提下,尝试加入了自定义语种的 backend。基本实现了!!!感觉 acm 比之前的 company 快得太多了!!!
;;;
;;; blove-lang-helper.el
;;;
(defalias 'lsp-bridge-toggle-korean-helper #'acm-toggle-korean-helper)
(defvar-local acm-enable-korean-helper nil)
(defcustom acm-backend-kor-min-length 1
"Minimum length of korean word."
:type 'integer)
(add-to-list 'acm-icon-alist '("korean" . ("material" "korean" "#ed6856")))
(defun acm-backend-korean-candidates (keyword dict)
(let* ((candidates (list)))
(when (>= (length keyword) acm-backend-kor-min-length)
(dolist (candidate dict)
(when (string-prefix-p keyword candidate)
(add-to-list 'candidates (list :key candidate
:icon "translate"
;; :icon "korean"
:label candidate
:display-label candidate
:annotation (get-text-property 0 :initials candidate)
:backend "korean")
t))))
candidates))
(defun acm-toggle-korean-helper ()
(interactive)
(if acm-enable-korean-helper
(message "Turn off korean helper.")
(message "Turn on korean helper."))
(setq-local acm-enable-korean-helper (not acm-enable-korean-helper))
)
(add-to-list 'load-path (concat user-emacs-directory "lisp/blove-extra/blove-lang-helper/blove-lang-zh"))
(defun acm-update-candiates-advice ()
(let* ((keyword (acm-get-input-prefix))
(candidates (list))
path-candidates
yas-candidates
tempel-candidates
mode-candidates)
(if acm-enable-korean-helper
(progn
(require 'blove-backends-kor-zh-15000)
(setq candidates (acm-backend-korean-candidates keyword blove-kor-zh-15000))
)
(progn
(if acm-enable-english-helper
;; Completion english if option `acm-enable-english-helper' is enable.
(progn
(require 'acm-backend-english-data)
(require 'acm-backend-english)
(setq candidates (acm-backend-english-candidates keyword))
)
(setq path-candidates (acm-backend-path-candidates keyword))
(if (> (length path-candidates) 0)
;; Only show path candiates if prefix is valid path.
(setq candidates path-candidates)
;; Fetch syntax completion candidates.
(setq mode-candidates (append
(acm-backend-elisp-candidates keyword)
(acm-backend-lsp-candidates keyword)))
(setq yas-candidates (acm-backend-yas-candidates keyword))
(setq tempel-candidates (acm-backend-tempel-candidates keyword))
;; Insert snippet candiates in first page of menu.
(setq candidates
(if (> (length mode-candidates) acm-snippet-insert-index)
(append (cl-subseq mode-candidates 0 acm-snippet-insert-index)
yas-candidates
tempel-candidates
(cl-subseq mode-candidates acm-snippet-insert-index))
(append mode-candidates yas-candidates tempel-candidates)
))))
)
)
candidates))
(advice-add 'acm-update-candiates :override #'acm-update-candiates-advice)
;;; ========== at-the-bottom
(provide 'blove-lang-helper)
那能增加 orderless 的 completion-styles么,orderless 支持regexp,literal,initialism,prefixes,flex 五种匹配方法,看acm代码只实现了 literal
比如 ad1d 能匹配到 AdaptiveAvgPool1d
你能看懂日文? 群里真是卧虎藏龙啊。
平时会用到韩文, 所以比较喜欢用 emacs + 补全功能,来提高输入的准确率。而且很多词时间久了不用会忘记,就自己制作了中韩、韩中补全backend,现在结合 acm 框架,使用体验更好啦!
丢人了,我瞟了一眼,以为是日文呢
哈哈, 我对法文、德文傻傻分不清!
有能力就发补丁吧,现在的功能我已经很满足了。
可以糊着先用。 比如下面这个就支持了 flex 匹配方式。上面的 ad1d 应该没问题了。 顺便说, acm 现在实现的应该是 regexp 方式。
(defun acm-match-orderless-flex (keyword candidate)
(string-match-p (orderless-flex (downcase keyword)) (downcase candidate)))
(advice-add #'acm-candidate-fuzzy-search :override #'acm-match-orderless-flex)
里面 orderless-flex 这个随便换,比如 orderless-initialism 等。 不过我看了, elisp 里面是没有这个 fuzzy-search 的,所以这个 advice 对 elisp 无用。
nice 确实可以用,暂时 lsp 就够啦
又研究了下,发现可以通过 orderless-matching-styles
指定多种匹配方式,orderless-pattern-compiler
生成正则
(setq orderless-matching-styles '(orderless-flex))
(defun acm-match-orderless (keyword candidate)
(string-match-p (car (orderless-pattern-compiler (downcase keyword) orderless-matching-styles)) (downcase candidate)))
(advice-add #'acm-candidate-fuzzy-search :override #'acm-match-orderless)