在 emacs 上使用 flycheck 即时符合 PEP8

Conform on-the-fly to PEP8 using flycheck on emacs

我将 flycheck 解压为 ~/. 并将以下行放入 ~/.emacs:

;; (package-initialize)
(setq load-path (cons "~/flycheck-20170415.1006" load-path))
(require 'flycheck)
(add-hook 'after-init-hook #'global-flycheck-mode)

启动 Emacs 24.5.1 我得到:

File error: Cannot open load file, no such file or directory, let-alist

使用 Emacs 25.1.1 我得到:

File error: Cannot open load file, No such file or directory, dash

(如果我取消注释 (package-initialize),这些错误不会改变。Emacs 25 现在插入 (package-initialize),促使我们这些设置较长的人适应。)

我的(后续)目标是使 Python 代码即时符合 PEP8。上述问题解决后,我将添加

(setq exec-path (append exec-path '("/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin")))

到这个简短的 ~/.emacs/opt/..2.7/bin 是 MacPorts 放 flake8 的地方),但在我指定编程语言之前显然有一个问题。

更新

这比我想象的要痛苦得多。 Flycheck 在通过包安装方面很笨拙,将 here 描述的步骤与我通常的 ~/.emacs 结合起来会导致臭名昭著的

load-with-code-conversion: Symbol’s value as variable is void: <!DOCTYPE

错误。 (我很确定我没有 HTML 文件隐藏在 .el 扩展名下。)

更新2

呃..我纠正了!一些 dash.el 进入了我常用的 elisp 目录,flycheck 依赖于它,但它确实是一个 HTML 文件。

Flycheck 取决于 dash, let-alist, and seq.

下载文件

  84766  dash.el
 381142  flycheck.el
   6136  let-alist.el
  17589  seq-24.el
  17684  seq-25.el
   1540  seq.el

并将它们放入~/.concise-elisp。 seq 需要三个文件,因为它有 Emacs 24 和 25 的替代实现。

在您的 ~/.emacs 中输入以下行:

;; Even if you are not using packages, you need the following
;; commented-out line, or else Emacs 25 will insert one for you.
;; (package-initialize)

(setq load-path (cons "~/.concise-elisp" load-path))
(require 'flycheck)
(add-hook 'after-init-hook #'global-flycheck-mode)
(setq exec-path (append exec-path '("/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin")))

最后一行指向 MacPorts 应该放置的位置 flake8。 Flake8 是 flycheck 委托 PEP8 检查的程序之一。

下一个练习:仅针对 Python 挂钩 flycheck(也许 C/C++/Java/JS/..)。特别是,不要担心使 elisp 文件符合标准。根据需要有选择地激活 flycheck 语言。