Sublime Text 3 插件的漢化、開發、發佈方法教程

轉載地址:https://my.oschina.net/theforever/blog/136554

作者:碧海情天-趙亮(theforever)

    前言:這個教程原本是分爲三個部分的系列教程,現在合三爲一,內容較多,請耐心閱讀或根據文章目錄挑選感興趣的部分跳躍閱讀。之所以合併和重新編輯,就是爲了方便大家一次性觀看和保存,在重新編輯過程中,修正了一些格式上的小問題。

    Sublime Text(以下簡稱ST)是一個近年推出的編輯文本和程序代碼的優秀工具。只要一打開,你就會意識到它和以往的編輯工具的不同,感覺到它在界面安排上的先進性,更美觀也更貼心。如果再通過它的中英文介紹材料簡單瞭解一下它的特性,你就會發現,這是一個在以往的文字和代碼編輯器基礎上,收集了衆多用戶最迫切需要的一些實際需求並加以實現的讓你驚喜的編輯器。功能貼心,界面時尚,這就是它首先能抓住你的特色,接下來你還會發現它有很多非常有用的插件,包括針對各種編程語言的語法補充和提示、zencode、格式化,以及通用的一些功能插件,而所有這些插件都是開放代碼的,可查閱學習,也可根據需要進行修改。而且雖然功能強大,ST本身的安裝文件體積還不到十M,在低端機上運行也很流暢。所以這絕對是值得你擁有的編輯工具。 
    關於使用方法和熱鍵介紹,以及插件安裝方法,都有不少專門的文章介紹,可以搜索閱讀。

    本教程主要講解:ST3插件的漢化、開發、發佈方法。 
    適用人羣:需要實現徹底漢化的普通用戶;想要了解插件開發和發佈方法脈絡的高級用戶和編程愛好者。

一、漢化

    在漢化方面,幾乎其它全部文章都只介紹使用現成的漢化包。這固然方便,但解決不了所有問題。先不提版本更新和漢化包更新的時間差,單說你所安裝的一些插件,由於它們常常要額外添加英文菜單項,所以就會導致漢化不完全的現象,不僅是它們添加的菜單自身,還包括ST的頂級菜單都常常會重新覆蓋顯示爲英文。因爲漢化包只包括基本的ST功能菜單,它既不知道你還會安裝哪些插件,更不可能預先把那些插件產生的菜單項目漢化進去,因爲那會生成大量沒有實際實現的無用菜單,何況未知的插件還會不斷涌現,對於它們可能產生的菜單項目其實是根本無法猜測的。

    所以瞭解插件包的機制,學會手工對插件甚至ST漢化,會讓你掌握主動,不需等待靠人,就能解決問題。

    1.1 ST主體的漢化

    首先從漢化ST主體說起:

    1、在ST的安裝文件夾下有個 Packages 文件夾,進入這個文件夾,你可以看到裏面文件都是以 sublime-package 爲擴展名的,這表示的就是ST插件包。其中很多文件以編程語言名稱作爲文件名,這些是語法文件,是語法高亮和自動補全的參考。但這個文件夾並非只有這些,還包括默認的主題方案(theme)以及更重要的 Default.sublime-package文件,我們要漢化的菜單文件就包含在裏面。

    2、接下來你自然需要知道怎麼把菜單文件弄出來進行翻譯然後讓它生效了。sublime-package這個擴展名並非一種專門的物理文件格式,而是一種邏輯上的文件分類表示,它的實際文件格式其實是ZIP(如果你的軟件經驗夠多,會在不少軟件中看到類似的用法),所以只要你把這個擴展名改成ZIP,就可以用任何支持ZIP的解壓軟件解壓成一個文件夾,內含擴展包中所有文件。

    3、在這些文件中找到擴展名爲sublime-menu的幾個文件,用文本編輯器打開,可以看到所有菜單項都在裏面。其中 "caption": "XXXX" 就代表菜單顯示的名稱。除了 { "caption": "-" } (表示菜單分組間隔線)不要動之外,其餘的caption後面的英文用漢語替換即可。

    注意:帶有"mnemonic": "某字母"的,表示該菜單的鍵盤訪問鍵,所以在翻譯成漢語時,應該把這個字母用括號括起來,加在漢語的前面或後面。

    4、保存,並且要注意,必須選擇編碼爲UTF8(可以選擇不加UTF頭BOM),而不能是GBK或GB2312。因爲ST想用UTF8統一全球各種字符集,拋棄了對GBK等字符集的自動識別,所以如果存成GBK,ST就不能正確識別漢字部分,會無法顯示或顯示不正常。

    5、應用。要想生效,需要把解壓文件夾再壓縮回ZIP(注意,要在文件夾裏選擇所有文件壓縮,而不是在文件夾外選擇文件夾壓縮,那樣就會因爲目錄層級不對而無法生效),然後改回原來的擴展名,並移到原文件夾中。

    建議採用下面的另外一種局部修改方法,更簡便且安全:

  1. 同上。
  2. 在壓縮包中只選擇擴展名爲sublime-menu的幾個文件解壓出來,放在一個名爲Default的文件夾中。
  3. 編輯文件並保存,注意事項同上。
  4. 剪切 Default文件夾。
  5. 在ST中選擇“Preferences/偏好”主菜單(右數第二個)->“Browse Packages/瀏覽擴展包”,系統會打開一個文件夾,按CTRL+V把之前剪切的 Default文件夾粘貼在這裏。

    這種方法不需要重新打包並改名,而且可以隨時更改,最主要的是會保留原始的 Default.sublime-package文件,以防萬一改壞不能復原導致只能重新安裝軟件。同時這種方法還會在保存文件時立即反映出改變。在下面講解“插件開發”時,可以利用這個方法調試插件。

    以上是ST主體的漢化。通過對擴展包 Default.sublime-package文件裏的 sublime-menu 文件進行修改。

    (2013-12 更新說明:上面講的是對ST主體的菜單項目進行漢化。但是其中有些開關類型的菜單,由於菜單文件裏沒有提供設置的辦法——按普通設置的話,不會有開關狀態時不同的顯示內容,而是固定的內容。這時候就需要修改ST的EXE文件裏面的內容了,而且有些顯示細節,比如“查找替換面板”和狀態欄裏的行列提示等信息,也要通過這個途徑才能漢化。

    這裏有兩個漢化完成的軟件包及其說明,大家可以拿去試用。不僅包括菜單、狀態欄、命令面板、側邊欄的漢化,裏面還集成了最常用的插件,如GBK自動轉換、EMMET和多重插入、格式化等編輯增強插件及我自制的幾個常用功能,常用配置設置,並對菜單在漢化基礎上又進行了重組。可以說不只是體驗和學習漢化方法,也可以對你的學習和工作生活提供較大便利。 
    第一版(3056,主菜單爲多個字)的說明(附圖):  http://my.oschina.net/theforever/blog/185251 
    第二版(3059,主菜單爲單字)的說明(附圖): http://my.oschina.net/theforever/blog/186730 
    第三版(3061)的說明(附圖):http://my.oschina.net/theforever/blog/188155 
    每個版本都在前一個基礎上有一些額外的增強,所以最好從頭到尾把三個版本的文章說明都看一下。其中第二版並沒上傳軟件包,可以到第三版中下載。

    1.2 對其它插件進行漢化的方法

    首先要找到插件的文件,ST3插件有三個存放位置:一個是ST安裝文件夾下面的 Packages 文件夾;一個是在上面第5步找到的 Packages 文件夾;還有一個是和第二個 Packages文件夾同級的Installed Packages文件夾(“Browse Packages/瀏覽擴展包”之後向上一級就可以看到)。

    在這三個目錄中,第一和第三個目錄是放插件包的,不會識別目錄形式的插件,第二個目錄則只識別目錄形式的插件而不識別插件包,適合用來進行插件開發和修改測試,也可作爲用戶對他人的插件進行自定義修改後的留存(當你在其它機器上重新安裝ST和插件後,可以通過恢復對這個目錄的備份來應用你之前的修改和擴展)。

    插件名稱和 sublime-package文件的文件名是對應的,因此很好找到對應的擴展包。找到之後,使用上面漢化ST主體時的兩種方法之一進行修改即可。

    (在上一節末尾給出的第三版(3061漢化增強版):http://my.oschina.net/theforever/blog/188155  中,給附帶的幾個最常用的插件都進行了漢化,可以下載查看學習。)

    漢化的方法至此結束。

二、開發插件


    2.1 插件介紹


    通過上節講的方法,可以查看所有標準的和擴展的插件內容,爲我們繼續深入到進行自己的插件開發打開道路。

    下面結合我自己寫的一個ST插件來講解一下開發方法。這個插件功能比較簡單,實際功能代碼部分很少,但已經能夠帶引你掌握整個插件開發的主要脈絡,適合入門。其作用是把當前剪貼板中的所有空行(包括只含有空格和TAB製表符而沒有其它有效內容的行)刪除,並粘貼到ST當前編輯的文檔。這在用瀏覽器查看網頁並想收集文字內容時,比較有用,因爲即使在網頁中是連續的行,複製粘貼後也會發現中間可能有無用的空行,更不用說有的內容明顯有多個不必要的空行了。當一個文件含有多個不同頁面的不同內容時,這些多餘的空行會使內容顯得散亂而不易區分。

    雖然用ST的正則替換可以消除空行,但輸入還是稍微麻煩點,而且一般還都要選擇“替換區域內文本”,否則就會把之前已經處理好的文本中需要保留的空行也一併刪除了。

    而用ST菜單中的“唯一化”功能,又會消除一些作爲分隔線的相同內容行,和其它很多必要的重複行。“唯一化”在別的時候可能很有用,但在這種情況下顯然不適合。

    而ST2的delete blank line插件還得在粘貼之後選擇剛纔粘貼完的內容再手工按鍵操作,有時還要按幾次,還是比較麻煩,尤其當粘貼的內容較多,不容易看出全部效果的時候,會讓用戶感覺比較困擾(藉助ST的文檔小地圖可以瞭解到情況,但若你和我一樣,在處理大文檔時關閉小地圖以提高性能,就無法藉助這一點了)。

    用我這個插件,只需要在瀏覽器或別的地方複製了內容之後,到ST中按一下插件綁定的熱鍵CTRL+ALT+SHIFT+L(雖然看着鍵子多,但按起來還是挺方便的,也容易理解:SHIFT在功能鍵的含義中一般表示去除或者反向,L表示空行Lines),就會以去掉多餘空行的形式粘貼到你的文檔中。被減肥的內容還可以再粘貼到別處使用。比如你在論壇看到有個人提問的問題,你想要回復,並且把這個問題和你的回覆都記錄到一個文檔中。在你回覆時,你可能還想要引用他的問題,但是如果他的問題中有一些不必要的空行,就會在你的回答前面佔據不必要的空間。這種情況下,你複製他的問題後,在ST裏按插件的熱鍵粘貼後,可以再回到瀏覽器的回覆框中,用CTRL+V就能再次粘貼剛纔已經減肥過的內容。

    下面就開始從頭編寫它吧:

    2.2 建立插件

    雖然在ST的Tools(工具)菜單裏有一項“new Plugin 新插件"菜單,但我覺得更快捷的方法是你可以選擇與Installed Packages文件夾同級的Packages文件夾中一個現成的插件目錄(最好裏面的內容種類齊全,如果你有意常做,可以製作一個模板——甚至可以編寫一個可視化操作軟件來生成這些文件),複製粘貼,然後更改其名稱,進入裏面,選擇不想要的文件刪除,再對剩下的文件進行修改即可。

    介紹一下插件文件夾裏面一些主要文件的作用和寫法:

    2.2.1 菜單文件

Main.sublime-menu:插件的主菜單。裏面的內容會添加到ST系統菜單中。 
    我插件的這部分內容是:

  1. [{ 
  2. "id": "edit","children":[ 
  3.         {"caption": "清除剪貼板中空行並粘貼","command": "paste_without_blank_lines"} 
  4.     ] 
  5. }] 

    第一行是JSON的結構定界符,即使不瞭解,只要照葫蘆畫瓢保持結構形式就可以了。 
    第二行,表示向菜單id爲edit的菜單(即“edit/編輯”菜單)中添加項目。要搞清楚id和caption不同,id用於標識真正的身份,caption只作爲在菜單中的顯示內容。 
    注意:這裏的ID不僅限於頂級菜單的ID,而是任意有ID的菜單項,根據你的插件用途進行選擇即可(但最好不要給帶有id而caption是“-”的項目添加子菜單,雖然能加進去,但看着太怪了) 
    第三行是所添加命令菜單的顯示名稱和對應的要執行的指令ID。指令ID是需要你自己起的,要避免與其它已有指令ID重複,最好起一個能表示你插件用途的名字。 
    如果要添加多項命令菜單,各項之間要用逗號分開。注意:最後一項的後面就不要再加逗號了。

    另外,如果某個傢伙寫他的插件時這樣幹了:

  1. [{ 
  2. "id": "edit", 
  3. "caption":"Edit(E)", 
  4. "children":[ 
  5.         {"caption": "abc","command": "abc"} 
  6.     ] 
  7. }]  

    就會使你漢化過的“編輯(E)”菜單還是顯示英文“Edit(E)”,所以當你看到菜單發生這種現象,就要找到是哪個插件乾的。不用急,就在這個菜單下面再看看還有哪一項是英文(即使不只一個也可以這樣挨個查看一下),找到後,記住菜單的英文內容,再到我在上一節“一、漢化”中介紹過的三個放置插件的目錄中找到有類似名稱的插件,用“一、漢化”中介紹的編輯方法打開菜單文件進行編輯然後保存,就又會顯示中文了。

    2.2.2 鍵盤熱鍵映射文件

    好,結束了菜單文件,下面再給我們的插件增加一個在ST裏可以快捷調用的鍵盤熱鍵,這是通過下面的 Default (Windows).sublime-keymap 文件實現的,內容是:

  1.     { "keys": ["ctrl+alt+shift+l"], "command": "paste_without_blank_lines" } 

    command必須對應於菜單文件中的命令ID。 
    另外還有Default (Linux).sublime-keymap 和 Default (OSX).sublime-keymap 兩個文件。如果你的插件能夠和想要支持它們,也可以加上。它們的主要區別是由於配置的鍵盤在功能鍵數量和命名上有些差異,所以在定義文件中要有針對地設置。

    2.2.3 向命令面板中註冊命令的文件

    我們還可以利用 Default.sublime-commands 文件,在“Ctrl+Shift+P”的命令面板中增加插件所含的指令供調用。雖然會稍微增加點系統開銷,但還是值得做的。中文名稱在命令面板中同樣可以搜索調用。

  1.     {"caption": "清除剪貼板空行並粘貼","command": "paste_without_blank_lines"} 

    2.2.4 插件主體程序

    PasteWithoutBlankLines.py 是本插件命令的實現代碼。ST的插件都是用PYTHON寫的,PYTHON程序的擴展名是.PY。當一個插件只有一個PY文件時,該文件名和插件的名稱可以不同,ST會自動調用這個唯一的PY程序。但當插件內有多個PY時,要麼你把其餘的PY放在子文件夾中進行調用,要麼你就得用插件文件夾的名稱作爲主程序文件的名稱,這樣ST會在幾個PY中挑選與插件文件夾相同名稱的程序作爲入口先執行。 
    在我寫這個教程之前,甚至直到現在,其實都沒好好看過PYTHON語法,不過PYTHON程序還是比較容易閱讀理解的。在漢化過程中順便看看,結合ST的代碼補全提示功能,已經足夠用來寫個簡單的插件了。電腦技術層出不窮,不可能都去涉獵,但通過一個要做的實事,稍微學點東西,也是不錯的事情。

    下面貼一下源碼,關於插件主程序的寫法機制和主要語法,我在源碼裏已經寫上了詳細的註釋:

  1. import sublime, sublime_plugin   # 插件主程序必須要引用這兩個基礎類庫。
  2. import re   # 本插件需要用到的正則表達式類庫。
  3. class PasteWithoutBlankLinesCommand(sublime_plugin.TextCommand): 
  4.     """
  5.        進行多行註釋:每個菜單命令都對應於一個類。注意類名的寫法,是把菜單命令的下劃線去掉,改成駝峯式寫法,並且在末尾加上Command。
  6.         括號中 sublime_plugin.TextCommand 是此類的父類,表示此類是一個命令菜單的實際行爲類。
  7.         如果不是命令菜單引起的而是由於窗口命令引起的實際行爲類,父類就要指定爲 sublime_plugin.WindowCommand 。
  8.     """
  9.     def run(self, edit):  # def表示定義一個方法。ST插件機制會自動調用指令類的run方法,所以必須重載實現此方法以供執行。
  10.         s = sublime.get_clipboard()     # 獲取剪切板內容
  11.         """
  12.        從ST文件視圖配置中讀取默認行結束符的類別(用操作系統環境表示)。因爲不同的操作系統對硬回車的表示和存儲方式不同,而這個插件正是需要對這些進行處理。如果你的插件也涉及操作系統的分別或者是配置的分別,都需要考慮按此方法先讀取相應的配置,再根據配置進行不同的處理。
  13.         """
  14.         line_ending = self.view.settings().get('default_line_ending') 
  15.         # 根據不同的操作系統環境進行不同的替換處理。
  16.         if line_ending == 'windows': 
  17.             s = re.compile('\n\r').sub('',s) 
  18.             s = re.compile('\r\n\s*\r\n').sub('\r\n',s) 
  19.         elif line_ending == 'mac': 
  20.             s = re.compile('\r\r').sub('\r',s) 
  21.             s = re.compile('\r\s*\r').sub('\r',s) 
  22.         else: # unix / system
  23.             s = re.compile('\n\n').sub('\n',s) 
  24.             s = re.compile('\n\s*\n').sub('\n',s) 
  25.         sublime.set_clipboard(s)    # 修改剪貼板內容,此方法可使減肥過的剪貼板內容在別處也能使用
  26.         self.view.run_command('paste')    # 調用粘貼命令

    其中 sublime.get_clipboard、self.view.settings、sublime.set_clipboard 等都是ST的APIs,要想獲得更多資料說明以寫出屬於你的複雜的插件,可以到ST的官方網站去查看API參考文檔,當然,更簡單的方法是看看這篇我和另一譯者共同翻譯的Sublime Text 插件 API 參考中文版 http://www.oschina.net/translate/sublime-text-plugin-api-reference”。

    與Installed Packages文件夾同級的Packages文件夾,可以說是專爲調試插件準備的,在其中無論是對菜單還是對命令實現的程序進行更改,都會即時反應到ST中。在寫好之後,可以壓縮成ZIP然後改擴展名爲sublime-package。壓縮時要注意:不要選擇目錄進行壓縮,而要在目錄中選擇所有文件進行壓縮。前者會把目錄名壓進去,增加一層目錄深度,導致ST檢索時找不到插件文件。

    現在,你可以自己使用,也可以把插件打包發給朋友們使用,或放在能夠下載的網址上。

    到這裏你已經可以自己開發和使用並小範圍地散發你的插件了,如果你希望在P C面板的安裝插件列表中看到你自己的插件,供全世界的朋友使用,可以繼續觀看本教程的最後一節:“三、ST插件發佈”。

三、ST插件發佈

    首先要避免在你的插件中使用中文,因爲ST對GBK的態度已經說明一切,你含有中文的插件是極不可能通過下面提到的審覈的。

    然後爲了幫助你更好理解爲什麼要進行下面的行爲,我介紹一下P C的工作原理。它是利用兩個(根據發展,它可能支持更多)流行的源碼項目服務器(github和bitbucket)的功能實現的。它在源碼服務器上存放着一個插件列表文件,裏面含有你在選擇“安裝插件”時會顯示的插件列表。所以你只要提交你的插件地址給那個插件列表文件即可。P C會根據用戶的選擇自動找到你的插件地址。如果你的插件是已經打包好的插件文件(即URL是以插件包擴展名爲結束的),它就會按URL直接下載並存放到插件目錄中。如果你的插件是以源碼目錄的形式存儲在源碼存儲服務器上(只寫有源碼倉庫名稱,不是具體的插件包文件),P C會根據存儲服務器所提供的打包下載功能將你的插件文件打包下載並還原到用戶電腦中的ST插件目錄中。ST會自動對插件目錄進行掃描和應用新插件。

    爲了能夠向插件列表文件中加入你的插件地址,你需要按照該列表的要求來提供你的插件。

    以GITHUB爲例(BitBucket大致也相同),你需要先去 www.github.com 註冊一個帳號。由於這是源碼倉庫服務器,所以審查機制非常寬鬆,即使是隨便填的郵箱都可以註冊成功。但在之後還是會提醒你至少驗證一個郵箱的(你可以設置一個用來登錄的私密郵箱,還可以設置一個公開的用於交流的郵箱)。當然,由於你的源碼要面對衆多的內行,所以也不要琢磨幹什麼偷偷摸摸的壞事了。

    註冊完成後,你可以在網站右上方你的帳號旁邊找到“建立倉庫”按鈕,點擊後給自己的倉庫起個名,也就是你的插件的名稱。在這一步要注意,因爲這個服務器肯定不只限於你存放ST插件的源碼,所以你肯定會想給你的倉庫起個“Sublime xxxx“的名字來標識一下。這個時候建議你最好不要加,因爲P C覺得這對於它來說完全多餘,向它提交的肯定都只是ST插件,而帶有這樣名稱的插件下載到用戶電腦裏,也會讓用戶對如此明顯冗餘的內容感到厭煩,因此P C要求插件名稱裏不要含有這樣的字樣。對於那些不幸已經這樣起名的,P C推出了名稱映射功能。這不僅對你增加一道設置映射的手續,而且使你的實際插件URL與用戶們看到和使用的插件名稱有所差異,所以最好在建立倉庫時就不要添加,只起描述你插件作用的名字即可。而且應該使用駝峯式命名,避免使用下劃線。在倉庫的描述欄中填寫好插件的說明,包括適用的版本號和用途,要簡潔明確,然後勾選“生成readme.md”。確定。

   比如我的插件源碼地址是:https://github.com/Zhao-Liang/PasteWithoutBlankLines
   (特意用了中文名——可惜ZhaoLiang被佔用了——從P C列表中一看URL就知道是中國人寫的)

    現在你已經擁有了一個空的代碼倉庫,你可以使用GIT或GITHUB軟件進行同步和版本更新,也可以直接在網頁中使用“新建文件”和“編輯文件”功能來建立和修改文件。新手用後者比較容易上手,成手用前者能提高效率。

    假設你已經通過這兩種方式之一把你的插件內容存到了倉庫中,現在在倉庫根目錄還要建立一個packages.json文件,向其中寫入如下內容:

{
     "schema_version": "1.2",
     "packages": [
      {
       "name": "你的插件名稱,如PasteWithoutBlankLines",
       "description": "你的插件的描述",
       "author": "作者名稱,可以寫你真名或是在 github 上的用戶名",
       "homepage": "https://github.com/你的用戶名/插件名",
       "last_modified": "最後修改的日期時間",
       "platforms": {
        "*": [
         {
          "version": "你的插件版本號",
          "url": "https://nodeload.github.com/你的用戶名/插件名/zip/tag名"
         }
        ]
       }
      }
     ]
    }

    確保爲上面每個鍵名設置了你的信息。若插件能工作於所有操作系統平臺,則 platforms 鍵應寫爲 "*" 。 若插件專爲某一操作系統而寫,應寫明是 "osx", "windows" 或是 "linux",也可以爲三種或單獨一種平臺各自指定不同實現方式和版本的插件URL(儘管這很少使用,因爲你在一個版本里就可以通過程序來判斷不同的操作系統從而進行不同的操作行爲。除非業務確實比較複雜。)。如果你長期只用一種操作系統,可能會覺得忽略另外兩者很平常,但如果考慮到P C作者面對的是全球使用不同操作系統的用戶,你就會知道他對這一點還是會相當注意的。 
    url 鍵必須指定在 https://nodeload.github.com 上,否則不能對所有機器都正常下載。 
    下載 URL 的最後部分是代碼的分支名。雖然可以使用主分支,但由於下面將會介紹的“防止不必要的頻繁更新”的原因,建議使用一個代碼的特定版本。

    當升級插件版本後,要記得更改主分支裏面的 packages.json 文件中的 version 和 URL。

    把P C作者自己的packages.json摘錄在下面,看着會更清楚:

{
	"schema_version": "1.1",
	"packages": [
		{
			"name": "Alignment",
			"description": "Easy alignment of multiple selections and multi-line selections",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/alignment",
			"last_modified": "2011-09-18 23:13:00",
			"platforms": {
				"*": [
					{
						"version": "2.0.0",
						"url": "http://sublime.wbond.net/Alignment.sublime-package"
					}
				]
			}
		},
		{
			"name": "Package Control",
			"description": "A full-featured package manager",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/package_control",
			"last_modified": "2013-01-21 20:13:00",
			"platforms": {
				"*": [
					{
						"version": "1.6.3",
						"url": "http://sublime.wbond.net/Package Control.sublime-package"
					}
				]
			}
		},
		{
			"name": "Prefixr",
			"description": "Runs CSS through Prefixr.com API",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/prefixr",
			"last_modified": "2011-11-14 12:40:00",
			"platforms": {
				"*": [
					{
						"version": "1.0.1",
						"url": "http://sublime.wbond.net/Prefixr.sublime-package"
					}
				]
			}
		},
		{
			"name": "SFTP",
			"description": "Commercial SFTP/FTP plugin - upload, sync, browse, remote edit, diff and vcs integration",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/sftp",
			"last_modified": "2012-08-08 08:43:00",
			"platforms": {
				"linux": [
					{
						"version": "1.10.2",
						"url": "http://sublime.wbond.net/SFTP.sublime-package"
					}
				],
				"osx": [
					{
						"version": "1.10.2",
						"url": "http://sublime.wbond.net/SFTP.sublime-package"
					}
				],
				"windows": [
					{
						"version": "1.10.2",
						"url": "http://sublime.wbond.net/win/SFTP.sublime-package"
					}
				]
			}
		},
		{
			"name": "SVN",
			"description": "Full-featured commercial Subversion plugin with a focus on usability",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/svn",
			"last_modified": "2012-08-13 02:07:00",
			"platforms": {
				"linux": [
					{
						"version": "1.5.2",
						"url": "http://sublime.wbond.net/SVN.sublime-package"
					}
				],
				"osx": [
					{
						"version": "1.5.2",
						"url": "http://sublime.wbond.net/SVN.sublime-package"
					}
				],
				"windows": [
					{
						"version": "1.5.2",
						"url": "http://sublime.wbond.net/win/SVN.sublime-package"
					}
				]
			}
		},
		{
			"name": "Terminal",
			"description": "Launch terminals from the current file or the root project folder",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/terminal",
			"last_modified": "2011-11-28 22:49:00",
			"platforms": {
				"*": [
					{
						"version": "1.3.1",
						"url": "http://sublime.wbond.net/Terminal.sublime-package"
					}
				]
			}
		},
		{
			"name": "Tortoise",
			"description": "Keyboard shortcuts and menu entries to execute TortoiseSVN, TortoiseHg and TortoiseGit commands",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/tortoise",
			"last_modified": "2011-11-05 23:08:00",
			"platforms": {
				"windows": [
					{
						"version": "1.2.1",
						"url": "http://sublime.wbond.net/Tortoise.sublime-package"
					}
				]
			}
		}
	]
}

    從中我們看到針對不同操作系統提供不同插件的例子,還可以看到能夠直接指定使用打包好的擴展文件。在你的倉庫中放置一個packages.json和一個打好包的插件,很簡潔,只是你需要自己進行打包和更名的工作了(我用了一下ST3的自動打包功能,不知是BUG還是我的ST環境被弄得有點混亂了,亦或我沒去看打包是否有點需要遵守的規矩,總之是沒有成功)。

    最後,打開  https://github.com/wbond/package_control_channel,在項目欄右方找到FORK按鈕,點擊,這就使你的帳號擁有了 package_control_channel 的一個倉庫副本。找到你帳號裏這個副本,進入,編輯repositories.json,按下面講的第2點注意事項在合適位置插入一行,內容是:

    "https://raw.github.com/你的帳號/你的插件倉庫/master/packages.json",

    編輯時要注意幾點: 
    1、不要動別的原來內容,包括行結束符和縮進。只添加你自己的行。因爲審查者會在版本服務器中對比你所做的改變,如果發現通篇每行都有變化,肯定沒耐心看你究竟加了什麼,以及是否對別人的內容造成破壞,結果自然會拒絕合併你的修改內容。(我好像就是習慣成自然地不小心改了縮進的設置……呵呵,毀了。話說回來,要不是這種習慣,也不會編寫這樣的插件了,我覺得很常用,可一直沒看到別人有寫,我至於這麼小衆嗎——補註:不知什麼時候,P C已經收錄了我這個插件,名字就是PasteWithoutBlankLines,有需要的朋友可以在ST裏安裝使用了。我自己在提交時並沒有象這個教程這樣認真去做——因爲教程是要對大家負責的——但也被收錄了,說明審查還不是非常挑剔的,可能時間多半花在對你插件代碼的實際審查上了,畢竟PYTHON能幹的事情比JS和VBS還要多,危險性也更大,P C作爲收錄和推薦方,肯定要負有責任的。雖然後面這部分篇幅挺多,雖然建議你耐心讀完並實際遵守,但也不需要爲此過於糾結,大不了隨便把插件包上傳到某個網盤上,通過宣傳也是可以的,只是在可信性和可見性上,肯定不如出現在P C插件列表中那樣好)

    2、添加時要象原內容那樣按照字母大小順序插入到合適位置,這樣會使整個名單保持明瞭而不是混亂。

    3、除非你需要做名稱映射,否則不需要管後面的部分。

    然後保存。成功後,在項目的正上方有個“PULL REQUEST”(請求推送),即把你剛纔所做的改變提交給原始的 package_control_channel 項目,等待作者審批,所以剩下的就是等待了。審批成功之後,你所添加的插件URL就會在全球ST用戶安裝插件的時候顯示出來供下載安裝了,而且也會出現在http://wbond.net/sublime_packages/community 頁面上,該頁面按時序顯示了所有提交給P C的插件的信息(即你在packages.json中填的一些信息),比在P C安裝面板中縮略顯示的要詳細。

    如果你沒有建立和填寫packages.json,P C會取你的代碼倉庫的最後更新日期時間作爲版本號。這會造成性能上的浪費。因爲P C每次啓動都會檢查所有插件的版本號,如果你改了一個文件,過會兒又改了另一個文件,這個過程中,全球用戶可能會有不少已經安裝你的插件的用戶由於你的間隔更新而不斷來進行插件升級。在你結束所有修改,正式決定升級插件版本之前,這肯定是不必要的浪費。所以前面提到過,建議你建立一個分支作爲插件的下載URL,在你的主分支裏只需要存放packages.json,在它裏面用URL指出你插件的真正地址和版本。這樣,只要這個文件內容不變,你的插件倉庫無論怎麼修改也不會引起頻繁的更新。

四、結語

    好了,至此關於ST漢化和插件開發及提交的教程就全部結束了。本教程基於ST3進行講解,對ST2來說,少部分地方可能有所區別,尤其是在插件編程中涉及一些API變化的部分,需要提取ST的版本,然後採用相應的API方法,這個可以參考一些從ST2升級到ST3的插件。也可以查看“延伸閱讀”中的ST插件API參考中文版來獲得更詳細的關於ST插件API的信息


五、延伸閱讀


【ST插件API參考中文版】:(http://www.oschina.net/translate/sublime-text-plugin-api-reference)

(附圖)Sublime Text 3056 趙亮(碧海情天)漢化定製(雙12)版:http://my.oschina.net/theforever/blog/185251

(附圖)Sublime Text 3059 漢化增強版(趙亮-碧海情天):http://my.oschina.net/theforever/blog/186730

Sublime Text 3061 增強版 by 碧海情天: http://my.oschina.net/theforever/blog/188155

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章