helm-do-grep-ag 以后的tab 行为是怎么确定的?

mac 的GUI emacs 下面

  1. helm-do-grep-ag (helm-ag buffer 里面有很多候选的记录, 比如 file1.c:147 …, file2.c:237 … 等)
  2. 光标移动到任何一条记录, 输入tab, 就会在另外一个buffer 打开对应的文件, 并光标定位于对应的行号

这样用起来非常的高效。

但有些时候,我的emacs 必须运行在linux 的终端里面, 同样的操作, 步骤2 的结果就变成了 "helm-action buffer, 让我选择: [f1] Find file, [f2] Find file other frame …

感觉是在我 helm-do-grep-ag 之后 tab 行为不一样,但现在还找不出来原因。

Helm 默认的 Tab 就是用来切换 Action 列表的,C-j 用来执行 Persistent Action 的。使用 Emacs 标准的方法来查看(C-h k)和修改按键(define-key)。

在终端下TABC-i是一个键,如果绑定(kbd "TAB"),那么C-i和tab键会都被绑定上。

为了单独绑定GUI下的tab键,你需要用(kbd "<tab>")。我猜测你的配置绑定了后者,因为Helm的默认绑定就想xuchunyang说的那样,默认是打开action list。

配置文件中加上这一行, 在终端下就可以了

(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action)