修复Cygwin-Emacs flycheck模式错误,在运行xamp-php的win7中查找/tmp和phpcs


Fix Cygwin Emacs flycheck-mode errors finding /tmp and phpcs in win7 running xampp php

错误问题

已经使用Emacs几年了。最近决定尝试前奏曲版本(链接到前奏曲(。安装进行得很顺利(在带有Cygwin的Win7上(,但已经有几天无法使用php错误检查了。我想让php错误检查与Flycheck一起工作。它现在对我来说不起作用。

目前,当我破坏php脚本时,flycheck.el(@ln2551(返回2个错误:

Checker php returned non-zero exit code 1, but no errors from output: 
Could not open input file: /tmp/flycheck4728Btc/myPhpFile.php
Checker definition probably flawed.
Checker php-phpcs returned non-zero exit code 1, but no errors from output:
Could not open input file: /cygdrive/c/xampp/php/phpcs
Checker definition probably flawed.

调试信息

1( 。Flycheck在Cygwin根/tmp目录中写入缓冲区副本。请参见flycheck.el(@ln800((:该文件存在,并且是已确认可读的缓冲区副本;它的文件权限没有问题(无论是chmod 777还是700,都有相同的错误(。

2( 。Phpcs位于c:''xamp/php/Phpcs,可以通过命令行(cmd.exe和cygwin-bash(调用,也可以不使用c:''/path;但不适用于cygdrive路径。[这不起作用$/cydrive/c/xamp/php/phpcs-h(带或不带.bat扩展名(。]我也确认phpcs安装良好(它可以从命令行运行(,并且这里没有文件权限问题。我已根据flycheck.el@ln2895-2903flychech-phpcs-standard变量设置为c:/xampp/php/phpcs,但尚未找到引发错误的条件。

[注意:当我尝试重命名phpcs文件并指定phpcs.bat时,这个错误确实消失了,但我不确定是否找到了检查程序,因为写入tmp文件的错误仍然阻碍了任何结果。此外,这也破坏了我对phpcs命令的命令行使用。]

可以肯定的是,这里是我的php-v:

$ php -v
PHP 5.4.7 (cli) (built: Sep 12 2012 23:48:31)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans

这是我的phpcs版本:

$ phpcs --version
PHP_CodeSniffer version 1.3.3 (stable) by Squiz Pty Ltd. (http://www.squiz.net)

在我的.bash_profile中有这个别名alias phpcs="c:/xampp/php/phpcs"

和我PATH上的c:'xampp'php

研究

我一直在浏览phpcs、cygwin和flycheck.el,包括自定义flycheck phpcs标准行的说明,但在这个问题上没有取得任何进展。

我不确定这是否与上的评论有关flycheck.el@800-824(defun flycheck-temp-file-system (filename prefix)。这些是关于用Emacs破解压缩错误的评论。不管怎样,

如何解决此问题

有什么意见或想法可以进一步测试吗?有人和Cygwin一起在win7上进行flycheck吗?这是操作系统编译问题吗?脚本中的目录路径在哪里?

这不是flycheck的错误

[感谢存储库所有者给了我一个明确的答案]。

CCD_ 7不采用到CCD_ 8的路径。我错了。一旦我了解到这一点,文档的上下文就更有意义了。

实际情况是,当使用flycheck时,Cygwin环境路径安装并不是正在运行的。Phpcs本身有一个unix类型的路径tmp/flycheck23423.buffer-copy,无法运行它!

作为对这一新消息的回应,我试图看看是否可以让窗口读取这些路径。当然,好消息是你可以!这个超级用户QA很有帮助。

这就是修复它的方法

1( 将windows连接工具下载到一个windows文件夹,您将在cmd.exe中从该文件夹运行它。编辑:请参阅注释,应在win7中使用mklink。

2( C:''your''cmd''path>junction 'cygdrive'c '

... this will output ...
Created: C:'cygdrive'c
Targetted at: C:'

3( C:''your''cmd''path>junction 'tmp C:'cygwin'tmp

... this will output ...
Created: C:'tmp
Targetted at: C:'cygwin'tmp

现在,在emacs中打开一个php脚本并将其破坏。它可以工作!它是phpcs能够找到/tmp/。检查它,并返回错误消息。凉的