Sublimeプラグインの開発-簡単なコードテンプレートプラグイン
最近はsublimeを使ったgolang開発が行われていて、全体的にいい感じで、eclipseなどのIDEには及ばないが、使い勝手が軽くて便利で、golangの開発は十分だ.一部のコードの多重化率が高く、よく使われていますが、自分の記憶力が非常に悪く、自分で叩くたびに他のIDEのプラグインのようにコードテンプレートを直接挿入したいと思って、sublimeのプラグイン開発を検討しました(ネット上ではGistを推薦する人が多いのですが、ネット上の理由でGistプラグインが適用されるのが遅く、毎回長い時間待たなければならないことがわかりました).
プラグインを装着した人はsublimeのプラグインがpythonで開発されていることを知っているので、開発するにはpythonを初歩的に把握する必要があります.初歩的には、sublimeプラグインの開発は実際にpythonを使用してsublineが提供するインタフェースを呼び出して開発されているため、MFCのように、各動作の下位層がどのように実現されているかに注目する必要はありません(以下を見てください).
)、これらのアクションインタフェースを呼び出して一連の操作を完了するだけでよい.
入門開発プロセスここでは説明しません.ここには入門チュートリアルがあります.公式インタフェースのドキュメントを加えると、簡単なはずです. Sublime Text 2プラグイン の開発方法 sublime公式開発例 sublime 2インタフェースドキュメント 次は主に私のこのプラグインの開発を紹介します.
一、機能確定
やはり古い規則で、仕事をして善いことをしようとすると、必ず先に器を利して、私たちはまずプラグインの機能を確定します.初めて開発したので、基本的なニーズを満たすだけでいいので、あまり複雑に開発するつもりはなく、機能を確定しました.選択コードをテンプレートライブラリに追加 テンプレートライブラリから選択する指定コードを現在位置 に挿入する.は、テンプレート内の{date}}を現在の日付 に置き換えるなど、いくつかの変数の置換を完了することができる.
二、機能設計
この3つの機能を1つずつ分析します.まず最初の実装方法は多く,すべてのテンプレートを同じファイルに存在させ,境界子を適用して採点することができるが,これでは修正追加を削除する際にすべてのテンプレートを繰り返し判断することが面倒になる.だから直接各テンプレートに1つのファイルを保存することができて、ファイル名は直接テンプレート名で命名して、このように処理するのはとても便利で、このように多くのファイルを生成することができるのではないかと言う人がいるかもしれませんが、多くなってから探すのは遅いのではないでしょうか.私はいつもいかなるプログラム設計もバランスのとれた実現の複雑さと性能を両立させなければならないと思っています.一方的に追求するのではなく、一方的に追求しなければなりません.sublimeで私たちが普段よく使うコードテンプレートは実は限られていて、普通は数十個しかありません(多くても覚えられません)、これに対して直接単独でファイルを書くのは全然大丈夫ですが、逆に効率的にインデックスを作るためには、鶏を殺すために牛刀を使います.もちろん、実は使いやすいように、フォルダごとにグループ化して保存したほうが合理的ですが、今はおっくうですから、先にそうしましょう.コードを挿入するのは簡単です.テンプレートフォルダを巡ってすべてのファイル名を読み出して選択し、対応するファイルを読み込んでカーソル位置に挿入すればいいです.変数の置換はもっと簡単です.前の変数の置換を挿入すればいいです.もちろん、カスタム変数を実装するには、プロファイルを追加する必要があります.
三、コード実装
コードは詳しく説明しませんが、前のチュートリアルドキュメントを見たら下のコードが簡単です.まず、コード構造を見てみましょう.
codemanage.pyコードは次のとおりです.
pythonがわかるのは簡単だと思います.
四、まとめ
今はまだ機能が整っていませんが、もう使っています.
便利になりました.sublimeプラグインの開発は比較的簡単で、入門後は自分の軽量レベルIDEを簡単にカスタマイズできるようになりました.
プラグインアドレス:
github
プラグインを装着した人はsublimeのプラグインがpythonで開発されていることを知っているので、開発するにはpythonを初歩的に把握する必要があります.初歩的には、sublimeプラグインの開発は実際にpythonを使用してsublineが提供するインタフェースを呼び出して開発されているため、MFCのように、各動作の下位層がどのように実現されているかに注目する必要はありません(以下を見てください).
)、これらのアクションインタフェースを呼び出して一連の操作を完了するだけでよい.
入門開発プロセスここでは説明しません.ここには入門チュートリアルがあります.公式インタフェースのドキュメントを加えると、簡単なはずです.
一、機能確定
やはり古い規則で、仕事をして善いことをしようとすると、必ず先に器を利して、私たちはまずプラグインの機能を確定します.初めて開発したので、基本的なニーズを満たすだけでいいので、あまり複雑に開発するつもりはなく、機能を確定しました.
二、機能設計
この3つの機能を1つずつ分析します.まず最初の実装方法は多く,すべてのテンプレートを同じファイルに存在させ,境界子を適用して採点することができるが,これでは修正追加を削除する際にすべてのテンプレートを繰り返し判断することが面倒になる.だから直接各テンプレートに1つのファイルを保存することができて、ファイル名は直接テンプレート名で命名して、このように処理するのはとても便利で、このように多くのファイルを生成することができるのではないかと言う人がいるかもしれませんが、多くなってから探すのは遅いのではないでしょうか.私はいつもいかなるプログラム設計もバランスのとれた実現の複雑さと性能を両立させなければならないと思っています.一方的に追求するのではなく、一方的に追求しなければなりません.sublimeで私たちが普段よく使うコードテンプレートは実は限られていて、普通は数十個しかありません(多くても覚えられません)、これに対して直接単独でファイルを書くのは全然大丈夫ですが、逆に効率的にインデックスを作るためには、鶏を殺すために牛刀を使います.もちろん、実は使いやすいように、フォルダごとにグループ化して保存したほうが合理的ですが、今はおっくうですから、先にそうしましょう.コードを挿入するのは簡単です.テンプレートフォルダを巡ってすべてのファイル名を読み出して選択し、対応するファイルを読み込んでカーソル位置に挿入すればいいです.変数の置換はもっと簡単です.前の変数の置換を挿入すればいいです.もちろん、カスタム変数を実装するには、プロファイルを追加する必要があります.
三、コード実装
コードは詳しく説明しませんが、前のチュートリアルドキュメントを見たら下のコードが簡単です.まず、コード構造を見てみましょう.
template #
codemanage.py #
Default (XXX).sublime-keymap # ,XXX
var-map.conf # ,key=value
codemanage.pyコードは次のとおりです.
#-*- coding: UTF-8 -*-
import sublime, sublime_plugin
import os
import os.path
import time
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# , ,
class CodeTplAddCommand(sublime_plugin.TextCommand):
def run(self,edit):
#
selstr = ''
sels = self.view.sel()
for sel in sels:
value = self.view.substr(sel)
if value == '':
continue
selstr = selstr + value + '
'
if selstr == '':
sublime.message_dialog("Select content is empty.")
return
def on_done(name):
if name=='':
sublime.message_dialog("Template name is empty.")
return
#
path = os.path.join(sublime.packages_path(),"CodeManage","template",name+".ctpl")
try:
f = open(path, 'w')
print selstr
selstr.encode("gbk")
f.write(selstr)
except Exception, e:
print e
sublime.message_dialog("Write template file fail:"+str(e))
return
finally:
f.close()
def on_change(name):
return
def on_cancel():
return
#
self.view.window().show_input_panel('Plese input the code template name','template',on_done,on_change,on_cancel)
#
class CodeTplInsertCommand(sublime_plugin.TextCommand):
def run(self,edit):
filenames = []
rootdir= os.path.join(sublime.packages_path(),"CodeManage","template")
for p,d,files in os.walk(rootdir):
filenames = files
def on_sel_done(selvalue):
if selvalue==-1:
return
filename = filenames[selvalue]
content = ''
if filename=='':
sublime.message_dialog("Template is not exist.")
return
path = os.path.join(sublime.packages_path(),"CodeManage","template",filename)
try:
f = open(path, 'r')
content = f.read()
if content=='':
sublime.message_dialog("Template file is empty")
return
content = ReplaceVar(content)
except Exception, e:
sublime.message_dialog("Open template file fail:"+str(e))
return
finally:
f.close()
#
sels = self.view.sel()
for sel in sels:
self.view.insert(edit,sel.begin(),content)
#
self.view.window().show_quick_panel(filenames,on_sel_done)
#
# {{XXX}} ({{data}} )
def ReplaceVar(content):
varmap = {
'{{date}}':time.strftime('%Y-%m-%d',time.localtime(time.time()))
}
#
try:
path = os.path.join(sublime.packages_path(),"CodeManage","var-map.conf")
f = open(path, 'r')
for line in f.readlines():
if line=='':
continue
value = line.split("=")
varmap["{{"+value[0]+"}}"] = value[1]
except Exception, e:
sublime.message_dialog("Open var-map file fail:"+str(e))
return
finally:
f.close()
for (k,v) in varmap.items():
content = content.replace(k,v)
return content
pythonがわかるのは簡単だと思います.
四、まとめ
今はまだ機能が整っていませんが、もう使っています.
便利になりました.sublimeプラグインの開発は比較的簡単で、入門後は自分の軽量レベルIDEを簡単にカスタマイズできるようになりました.
プラグインアドレス:
github