利用vim打造PHP_IDE

为啥是vim

  • vim党:

    如果你是一个vim党, 那么一切都懂得,习惯了vim,很难再回到别的编辑器或者IDE。

  • 轻量级:

    尝试过eclipse 、zend stdio等,PhpStorm同事有过分享,确实非常强大。
    但他们的缺点都是很重量级,太大、太占资源。

  • 学习成本:

    eclipse这些IDE各种快捷键、功能等都需要花不少时间去学习;

  • 自由度高:

    vim插件实在太多了, git上一大堆,实在不行还可以自己写一个;
    这个用的不爽那就换别的,可以玩的很开心- – ;

开始之前的声明

  • 难度较高:

    vim插件流本来就是有点极客的选择, 入手难度较高,新手请勿尝试

  • VIM VS Emacs/sublime/IDE:

    仁者见仁智者见智,各有优缺点, 更不用与emacs、sublime等对比了。

    IDE的优势在于开箱即用、功能强大,虽然你可能摸不到北,用不到那么强大的功能;

    VIM等就具备无限的扩展性,就是一切都需要配置,不适合新手玩;

    总之自己用的爽就行了。

  • 细节:

    我不打算详细的介绍每一个细节, 前面说了不适应新手玩; 毕竟如果你连如何安装插件

    都不懂,自己独自折腾的难度和痛苦程度简直是令人发指的; 而且最重要的一点在于每个人

    都有自己的习惯,适合自己的才是好的,”一千个vim党有一千个不同的vimrc文件”, vim配置简直

    是太私人定制了;

插件管理

安装插件很繁琐, 推荐使用Vundle 来管理,杀手级插件;

自动补全

自动补全是IDE引以为傲的功能, 毕竟有些函数名太长太难记了。

VIM实现自动补全其实多少有点不智能,基本是靠正则瞎猜,这是相比IDE确实有所不足的地方。 不过基本也算够用。

具体实现方法:

* 原生内置:

    VIM 原生内置可以使用ctrl + p ,ctrl + n 等快捷键实现上下文的自动补全;

* neocomplcache:

    neocomplcache 功能非常强大, 非常流畅;

    缺点是容易和别的插件冲突, 目前我在用的就是这货

* YouCompleteMe:

    YouCompleteMe 是一个很不错的插件,不过很悲催的对PHP没有原生支持,但据说效果也不错, 但我没有用过

* 其他:

    还有一些不错的插件;

语法高亮

没有语法高亮绝对不能活, vim默认对php有简单的高亮的, 但太弱了;

* php.vim:

    看名字就懂了,专门针对php的一个插件,很给力;

    不仅支持高亮,同时还附带语法检查的功能;

语法检查

* php -l:

    这个其实是php自己的语法检查,很弱,

    不推荐用,可以用插件别的搞定这个事情;

* php.vim:

    前面说过了,保存文件的时候会自动检查语法,少个";"什么的都会在保存文件的时候报错提示滴;

tag跳转

这个在读代码或者做重构以及大项目使很用;

同样的相比IDE,vim的插件实现功能上稍微不足, taglist 会在极个别情况下不同文件中存在同名方法等会跳转错误 - -;

一般手动更新下tag文件就搞定了。

* taglist + ctags:

    配置略微麻烦, 但配置完了定期更新下tags文件就好了;嫌麻烦的还可以写脚步自动更新,也可以

    在拉最新主干代码使自动刷新下tags文件;

* cscope:


    功能太强大了以至于上手难度远超taglist(视vim版本和编译参数有可能需要重新编译vim);

    我目前使用较少,毕竟一般情况下taglist就足够了;

代码审查

手误经常还是有的,所以必要的代码检查还是有用的;

这点是我略微有点吐槽的地方,vim 下似乎没有一个很给力的插件可以检查到php中使用了未定义的变量。

这个我是有教训的, 手误拼错了变量名导致线上bug的情况还是有的。

* php_localvarcheck:

    这个可以检查代码中使用了未定义的变量, 有的话会变红提示;

    但这货只支持在函数块中检查,不在函数中的就无能为力了; 

    一般情况下够用; 目前没发现更好的替代品了

* vim-phpqa:

    大型武器来了,看名字就知道了,非常牛逼;

    可以支持语法检查、代码风格审查、设计模式检查、代码命名审查、未使用的代码审查...

    同时还可以自定义其他规则;


    其实它是后台调用了phpcs和phpmd来实现的;

    phpcs 是 PHP_CodeSniffer的简称,是PEAR中的一个用来检查PHP代码是否符合编码规范的扩展包;

    phpmd 是 PHP Mess Detector 的简称,可以类比java的PMD。


    选自己合适的标准和rules就好了, 太苛刻的话你会疯的; 我一般设置为:


    <pre>

        let g:phpqa_codesniffer_args = "--standard=PSR2"

    </pre>

debug

debug目前我没在用;

* Xdebug:


    后续补充使用体验;

Leave a Reply

Your email address will not be published. Required fields are marked *


To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax