lsp-bridge 如何直接用数字选择候选项

对的,我想要的就是这个功能,谢谢大佬0-0.

lambda!是自动给你插入一个interactive的,你这里没加就用来define-key不会报错的吗 :joy:

还差一点,上面说的当候选项中有数字的时候认为是输入了那个数字。

并没有报错,可以直接用。

这个大佬也有相应的实现吗?

虽然现在的已经够用了,但是如果能应对特殊情况,那当然是更吼了。

company有,抄的abo abo的,lsp-bridge简单看了一下没找到怎么取得当前candidate list

(defun ora-company-number ()
    "Forward to `company-complete-number'.
In these cases just insert the number:
1. the number is potentially part of the candidate
2. last character is a number "
    (interactive)
    (let* ((k (this-command-keys))
           (re (concat "^" company-prefix k)))
      (if (or (cl-find-if (lambda (s) (string-match re s))
                          company-candidates)
              (> (string-to-number k)
                 (length company-candidates))
              (looking-back "[0-9]"))
          (self-insert-command 1)
        (company-complete-number
         (if (equal k "0")
             10
           (string-to-number k))))))

今天简单的实现了一下, 这时候我如果想输入 12 这个数字的时候, 反而补全成了 1- , 很烦人。

自己改 acm-keymap–quick-access-modifier 这个选项吧, 我发现只要是想输入数字的时候, 直接按数字补全都会各种冲突。

好的,谢谢大佬。

这个确实能难整到适应所有的情况。所以,我以前碰到数字都是在 Evil 模式下 esc 跳出补全,再快速切回来输入数学。

由于数字变量我本身碰到的情况并不多,所以对我而言还能接受。

数字开头也出补全,这个问题只有在elisp里面有,别的mode一串数字根本不会被lang server认为是一个symbol,1开头的补全菜单也就永远是空 :joy:

可以在elisp里面也禁用数字开头时的补全,代价是无法补全少量1 2开头的函数(以及数字开头的变量,不过一般不会有人起变量的时候用数字开头吧)

只要语言本身支持就很难避免吧。我觉得像现在这样有设置方法就挺好的了,可以根据自己的需求选择是否安装。

函数我都写好了,先再用用吧,我感觉elisp写 1+ 或者 1- 的情况还很多。

写个数字加减法,确实很烦人。

1 个赞

我做了几个限制条件:

  1. 用户输入的必须是数字字符
  2. 用户输入的数字要小于等于补全菜单的长度
  3. 补全项接下来要输入的字符不能等于输入的数字
  4. 光标前不能是数字字符

只要符合着几个条件的, 就可以直接通过数字字符来选择候选词, 不符合条件的插入数字或者通过 Alt + Number 来辅助选择候选词。

@sbwcwso @JJPandari 两位可以更新试一下。

3 个赞

大佬辛苦,等我用完后再来回馈信息。


试用了一下,基本实现甚至超过了我的预期,因为 lsp-bridge-toggle-sdcv-helper 对于英语渣渣来说实在是太好用了 :smile:

对于需要输入数学的情况,我现在碰到的情况只有汇编语言里面的寄存器,比如 R1, R2 之类的,这种在 evil 下我一般会先按 Esc 进入 normal mode,再按 a 后就可以直接输入了。或者说如果需求比较大,我直接暂时关闭数字选词就 ok 了。


多谢大佬 :grinning:, you save my life.

1 个赞