如何在elisp中找到语法错​​误

时间:2014-05-14 06:47:10

标签: emacs elisp

如果这是重复请删除。 我只是编辑我的.emacs文件,并在完成更改后。一世 重启了emacs。但它再次出现它声称配置 文件有一些错误。我应该从" - debug-init"开始那就是什么 我也做了。但它没有帮助我解决也没有找到语法错​​误。 那么有没有办法找到有语法错误的行。或者甚至更好 会有类似于(e)lisp lint的东西,就像你有例如xml,json,js 等等。提前致谢

修改

管理获得转储:

Debugger entered--Lisp error: (void-variable whitespace-mode)
  redisplay_internal\ \(C\ function\)()
  delete-process(#<process server-client-test>)
 Someunicodefoo" [("server") server-use-tcp server-auth-dir server-socket-dir generate-new-buffer " *temp*" funcall make-byte-code 0 "Someunicodefoo" vconcat vector [buffer-name kill-buffer] 2 "\n\n(fn)" insert-file-contents-literally expand-file-name looking-at "127\\.0\\.0\\.1:[0-9]+ \\([0-9]+\\)" comm process-attributes string-to-number match-string 1 t :other delete-process make-network-process :name "server-client-test" :family local :server nil :noquery :service] 14 "\n\n(fn)"])
  server-running-p("server")
  byte-code("Someunicodefoo" [load-file-name buffer-file-name recentf-menu-before user-emacs-directory recentf-save-file server-name add-to-list load-path file-name-directory "../packages" tool-bar-mode 0 load "ergoemacs-keybindings/ergoemacs-mode" ergoemacs-mode 1 "init_load_packages" "init_version" "init_functions" "init_settings" "init_aliases" "init_abbrevs-lisp-mode" "init_keybinding" "init_mouse" "init_clean_menus" require recentf "Close" ".recentf" recentf-mode server server-running-p t server-start] 4)
  load("/home/dirk/.emacs.d/ergoemacs_1.9.3.1/site-lisp/../ergoemacs/init")
  eval-buffer(#<buffer  *load*-842275> nil "/home/dirk/.emacs.d/ergoemacs_1.9.3.1/site-lisp/site-start.el" nil t)  ; Reading at buffer position 1432
  load-with-code-conversion("/home/dirk/.emacs.d/ergoemacs_1.9.3.1/site-lisp/site-start.el" "/home/dirk/.emacs.d/ergoemacs_1.9.3.1/site-lisp/site-start.el" nil nil)
  load("/home/dirk/.emacs.d/ergoemacs_1.9.3.1/site-lisp/site-start.el" nil nil t)
  load-file("~/.emacs.d/ergoemacs_1.9.3.1/site-lisp/site-start.el")
  eval-buffer(#<buffer  *load*> nil "/home/dirk/.emacs" nil t)  ; Reading at buffer position 2883
  load-with-code-conversion("/home/dirk/.emacs" "/home/dirk/.emacs" t t)
  load("~/.emacs" t t)
  command-line()
  normal-top-level()

2 个答案:

答案 0 :(得分:6)

一种方法是打开文件并标记其前半部分并应用eval-region。如果报告错误,请标记一半并重复。如果未报告错误,请将其应用于另一半。

通过这种方式,您可以缩小问题范围,一旦找到问题就可以解决问题。

我用来查找错误括号的另一种技术是分别在文件的开头和结尾添加一个额外的括号,然后运行 CMf CMb 分别是开头和结尾。如果括号不正确,它们将与新添加的括号匹配,并且该点将移至不正确的括号。

编辑:您可以使用 M-x check-parens 来检查不匹配的括号。

答案 1 :(得分:5)

对于“lint”式检查,有elint.el,但更重要的是,有字节编译器:M-x byte-compile-file RET允许你对文件进行字节编译,并会给你各种关于语法的警告和风格。

但是你的回溯表明问题可能不是语法问题。最像是whitespace-mode出现在菜单中的某个位置(即菜单条目的:enable属性中),并发出错误信号,因为whitespace-mode变量恰好还没有被定义。正如Phils建议的那样,加载whitespace可能会解决问题。