sublime Text 3 如下簡稱ST3是一個很是性感的文本編輯器,不少前端開發者在使用它。無插件,不神器,插件的使用可使開發更方便快捷。目前社區裏提供了各類各樣的插件,在搜索裏一搜就是各種插件的使用推薦,即便有這麼多的插件,有時也不能知足咱們的開發須要,今天就跟你們聊一下前段時間實現的(QcmsAux)插件的開發過程,但願給打算寫插件的小夥伴們提供參考。php
ST3是經過C++開發的,它的插件系統是經過Python來編寫的,因此你必定要會Python,不必定很是精通,可是必定要了解,用到哪塊兒知道去哪兒查。css
推薦:Python基礎教程 作爲入門瞭解。html
Sublime Text中內嵌了Python解釋器。ST3中的Python和系統中的python是相互獨立的。前端
我使用的是OSX系統,系統中的pythone版本是node
python -V // Python2.7.10
在這個控制檯中查看,當前ST3中sublime的信息python
sublime.version() // '3126' sublime.platform() // 'osx'
查看ST3中python的版本git
platform.python_version() //'3.3.6'
ST3幾乎全部須要的文件都保存在Data目錄下,不一樣的操做系統路徑不一樣:es6
刪除這個目錄以前使用的插件和自定義的一些配置都會被同時刪除,再次打開ST3,這個目錄會被自動建立。github
Data目錄下的Packages目錄是一個很是重要的目錄,關於編程和標記語言的全部支持都保存在這裏。web
經過Sublime Text -> Preferences -> Browse Packages…能夠打開該目錄。
User目錄在Packages目錄下,用於保存自定義plugins,snippets, macros(宏)。插件配置等都存在這個目錄下。插件更新時,這個目錄裏的內容不會被修改。
Tools -> Developer -> New Plugin, 使用這個命令能夠建立一個插件示例,保存該文件,默認會保存在User目錄下,默認文件名是 untitled.py
經過Package Control 安裝的插件有的以源碼的形式存入Packages目錄,有的則以.sublime-package
結尾的壓縮包存在在上層目錄的Installed Packages
文件夾下。
ST3將會3個地方依次加載插件:
根據約定,不會加載更深層次嵌套的文件,也就是說若是把 untitled.py
放在packages目錄下會生效,可是若是放在User/new/下就不會生效。下面我直接放Packages/Example/
下,文件名稱改成Example.py
,這裏建議文件名和目錄名保持一致。
我本機的目錄/Users/rongl/Library/Application Support/Sublime Text 3/Packages/Example/
打開控制檯,看到reloading plugin example.Example
,說明插件已經被自動加載了,而後運行view.run_command('example')
,以下會在第一行插入Hello, World!
,這樣這個簡單的插件就執行成功了。
Hello, World!import sublime import sublime_plugin class ExampleCommand(sublime_plugin.TextCommand): def run(self, edit): self.view.insert(edit, 0, "Hello, World!")
到目前爲止已經完成了簡單的插件的編寫執行。在上面的示例中:
Command
結尾,以前的部分爲命令名,其中首字母要大寫。執行命令時則採用下劃線風格的拼寫,view.run_command
中傳入example
,若是爲MyExampleCommand
,則傳入my_example
。示例的效果就是在point位置插入content.
sublime.load_settins
加載插件的配置文件,配置文件內容格式爲jsop,分User和default兩種,分別位於Packages/User/<setting-name>
和Packages/<package-name>/<setting-name>
中,前者覆蓋後者。
# 獲取配置信息 settings = sublime.load_settins("QcmsAux.sublime-settings") settings.get('key') # 獲取頁面內容 content = view.substr(sublime.Region(0, view.size())) # 往接口post信息,urllib發送數據和header僞代碼 import urllib.parse import urllib.request url = 'http://localhost/login.php' user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' values = { 'act' : 'login', 'login[email]' : xx@xx.com', 'login[password]' : '123456' } headers = { 'User-Agent' : user_agent } data = urllib.parse.urlencode(values) req = urllib.request.Request(url, data, headers) response = urllib.request.urlopen(req) the_page = response.read() print(the_page.decode("utf8"))
2.指定瀏覽器打開url
# MacOS CHROME_PATH = 'open -a /Applications/Google\ Chrome.app %s' # Windows # chrome_path = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe %s' # # Windows # chrome_path = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe %s' url = "http://www.so.com" webbrowser.get(CHROME_PATH).open(url,new=1)
ST3已經提供了很是方便的異步執行耗時任務的方法set_timeout_async
sublime大部分的配置均可以經過json文件來完成,鍵盤綁定也同樣。不過它的鍵盤綁定是區分系統的,因此基本上要創建3個文件,並且命名爲Default (Windows).sublime-keymap
, Default (Linux).sublime-keymap
和 Default (OSX).sublime-keymap
print xxxx
sublime.error_message("hello world")
打開的 sublime text 窗口
表示一個文本緩衝的視圖,能夠認爲是打開的一個 tab。
繼承自 sublime_plugin.TextCommand 的命令, Edit 爲第一個參數。 打開一個 view 之後必需要指定 Edit 才能真正的 insert 字符。須要 view.begin_edit 開始使用編輯區,使用完要 end_edit 。根據 sublime 3 API 的說法,只能繼承,不能被建立。
表示緩衝區的一個區域。有兩個init類型的屬性a和b。Region.a表示區域開始的點,Region.b表示區域結束的點。
view 的 find_all 等能夠匹配一系列的 region 出來
表示選擇的區域。函數sublime.View.sel()返回的類型就是Selection,表示目前選中的全部區域。Selection.add(Region)方法能夠添加選擇區域。
int類型,表明緩衝區的一個位置。能夠經過sublime.View.rowcol(point)將point轉化爲行列信息(int,int)。或經過sublime.View.text_point(row,col)將行列信息轉化爲point。
這裏看到 line 返回的是鼠標所在行的起始字符數,從文件頭開始,算 UTF8 字符,一箇中文也是一個字符,不管光標在何處,都是這樣的結構(行開始字符數, 行結束字符)
mark = self.view.sel()[0] line = self.view.line(mark.a) sublime.status_message("hickdebug " + time.strftime("%Y-%m-%d %X - ") + str(line))
用內置的expand_selection命令,to參數設置爲brackets 每一個css規則區域內容就能夠選中了
self.view.run_command("expand_selection", {"to": "brackets"})
這個方法得不到shell命令的輸出
import os os.system('ls') # 執行ls命令
這個方法能獲得命令執行後的結果是一個字符串,要自行處理才能獲得想要的信息
import os str = os.popen("ls").read() a = str.split('\n') for b in a: print b
能夠很方便的取得命令的輸出(包括標準和錯誤輸出)和執行狀態位
commands.getstatusoutput(cmd) 返回(status,output)
import commands a,b = commands.getstatusoutput('ls') print a # a是退出的狀態 # 0 print b # b是輸出結果 # 執行ls命令
commands.getoutput(cmd) 只返回輸出結果
import commands b = commands.getoutput('ls') # 執行ls命令
commands.getstatus(file) 待補充
使用subprocess模塊能夠建立新的進程,能夠與新建進程的輸入/輸出/錯誤管道連通,並能夠得到新建進程執行的返回狀態。使用subprocess模塊的目的是替代os.system(),os.popen(),commands*等舊的函數和模塊。
subprocess.call(command,shell=True)
import subprocess subprocess.call('ls',shell=True) # 執行ls命令
subprocess.Popen(command,shell=True)
import subprocess subprocess.Popen('ls',shell=True) # 執行ls命令
subprocess.Popen(command,stdout=subprocess.PIPE,shell=True)待補充
若是command不是一個可執行文件,shell=True是不可省略的。
shell=True表示在shell下執行command
view.settings().get('syntax')
返回當前文件格式,常見的有
if int(sublime.version()) > 3000 print("sublime3")
判斷sublime的版本信息
['node', '/Users/guopeipei/Library/Application Support/Sublime Text 3/Packages/JSLint/linter.js', '--bitwise', '--browser', '--es6', '--eval', '--for', '--fudge', '--node', '--this', '/Users/guopeipei/project/M_so_com/m_so/resource/js/result/scrollTab.js']
Running node /Users/guopeipei/Library/Application Support/Sublime Text 3/Packages/JSLint/linter.js --bitwise --browser --es6 --eval --for --fudge --node --this /Users/guopeipei/project/M_so_com/m_so/resource/js/result/scrollTab.js
sublime.View.find_by_class(point, forward, classes, <separators>)
經過Class查找,sublime提供的Class
sublime.View.find_by_selector(selector)
根據語法選擇器查找 ,selector是一個字符串。Scope Naming
/Applications/Sublime Text.app/Contents/MacOS/sublime.py