我正在使用 sublime text 2,我想使用插件 sublimelinter。它使用 php -l 在后台检查代码。我正在使用在 VirtualBox VM 中运行的网络服务器进行开发,网络服务器在 VM(来宾)中,并且 sublime 文本在主机上运行。
有什么办法让这两个一起工作吗?我真的很想避免在 VM 之外安装 php。
我正在使用 sublime text 2,我想使用插件 sublimelinter。它使用 php -l 在后台检查代码。我正在使用在 VirtualBox VM 中运行的网络服务器进行开发,网络服务器在 VM(来宾)中,并且 sublime 文本在主机上运行。
有什么办法让这两个一起工作吗?我真的很想避免在 VM 之外安装 php。
我有一些在我的机器上运行良好的东西,但它似乎很脆弱。
这里的想法是在主机上创建一个命令行脚本,通过 SSH 隧道将其所有参数传递给 VM 上的 PHP 调用。然后 SublimeLinter 可以调用这个脚本,就像它通常调用 PHP 二进制文件一样,从 Sublime 的角度来看,一切都将“正常工作”,而无需在您的主机上安装 PHP。
我同时使用 Windows 和 OS X 主机,所以我有两个版本的隧道脚本。请注意,在 Windows 上,您需要获取 Windows PuTTY SSH 工具,但对于 Unix 风格的主机,SSH 可能已经存在。
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 %*
-l
和-pw
标志值替换为您通过 SSH 连接到 VM 时使用的用户名和密码。最后,请务必将示例中的 IP 地址替换为用于通过 SSH 连接到 VM 的 IP 地址。
~\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 来使用它:
Package Control
Sublime 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 控制台(一切都按计划进行),您应该会在启动文本中看到如下内容:
SublimeLinter: php enabled (using "C:\Users\Youruser\bin\php_vm_tunnel.bat" for executable)
SublimeLinter 应该正确地检查 PHP 文件,就好像它正在调用原生 PHP 二进制文件一样。
祝你好运。