25

这是我在 .emacs 文件中的 flymake 设置:

 (when (load "flymake" t) 
         (defun flymake-pyflakes-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 "pyflakes" (list local-file)))) 

         (add-to-list 'flymake-allowed-file-name-masks 
                  '("\\.py\\'" flymake-pyflakes-init))) 

   (add-hook 'find-file-hook 'flymake-find-file-hook)
(load-library "flymake-cursor")

我只想将 flymake 用于 .py 文件。其余的禁用它。但它始终处于启用状态。例如,当我打开一个 html 文件时,我总是收到以下错误 Error (flymake): Flymake: Failed to launch syntax check process 'xml' with args (val /home/huseyin/vipsatis/templates/cancellation/base_flymake.html): Searching对于程序:没有这样的文件或目录,xml。Flymake 将关闭

所以我想为除了 py 文件之外的任何东西关闭它。是否可以?

(对于有同样问题的人,我想解释一下错误信息:Flymake 使用 xmlstarlet 进行 xml 和 html 验证。它试图将其称为“xml val ......”但它必须将其称为“xmlstarlet val....”要解决这个问题,您必须找到 flymake.el 文件并使用 xmlstarlet 更改 xml 调用。)

4

4 回答 4

23

从列表中删除 HTML 条目:

(delete '("\\.html?\\'" flymake-xml-init) flymake-allowed-file-name-masks)
于 2011-05-29T07:25:35.757 回答
6

好,我知道了。这就是我所做的:首先我找到了 flymake.el 文件。(如果你没有它,你可能在 emacs 安装下有 flymake.elc 文件。在这种情况下,只需将 flymake.el 文件复制到你的加载路径下,这样就可以了使用而不是安装下的编译版本(.elc 文件))。比我发现以下函数并评论 .xml 和 .html 绑定。

(defcustom flymake-allowed-file-name-masks
  '(("\\.\\(?:c\\(?:pp\\|xx\\|\\+\\+\\)?\\|CC\\)\\'" flymake-simple-make-init)
    ;("\\.xml\\'" flymake-xml-init)
    ;("\\.html?\\'" flymake-xml-init)
    ("\\.cs\\'" flymake-simple-make-init)
    ("\\.p[ml]\\'" flymake-perl-init)
    ("\\.php[345]?\\'" flymake-php-init)
    ("\\.h\\'" flymake-master-make-header-init flymake-master-cleanup)
    ("\\.java\\'" flymake-simple-make-java-init flymake-simple-java-cleanup)
    ("[0-9]+\\.tex\\'" flymake-master-tex-init flymake-master-cleanup)
    ("\\.tex\\'" flymake-simple-tex-init)
    ("\\.idl\\'" flymake-simple-make-init)
    ;; ("\\.cpp\\'" 1)
    ;; ("\\.java\\'" 3)
    ;; ("\\.h\\'" 2 ("\\.cpp\\'" "\\.c\\'")
    ;; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2))
    ;; ("\\.idl\\'" 1)
    ;; ("\\.odl\\'" 1)
    ;; ("[0-9]+\\.tex\\'" 2 ("\\.tex\\'")
    ;; ("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2 ))
    ;; ("\\.tex\\'" 1)
    )

其他注释掉线已经存在。现在 flymake 不适用于 html 和 xml 文件

于 2010-11-04T14:48:14.663 回答
3

在您收到的错误消息中,它告诉您找不到命令行 XML 验证工具xml。您可以通过安装兼容的 XML 验证工具来修复它(xmllint我猜这是正确的选择)。

但是,如果您真的只想为 HTML 和 XML 文件禁用 Flymake,则不必复制整个 flymake.el 文件并进行更改。只需将此行添加到您的 init 文件中:

(defun flymake-xml-init ())

这会覆盖 Flymake 使用空函数调用 HTML 和 XML 文件的函数。

于 2011-10-08T11:03:08.290 回答
3

自定义名为 的变量flymake-allowed-file-name-masks

你也可以这样做:

M-x customize-variable RET

flymake-allowed-file-name-masks RET
于 2012-09-20T21:51:23.917 回答