0

EmacsWiki 以及其他来源提供了一种将 Python 检查添加到 Flymake 的方法:

(defun flymake-pylint-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 "epylint" (list local-file)))

为什么使用local-file作为相对文件名有用或可取?我改为使用:

(defun flymake-flake8-init ()
  (unless (file-remote-p default-directory)
    (let ((temp-file (flymake-init-create-temp-buffer-copy
                      'flymake-create-temp-with-folder-structure)))
      `("flake8" ("--max-complexity=10" ,temp-file)))))

它似乎适用于 absolute temp-file

4

1 回答 1

1

我也很困惑这个代码片段。但至少它是错误的,并且在工作目录由符号链接路径名表示的情况下会导致错误。在这种情况下,elisp 函数buffer-file-name只返回当前缓冲区的符号链接路径名,而不是真正的路径名。temp-file但是,它是 flymake 临时文件的真实路径名。所以temp-file和 的值(file-name-directory buffer-file-name)其实是不一致的。这种差异使相对路径名不正确。

于 2014-03-14T15:19:52.290 回答