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)
- 第一种方法是将helm-adaptive-history这个变量强制设置为nil
ELISP> (setq helm-adaptive-history nil)
- 第二种方法是调用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)))