6

我正在使用 sublime text 2,我想使用插件 sublimelinter。它使用 php -l 在后台检查代码。我正在使用在 VirtualBox VM 中运行的网络服务器进行开发,网络服务器在 VM(来宾)中,并且 sublime 文本在主机上运行。

有什么办法让这两个一起工作吗?我真的很想避免在 VM 之外安装 php。

4

1 回答 1

6

我有一些在我的机器上运行良好的东西,但它似乎很脆弱。

理念

这里的想法是在主机上创建一个命令行脚本,通过 SSH 隧道将其所有参数传递给 VM 上的 PHP 调用。然后 SublimeLinter 可以调用这个脚本,就像它通常调用 PHP 二进制文件一样,从 Sublime 的角度来看,一切都将“正常工作”,而无需在您的主机上安装 PHP。

我同时使用 Windows 和 OS X 主机,所以我有两个版本的隧道脚本。请注意,在 Windows 上,您需要获取 Windows PuTTY SSH 工具,但对于 Unix 风格的主机,SSH 可能已经存在。

对于 Windows 主机

  • 下载putty工具并将它们解压缩到有用的地方,例如C:/Users/Youruser/bin/putty.
  • 使用以下内容创建批处理脚本C:/Users/Youruser/bin/php_vm_tunnel.bat

    @echo off
    C:/Users/Youruser/bin/putty/plink -l youruser -pw yourpassword 192.168.56.101 php %*
    

注意- 请务必将 plink 的路径替换为您在上面解压缩腻子的正确路径。此外,将-l-pw标志值替换为您通过 SSH 连接到 VM 时使用的用户名和密码。最后,请务必将示例中的 IP 地址替换为用于通过 SSH 连接到 VM 的 IP 地址。

对于 Unix-ish 主机(OS X、Linux 等)

  • 在以下位置创建 bash 脚本~\bin\php_vm_tunnel

    #!/usr/bin/env bash
    FIXED_ARGS='';
    for (( i = 1; i <= $# ; i++ )); do
        eval ARG=\$$i
        FIXED_ARGS="$FIXED_ARGS $(echo "$ARG" | awk '{gsub(".", "\\&");print}')"
    done
    ssh -l root 192.168.56.101 php $FIXED_ARGS
    

注意- 请务必将-l标志值替换为您通过 SSH 连接到 VM 时使用的用户名。此外,请务必将示例中的 IP 地址替换为用于通过 SSH 连接到 VM 的 IP 地址。

测试脚本

此时,您有一个脚本,该脚本应该将您传递给它的任何内容通过隧道传输到您的虚拟机。因此,如果您要在终端中进行操作,请说:

cd wherever_you_put_the_script 
php_vm_tunnel -v

您应该会看到从您的虚拟机返回的 PHP 版本信息。

Sublime Text 2 配置

现在你已经设置了这个隧道,你可以配置 Sublime Text 2 来使用它:

  • 安装Package ControlSublime Text 2 插件
  • 安装SublimeLinter插件(听起来你已经在这一点上)
  • 转到Preferences-> Package Settings-> SublimeLinter->Settings - User
  • 将此添加到配置文件中(再次替换到脚本的正确路径并注意双斜杠以正确转义反斜杠字符)并保存:

    {
        "sublimelinter_executable_map":
        {
            "php": "C:\\\Users\\\Youruser\\\bin\\\php_vm_tunnel.bat"
            "php": "/Users/youruser/bin/php_vm_tunnel"
        }
    }
    

    注意- 您只能有一个“php”语句。上面第一个是Windows版本,第二个是Unix版本。删除不需要的那个。

  • 重启 Sublime Text

如果您打开 Sublime Text 控制台(一切都按计划进行),您应该会在启动文本中看到如下内容:

SublimeLinter: php enabled (using "C:\Users\Youruser\bin\php_vm_tunnel.bat" for executable)

SublimeLinter 应该正确地检查 PHP 文件,就好像它正在调用原生 PHP 二进制文件一样。

祝你好运。

于 2012-11-26T00:10:57.993 回答