Emacs 默认补全的确认问题

困扰了多年的问题,因为不知道该用什么关键字,所以一直也没能搜解答出来

就是我们在Emacs大多是写了以-(减号)和单词首字母再用Tab来自动补全
但是也经常也遇到这种w-t 后有 with 和 without 这样的,如果我是要with,但是按了Tab还是要让我确定啊,尝试过多个其它按键都没有用,我该怎么确定啊??

不太清楚,有尝试过用 company 或者 ivy 么?

好像好几年前刚学Emacs的时候按照网上教程装过,都忘了是干什么的了~

不明白什么意思。你的截图显示正在补全的是 with,所有以它打头的选项都算,Tab 显示所有的补全,有什么问题吗?

这个时候我确定了要的是 with,但是我按 Tab 的时候不会跳到后面,因为还有 without 可以让我选(也是以 with 开头) 除非我按了o 再Tab 就会变成 without-t…

你试试 defun 两个函数 with-sth 和 without-sth 再试试用 w-x 来自动补全?

您是想在…with 后面输入一个 tab 嘛?

我是想 w-s 后 Tab 变成 with-sth 但是也有 without-sth 就只能手动在 with 出来后手动输入,不能再靠tab来自动填补了

默认补全没这功能吧,补全到最长共同前缀吧,比如有 with-time 和 without-time 两个补全,你输入 with 然后补全就会弹出 2 个选项让你选,没别的功能了吧。

你可以点击补全 Bufffer 中的选项,第一行也有说明 RET 选择补全。

如果我没有 without 的 那就正常了,后面的单词也会自动补全 这个功能是Emacs 默认自带的功能吧?

照我的理解默认补全到最长匹配,假设一共就 2 个可能选项 with-time 和 without-time

  • 当你输入到 w,补全到 with
  • 当你输入到 with,TAB 发现有两个选项,而且没法补全,弹出窗口让你选
  • 当你输入到 with-,TAB 补全到 with-time
  • 当你输入到 witho,补全到 without-time

我用的是 Company,它会自动弹出菜单,比单独的 Buffer 方便。

with-的时候TAB 坐标就跳到了 with后面( with|-) 让我选

(with-<光标位置>) 此时按补全,光标会自己动?(我这不会)

是的,如果有 with-*** 和 without-*** 的话,我按TAB会从
(with-<光标位置>
变为:
(with<光标位置>-

不清楚什么情况,我的建议:

  1. 从 Emacs -Q 测试
  2. 看手册对补全功能的描述,确保明白补全的用法,比如 completion-styles 的作用是什么?

你试试 defun 两个函数 with-sth 和 without-sth 再试试输入 w-s 来自动补全?
右侧应该会出现这两个函数名列表让你选择 鼠标跳到 with<光标>-s
如果我用 without 还好,输入个o就tab,但如果我就是要 with-sth 怎么 tab 都不行

光标位置?然后又按哪个键(命令)补全?

  1. emacs-26.1 -Q
  2. 定义 Emacs Lisp 函数 (defun with-sth ()) (defun without-sht ())
  3. *scratch * 输入 (w-s 此时按 TAB ( M-x completion-at-point) 出现:

光标也没有移动。


我不懂 Emacs 补全的实现,如果要我明白这个问题,你不得不从 Emacs -Q 把重现步骤写出来。更好的方法是,M-x report-emacs-bug 报告一个 Bug,如果你觉得不像 Bug 的话,写邮件到 Emacs 邮件列表问问。

报bug就可以,不确定是bug也可以报

好吧,居然大家没有觉得有这种问题,那可能是我的问题~