2010-11-04 29 views
25

這是我flymake設置在.emacs文件:如何禁用的Emacs Flymake爲HTML模式

(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:無法啓動語法檢查過程'xml'和args(val /home/huseyin/vipsatis/templates/cancellation/base_flymake.html) :搜索程序:沒有這樣的文件或目錄,xml。 Flymake將被關閉

所以我想把它關閉除py文件之外的任何東西。可能嗎?對於有同樣問題的人,我想解釋一下錯誤信息:Flymake使用xmlstarlet進行xml和html驗證,並嘗試將其稱爲「xml val ......」但它不得不稱之爲「xmlstarlet val ....」來解決這個問題,你必須找到flymake.el文件,並用xmlstarlet更改xml調用。 )

+0

我已經按照下面無濟於事的所有建議。 Flymake模式在我的html緩衝區中仍然有效,當我使用django標籤時這真的很煩人。有小費嗎?我在運行emacs24的Snow Leopard上。 – jrhorn424 2012-02-22 06:38:17

回答

23

刪除列表中的HTML條目:

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

當我嘗試這個,我得到錯誤符號的值作爲變量是void:flymake-allowed-file-name-masks' – 2013-01-10 20:27:37

+1

雖然我不知道爲什麼,放行'.emacs'結尾處不會有錯誤。 – RNA 2013-01-30 07:28:31

6

OK我明白了。這裏是我所做的: 首先我發現了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) 
    ) 

其他評論outed的線已經在那裏。現在flymake不會爲HTML和XML文件的工作

+1

您不必修改.el文件來實現此目的。你可以在你自己的emacs.el(或者等價的)中設置這個變量。 – Cheeso 2010-11-07 14:57:18

+0

所以如果我理解正確的話,我必須把代碼放在emacs.el文件中。所以它會覆蓋flymake.el文件中的一個。我會盡力謝謝你。 (如果我錯了,請糾正我) – yilmazhuseyin 2010-11-07 21:43:56

3

在錯誤消息你收到它,告訴它不能找到命令行XML驗證工具xml。你可以通過安裝一個兼容的XML驗證工具來解決它(xmllint是我猜的正確選擇)。

但是,如果您真的只想禁用Flymake for HTML和XML文件,則不必複製整個flymake.el文件並對其進行更改。只需添加這行你的init文件:

(defun flymake-xml-init()) 

這將覆蓋Flymake呼籲與空功能HTML和XML文件的功能。

+1

+1不知道爲什麼你是downvoted,這似乎正常禁用其他模式[如java](https://github.com/mostafah/conf/commit/1e4c545d3d83372a25c8649cc222a529f7e4a78e),即使它不適合我。 – jrhorn424 2012-02-22 16:28:23

+0

我用'(defun flymake-simple-make-init())'一次禁用所有基於make的flymake模式。非常便利。 – 2012-05-21 04:08:05

2

自定義名爲flymake-allowed-file-name-masks的變量。

你可以像下面這樣做太:

M-x customize-variable RET 

flymake-allowed-file-name-masks RET 
相關問題