Emacs 错误的类型参数:stringp,nil

Emacs 错误的类型参数:stringp,nil,emacs,elisp,Emacs,Elisp,在此之前,我只是将代码剪切并粘贴到.emacs文件中,但后来我决定向emacs添加一些maven功能。现在,我不知道我是如何把事情搞砸的,但昨晚我在运行M-x jarl mvn exec时一直在标题中输入错误。我在上面睡了一觉,第二天就回来了,但我还是一事无成 (defun jarl-get-pom () (concat (locate-dominating-file (buffer-file-name (current-buffer)) "p

在此之前,我只是将代码剪切并粘贴到.emacs文件中,但后来我决定向emacs添加一些maven功能。现在,我不知道我是如何把事情搞砸的,但昨晚我在运行M-x jarl mvn exec时一直在标题中输入错误。我在上面睡了一觉,第二天就回来了,但我还是一事无成

(defun jarl-get-pom ()
  (concat (locate-dominating-file 
       (buffer-file-name 
        (current-buffer))
       "pom.xml")
      "pom.xml"))

(defun jarl-visit-pom ()
  (interactive)
  (find-file (jarl-get-pom)))

(defun jarl-mvn-exec ()
  (interactive)
  (switch-to-buffer (get-buffer-create "maven"))
  (start-process-shell-command "mvn-exec" "maven" "mvn" "-f" (jarl-get-pom) "compile")
  (start-process-shell-command "mvn-exec" "maven" "mvn" "-f" (jarl-get-pom) "exec:exec"))

您需要提供更多信息以确保。尝试设置

(setq debug-on-error t)
这将为您提供一个堆栈跟踪,显示哪个函数抱怨字符串为nil


我猜
缓冲区文件名
返回nil,这就是问题所在(并非所有缓冲区都有文件名)。查看Emacs Lisp手册的一节或一节。

在init文件中查找问题的秘密不是秘密:二进制搜索


使用
注释区域
注释掉一半的初始文件,然后是3/4、7/8,。。。识别问题的速度非常快
comment region
也取消注释:
C-h f comment region RET

我的意图是在文件上方为emacs中的当前缓冲区获取pom,但是我将缓冲区切换到另一个(没有文件的)以查看我的maven命令的结果。回答得好。Emacs Lisp编程入门中调试部分的链接是Tho,在本例中,他需要调试基本上是“单个块”的代码,并且他已经知道它是哪个块,因此从二进制搜索中确实没有多少收获(由于它主要是一系列独立的指令,因此通常对
~/.emacs
非常有效)。值得一提的是,错误消息“错误类型参数:stringp,nil”意味着emacs需要一个字符串,但得到的却是
nil