emacs helm-do-grep-1 funcall: Wrong type argument: listp, \.\.\.

helm的grep操作

我们都知道helm做grep操作是调用以下命令

(helm-do-grep)

对应的快捷键为 C-x c M-g s
同时,做递归的grep操作的快捷键为C-u C-x c M-g s 调用的命令为:

(helm-do-grep-1)

今天我调用递归的grep的时候,报了如下错误:

funcall: Wrong type argument: listp, \.\.\.

原因(cause)

helm在做grep操作的时候,会先去找下你历史上的grep操作,看下历史的pattern,对应有个变量叫helm-adaptive-history在文件helm-adaptive.el里有定义,而且它会把这个变量历史值保存在helm-adaptive-history-file这个变量值对应的文件中(默认的文件为:~/.emacs.d/helm-adaptive-history)。

/Users/aborn/.emacs.d/elpa/helm-20151126.607/helm-adaptive.el

我打开ielm(M-x ielm)查看下helm-adaptive-history这个值如下:

ELISP> helm-adaptive-history
(("*Ack-grep types*"
  ("java" \.\.\.))
 ("*helm grep extensions*"
  ("*.el" \.\.\.)
  ("*" \.\.\.)))

看来是\.\.\.这种格式是错误的才报了以上的错误。

解决方法(solution)

  1. 第一种方法是将helm-adaptive-history这个变量强制设置为nil
ELISP> (setq helm-adaptive-history nil)
  1. 第二种方法是调用helm-reset-adaptive-history命令,将helm-adaptive-history设置为nil
M-x helm-reset-adaptive-history

结果(result)

解决了后,我又重新做了一次递归的grep操作,再去看了下helm-adaptive-history变量的值,如下:

ELISP> helm-adaptive-history
(("*Ack-grep types*"
  ("elisp"
   (".el" . 1))))

原来格式变了呀!这是为什么呢?估计是升级后不支持老的格式?

建议

建议把下面的代码放到init.el(或者.emacs)

(add-hook 'after-init-hook
          (lambda ()
            (load-file helm-adaptive-history-file)))

你可能感兴趣的:(emacs helm-do-grep-1 funcall: Wrong type argument: listp, \.\.\.)