美文网首页lisp语言
emacs helm-do-grep-1 funcall: Wr

emacs helm-do-grep-1 funcall: Wr

作者: 齐格Insight | 来源:发表于2015-11-29 11:47 被阅读260次

    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: Wr

        本文链接:https://www.haomeiwen.com/subject/gdxjhttx.html