使用nXhtml打开HTML文件会产生flymake错误

时间:2013-06-11 07:46:00

标签: emacs emacs24 flymake nxhtml

当我使用emacs(和nXhtml)打开HTML文件时,我从flymake收到以下错误:

  

错误(flymake):Flymake:无法启动语法检查进程'xml'   与args(val   /home/ABC/Downloads/capitals_flymake.html):   搜索程序:没有这样的文件或目录,xml。 Flymake将是   关闭

我认为这意味着我需要安装一个可以在xml命令行运行的程序。但是,我无法在文档中找到该程序的内容。

我目前还在使用以下gist(其中一位评论者建议修改equal>=)以禁用我{{1}中的Mumamo缓冲区文件名警告1}}:

.emacs

但是,我不确定这是否相关。

如何让flymake与nXhtml一起使用?我目前正在使用GNU Emacs 24.3.1。

2 个答案:

答案 0 :(得分:0)

我在我的.emacs中有这个用于实时验证XML和HTML,看看这是否有帮助。

(defun flymake-xml-init ()
  (list "xmllint"
        (list "--valid"
              (flymake-init-create-temp-buffer-copy
               'flymake-create-temp-inplace))))

(defun flymake-html-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
                     'flymake-create-temp-inplace))
         (local-file (file-relative-name
                      temp-file
                      (file-name-directory buffer-file-name))))
    (list "tidy" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
             '("\\.html$" flymake-html-init))

此外,重新xml可执行文件:它可能是http://packages.ubuntu.com/quantal/amd64/xml2/filelist的外观......也可以尝试apt-file /usr/bin/xml(我不确定是否{{}默认安装1}},如果没有,则apt-file)。此外,也许这会有所帮助:http://www.emacswiki.org/emacs/FlyMake。我无法找到任何特定于apt-get install apt-file的设置,可以做些什么来飞行。

答案 1 :(得分:0)

您的计算机上未安装flymake使用的默认程序(xml),或者其位置不在您的路径中。你需要告诉flymake使用不同的语法检查器,就​​像@wvxvw所说的那样(参见他们对代码的回答)。

但是,当您更改语法检查程序时,您可能还需要告诉flymake新检查程序将如何输出错误消息,否则flymake将不知道如何读取检查程序的输出。

如果您的新检查程序的退出代码不是0(通常表示错误)并且flymake没有看到任何被识别为错误文本的内容,则flymake将抛出CFGERR并关闭。

来自flymake manual

  

以下错误会导致警告消息并将缓冲区的flymake模式设置为OFF。

     

CFGERR:语法检查进程返回非零退出代码,但未报告错误/警告。这表示可能的配置错误(例如,语法检查工具没有合适的错误消息模式)

所以你需要做的是告诉flymake如何解释更新的解析器中的错误。您可以通过向列表中添加正则表达式来执行此操作,flymake将根据解析器的输出进行检查。在.emacs文件中添加以下内容:

(add-to-list
    `flymake-err-line-patterns
    '("at line \\([0-9]+\\) of \"\\([^ \n]+\\)\"$" 2 1 nil))

这将告诉flymake,如果您的解析器生成的输出与正则表达式("at line \\([0-9]+\\) of \"\\([^ \n]+\\)\"$")匹配,则将其标识为错误消息。 2 1 nil告诉flymake正则表达式中的哪个组分别代表文件,行号和列号。如果错误消息未提供该信息,则将该参数设置为nil。在此示例中,错误消息仅标识文件(第二组)和行号(第一组),因此该列设置为nil。