我目前正在使用以下代码在emacs中连接flymake和Pyflakes:
(defun flymake-create-temp-in-system-tempdir (filename prefix)
(make-temp-file (or prefix "flymake")))
Run Code Online (Sandbox Code Playgroud)
然后我将此功能传递给flymake-init-create-temp-buffer-copy.(摘自http://hustoknow.blogspot.com/2010/09/emacs-and-pyflakes-using-tmp-directory.html).
这段代码工作正常,直到昨天.当我访问某些Python文件时,我收到以下错误:
switched OFF Flymake mode for buffer admin.py due to fatal status
CFGERR, warning Configuration error has occured while running
(pyflakes ../../../../../../../tmp/flymake28459SVv)
Run Code Online (Sandbox Code Playgroud)
为什么flymake会将看似错误的文件名传递给pyflakes?我希望它传递类似"/ tmp/efe234234"的东西,我没有修改任何tmp目录设置.
我不记得最近为Ubuntu更新了emacs,也无法想到任何可能导致这个问题陷入困境的事情(.emacs文件版本化).
我能想到的唯一问题是,这是一个嵌套到目录中的嵌套目录,这个目录符号链接到〜/ Dropbox目录中的目录,但这种情况不会以类似的方式发生在其他符号链接中.
我该如何解决这个问题?
UPDATE
我做了一些调试,现在我发现它没有传递正确的路径作为参数.它需要在路径中插入一个更多的父目录才能使它工作,这让我觉得它因为符号链接而变得混乱.
这是一个示例shell会话,以显示我的意思.我是从正确的相对目录中这样做的:
$ pyflakes ../../../../../tmp/flymake13382xHi
../../../../../tmp/flymake13382xHi: No such file or directory
Run Code Online (Sandbox Code Playgroud)
这就是flymake试图运行的命令.如果我改变它:
$ pyflakes ../../../../../../tmp/flymake13382xHi
Run Code Online (Sandbox Code Playgroud)
我没有输出(如预期的那样).注意路径中的额外"..".
我如何让flymake通过绝对路径而不是这些疯狂的相对路径?
更新2
我已经把一切都搞定了.基本上有这个功能:
(defun flymake-pyflakes-init ()
; Make sure it's not a remote buffer or flymake would not work
(when (not …Run Code Online (Sandbox Code Playgroud) 当我输入 Flymake 时,光标会稍微悬起。这有点烦人。
我想知道是否有一种方法可以告诉 Flymake 在每次更改某些内容时不要解析和编译,只需在保存时执行即可。
还有其他建议吗?
谢谢,
是否可以使用flymake / flycheck在Emacs中使用JSON模式验证JSON文件?什么是检测与模式相关的错误并将其与适当的错误消息和位置通知给Emacs的最佳验证器?
以下是我init.el与 Flymake 相关的片段:
(add-hook 'python-mode-hook
(lambda ()
(unless (eq buffer-file-name nil) (flymake-mode 1)) ;dont invoke flymake on temporary buffers for the interpreter
(local-set-key [f2] 'flymake-goto-prev-error)
(local-set-key [f3] 'flymake-goto-next-error)
(local-set-key [f4] 'flymake-display-err-menu-for-current-line)
(hs-minor-mode)
(orgtbl-mode)
(outline-minor-mode -1)))
...
;;===== PyFlakes
;; code checking via pyflakes+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 "pychecker" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pyflakes-init)))
(mapcar (lambda (hook) (add-hook 'find-file-hook hook))
(list 'flymake-find-file-hook))
(unload-feature 'flymake) ; …Run Code Online (Sandbox Code Playgroud) 是否有可能在Emacs中的PHP文件中识别未使用的变量?
使用其他语言,可以使用flymake等工具.我已经启用了Flymake,以示对我的PHP文件的语法错误的飞行,但它仍然是令人沮丧的是PHP逻辑错误,有时由于类似的情况:
<?php
$foo = whatever();
$bar = something($fo);
...
Run Code Online (Sandbox Code Playgroud)
请注意$ foo上的错字将导致开发人员的头痛和他过度使用咖啡.
更新:
在Pascal和Gabor的提示之后,我在php.ini中设置:
error_reporting = E_ALL | E_STRICT
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行php时,我现在能够看到有关未定义变量的通知(带或不带-l选项):
> php -r '$foo = 3; echo $fo;'
PHP Notice: Undefined variable: fo in Command line code on line 1
> php -r '$foo = 3; echo $fo;' -l
PHP Notice: Undefined variable: fo in Command line code on line 1
Run Code Online (Sandbox Code Playgroud)
这就是我目前在.emacs中使用的内容.它完全没有解析错误,但我仍然无法匹配通知,但:(
;; FlyMake for Php(需要'flymake)
(defun flymake-php-init ()
"Use php to check the syntax …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用CoffeeScript运行flymake模式.出于某种原因,当我调用flymake模式时,我收到此消息(它在错误日志中的所有行上):
Flymake:运行时出现配置错误(/ usr/bin/coffee /tmp/flymake16162knP.coffee).Flymake将关闭
我曾经以为它找不到coffeescript命令所以我给它完整的路径,但截至目前我无法让它工作.
在编写简单的一个文件C++代码时,我通常直接调用g ++.默认情况下,Flymake似乎假设存在带有检查语法目标的Makefile.如何配置Flymake直接调用g ++,例如:
g++ -c a.cpp
Run Code Online (Sandbox Code Playgroud)
如果可以修改答案以包含编译器标志,那就更好了
非常感谢
在文本模式控制台Emacs会话中运行Flymake模式,如何告诉Flymake 在文本控制台中显示其消息而不是尝试与X通信?
Emacs 23运行在各种环境中,包括Debian和Ubuntu.
我已经flymake-gui-warnings-enabled开始了nil,但当我flymake-display-err-menu-for-current-line抱怨时:
X windows are not in use or not initialized
Run Code Online (Sandbox Code Playgroud)
对,我知道; Emacs在没有X的情况下运行SSH连接.这就是我禁用Flymake使用GUI的原因.我如何告诉Flymake 不要尝试使用GUI,而是说出它在Emacs窗口中要说些什么?
根据这个问题,为了让Flymake工作,你必须在makefile中添加一个特殊的目标.我不想这样做.有没有替代Flymake,不要求你搞乱makefile?
我正在考虑在 Emacs 26 重写后从 Flycheck 切换回 Flymake。Flymake 让我困扰的一件事是它在模式线上占用了多少空间。它有一个字符串Flymake加上结果。这似乎是一件愚蠢的事情,但这只是 80 字符帧上模式行的 10%,只是为了一个名称!我想在模式行上看到很多重要信息,因此我尝试删除对我没有帮助的内容 - 我知道缓冲区中启用了哪些次要模式等,因为我配置了它们!就我个人而言,我宁愿根本不看到名称,而只看到结果,或者最多看到F或FM。
我可以用来diminish完全摆脱模式行信息,但我当然不希望这样:我希望能够看到缓冲区的状态。
我查看了flymake.eldefun flymake--mode-line-format,发现这个字符串似乎不是可配置的,或者根本不容易更改。
有人对此有什么想法吗?