【问题标题】:How to disable Emacs-Flymake for html mode如何为 html 模式禁用 Emacs-Flymake
【发布时间】:2010-11-04 09:08:24
【问题描述】:

这是我在 .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 文件时,我总是收到以下错误 错误(flymake):Flymake:无法使用 args 启动语法检查过程“xml”(val /home/huseyin/vipsatis/templates/cancellation/base_flymake.html):正在搜索程序:没有这样的文件或目录,xml。 Flymake 将被关闭

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

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

【问题讨论】:

  • 我已按照以下所有建议无济于事。 Flymake 模式在我的 html 缓冲区中仍然处于活动状态,这在我使用 django 标签时真的很烦人。有小费吗?我在 Snow Leopard 上运行 emacs24。

标签: emacs flymake


【解决方案1】:

从列表中删除 HTML 条目:

(delete '("\\.html?\\'" flymake-xml-init) flymake-allowed-file-name-masks)

【讨论】:

  • 当我尝试这个时,我得到了错误Symbol's value as variable is void: flymake-allowed-file-name-masks
  • 虽然我不知道具体原因,但将行放在.emacs 的末尾不会出现错误。
  • @RNA 这可能是因为flymake-allowed-file-name-masks 在加载 flymake 包创建它之前不存在。通过将删除命令放在 .emacs 文件的末尾,您就可以给包时间来创建列表。
【解决方案2】:

好的,我明白了。这是我所做的: 首先我找到了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 文件

【讨论】:

  • 您无需修改​​ .el 文件即可实现此目的。您可以在自己的 emacs.el(或等效项)中设置变量。
  • 所以如果我理解正确,我必须将代码放在 emacs.el 文件中的帖子中。所以它会覆盖 flymake.el 文件中的那个。我会试试的,谢谢。 (如果我错了,请纠正我)
【解决方案3】:

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

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

(defun flymake-xml-init ())

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

【讨论】:

  • +1 不知道为什么你被否决了,这对于禁用其他模式 like java 来说似乎很正常,即使它对我不起作用。
  • 我使用(defun flymake-simple-make-init ()) 一次性禁用所有基于make 的flymake 模式。非常方便。
【解决方案4】:

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

你也可以这样做:

M-x customize-variable RET

flymake-allowed-file-name-masks RET

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多