sublime text php 格式化,自定义sublime text 3插件 --- php文件格式化

上次写了关于sublime text 3自定义插件的步骤, 只能说起到一个抛砖引玉的作用, 并不具备多少实际功能, 这次我将结合最近工作的需要, 介绍如何将php代码格式工具

php cs fixer 集成sublime

text 3中, 作为你的插件格式化php代码

首先我们需要安装 php cs fixer,

下载 php-cs-fixer.phar

wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer

sudo mv php-cs-fixer.phar /usr/local/bin/phpcs

sudo chmod +x /usr/local/bin/phpcs

接下来验证一下是否安装成功:

phpcs

显示:

Usage:

help [options] [--] []

则表明anything OK

说一下这个插件的目标:

保存文件时自动格式化php文件

组合键格式化php文件

首先需要一个sublime command,

class MikeCommand(sublime_plugin.TextCommand):

def run(self, edit):

在 run 方法中, 调用 phpcs命令格式化php文件

class MikeCommand(sublime_plugin.TextCommand):

def run(self, edit):

view = self.view;

fileName = view.file_name();

suffix = os.path.splitext(fileName)[1][1:]

if suffix == 'php':

fix(fileName)

def fix(phpFile):

if not os.path.exists(phpFile):

return;

command = 'phpcs fix ' + phpFile;

os.system(command);

因为在keymap文件中配置过组合键:

[

{

"keys": [

"ctrl+alt+k"

],

"command": "mike"

}

]

所以当我 使用 ctrl+alt+k 时代码便自动格式化

那么如何在自动保存是去执行响应的命令呢? sublime text 3 api 提供了EventListener, 因此我们定义class 继承自sublime_plugin.EventListener, 然后监听响应的事件即可:

class AutoAlign(sublime_plugin.EventListener):

def on_post_save(self, view):

fileName = view.file_name();

suffix = os.path.splitext(fileName)[1][1:]

if suffix == 'php':

fix(fileName)

关于更多事件类型, 请参考EventListener

到现在, 一开始的两个目标都已经实现了, 我们可以看一下效果:

没有代码风格的php文件:

function getSpecsFullPermutation($spces) {

$fullPermutation = fullPerm($spces);

foreach ($fullPermutation as $key => $value) {

$ids = explode(',', $value);

asort($ids);

$fullPermutation[$key] = md5(implode(',', $ids));

}

return $fullPermutation;

}

ctrl+alt+k 或 ctrl+s后的文件:

function getSpecsFullPermutation($spces)

{

$fullPermutation = fullPerm($spces);

foreach ($fullPermutation as $key => $value) {

$ids = explode(',', $value);

asort($ids);

$fullPermutation[$key] = md5(implode(',', $ids));

}

return $fullPermutation;

}

php-cs 默认是遵循 PSR-2 的编码规范的, 但是也可以通过指定参数设置代码风格

但是这里存在另外一个问题, 所有的执行都是在主线程里面, 那么整体就会很卡, 我们需要在这种计算提取到额外的线程里面.

class HandlerThread(threading.Thread):

def __init__(self, view):

self.view = view

threading.Thread.__init__(self)

def run(self):

fileName = self.view.file_name();

suffix = os.path.splitext(fileName)[1][1:]

if suffix == 'php':

fix(fileName)

那么更改监听 ctrl+s 的实现方式:

class AutoAlign(sublime_plugin.EventListener):

def on_post_save(self, view):

thread = HandlerThread(view)

thread.start()

因为sublime text 3的api是用pyhton 3写的, 所以我们的实现都是使用的python 3.

在使用 threading.Thread, os.path.splitext, os.system时要记得引入相应的package.

import os

import os.path

import threading

至此所有的工作皆已完成, 又可以愉快的写php了!

很多时候语言只是一种工具, 重要的还是想法,思路.

我们知道我们可以创造很多新奇的东西, 但是我们却不知道idea从何而来.

只有不断的积累学习, 眼界开阔之后, 你才会看到和想到更多.才能创造属于我们的价值~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值