我根本不是一个 lisp 人,但我的主要脚本环境存在于 emacs 上,当文件上没有 .py 扩展名时,我需要一些帮助才能让我的 flymake/pyflakes 运行。因为我工作中的一些脚本没有 .py 扩展名。
当我读取/编码具有 .py 扩展名的文件时,这非常适合 pylint、pep8、pychecker 等。
;; flymake for python
(add-to-list 'load-path "~/.emacs.d/plugins/flymake")
(when (load "flymake" t)
(defun flymake-pylint-init (&optional trigger-type)
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-with-folder-structure))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name)))
(options (when trigger-type (list "--trigger-type" trigger-type))))
(list "~/.emacs.d/plugins/flymake/pyflymake.py" (append options (list local-file)))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pylint-init)))
(add-hook 'find-file-hook 'flymake-find-file-hook)
;; flymake help on minibuffer
(defun my-flymake-show-help ()
(when (get-char-property (point) 'flymake-overlay)
(let ((help (get-char-property (point) 'help-echo)))
(if help (message "%s" help)))))
(add-hook 'post-command-hook 'my-flymake-show-help)
当没有 .py 扩展名时,我试图让这个工作初始化片段。我用 python-mode-hook 包装了上面的代码,并将 \.py\ 部分更改为 \.*\ 之类的东西。
然而,这不仅为 python 文件调用 flymake-pylint-init 函数。它称它为在 emacs 中打开的任何东西。
顺便说一句,我无法在无扩展文件上使用 mx flymake-mode,它没有打开那个次要模式。
我很想知道让它工作的任何想法。谢谢!