自定义sublime text 3插件

PHP中文网
Release: 2023-02-28 15:10:01
Original
1902 people have browsed it

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

首先我们需要安装 php cs fixer,下载 php-cs-fixer.phar

wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixersudo mv php-cs-fixer.phar /usr/local/bin/phpcssudo chmod +x /usr/local/bin/phpcs
Copy after login

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

phpcs
Copy after login

显示:

Usage:  help [options] [--] []
Copy after login

则表明anything OK

说一下这个插件的目标:

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

  2. 组合键格式化php文件


首先需要一个sublime command,

class MikeCommand(sublime_plugin.TextCommand):    def run(self, edit):
Copy after login

在 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);
Copy after login

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

[    {        "keys": [            "ctrl+alt+k"        ],        "command": "mike"    }]
Copy after login

所以当我 使用 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)
Copy after login

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

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

没有代码风格的php文件:

 $value) {        $ids = explode(',', $value);    asort($ids);        $fullPermutation[$key] = md5(implode(',', $ids));    }    return $fullPermutation;}
Copy after login

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

 $value) {        $ids = explode(',', $value);        asort($ids);        $fullPermutation[$key] = md5(implode(',', $ids));    }    return $fullPermutation;}
Copy after login

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)
Copy after login

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

class AutoAlign(sublime_plugin.EventListener):    def on_post_save(self, view):        thread = HandlerThread(view)        thread.start()
Copy after login

因为sublime text 3的api是用pyhton 3写的, 所以我们的实现都是使用的python 3.在使用 threading.Thread, os.path.splitext, os.system时要记得引入相应的package.

import osimport os.pathimport threading
Copy after login

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

很多时候语言只是一种工具, 重要的还是想法,思路.我们知道我们可以创造很多新奇的东西, 但是我们却不知道idea从何而来.只有不断的积累学习, 眼界开阔之后, 你才会看到和想到更多.才能创造属于我们的价值~

相关文章:

7款开发者最常用的Sublime text 3插件

详细介绍JavaScript开发者必备的10个Sublime Text插件的示例代码

Sublime Text3快捷键实用总结

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!