Sublime Text 2プラグインを使用して重複コードブロックを生成する

私の仕事では、マークアップ、検証、フォーマットなどに関連する同じタイプのコードを大量に常にコピーアンドペーストする必要があります。 DBMSからの多数のフィールド。 私は長い間、何らかの形でこのタスクを自動化したいと思っていました。











たとえば、テーブルがあります:



id | field1 | field2 | field3







そして、フォームのマークアップを取得する必要があります。



 <tr> <td class="fls"><GEN:FIELDLABEL NAME="Field1Label" /></td> <td class="dfv" style="white-space:nowrap;"><GEN:FIELDVALUE NAME="Field1" /></td> </tr> <tr> <td class="fls"><GEN:FIELDLABEL NAME="Field2Label" /></td> <td class="dfv" style="white-space:nowrap;"><GEN:FIELDVALUE NAME="Field2" /></td> </tr> <tr> <td class="fls"><GEN:FIELDLABEL NAME="Field3Label" /></td> <td class="dfv" style="white-space:nowrap;"><GEN:FIELDVALUE NAME="Field3" /></td> </tr>
      
      







フィールドが3つあると良いのですが、フィールドが30あり、コードが12個以上ある場合はどうでしょうか。



最初の考えは、SQLですべてを行うことでした。 フィールドのリストと、テンプレートに従ってコードブロックを生成するリクエストを含むラベルを作成します。 しかし、すぐにテンプレートをsqlサーバー管理スタジオにコピーし、生成されたコードを戻すのはあまり便利ではないと思われたため、Sublime Text 2のプラグインを作成することにしました。



最後のタスク:



値のリストを2次元配列の形式で作成します。私の場合、各行に入力します。



[fieldName, signFieldName, fieldFullName, fieldMeasurment]







編集したファイルに、プレースホルダー{0}、{1}、{2}、および{3}を含むテンプレートを作成します。例:



ValidateSignedField({0},{1});







次に、複数選択を使用して複数のテンプレートを選択し、Ctrl + Shift + zを押して完成したコードを取得します。



これは私の最初の崇高なテキスト2プラグインであり、1年以上前に非常に表面的にpythonを選択したことを考えると、実装は非常に簡単であることがわかりました。



新しいプラグインを作成し(ツール->新しいプラグイン)、たとえば適切なフォルダーにCodegen.pyとして保存します。



プラグインコード:



 # coding=utf-8 import sublime import sublime_plugin #        {0},{1},{2}  {3} field_rows = [ ['dbField1','dbField1Sign','Field 1 full name','m/s'], ['dbField2','dbField2Sign','Field 2 full name','kg/m*m'], ['dbField3','dbField3Sign','Field 3 full name','V'], ['dbField4','dbField4Sign','Field 4 full name','km/h'] ] class CodegenCommand(sublime_plugin.TextCommand): def run(self, edit): #   view view = self.view #      for curr_sel in view.sel(): n = 0 region = curr_sel if not region.empty(): #   ,      selection = view.substr(region) result = '' #         for field_row in field_rows: result += selection.replace('{0}',field_row[0]).replace('{1}',field_row[1]).replace('{2}',field_row[2]).replace('{3}',field_row[3]).replace('{n0}',str(n)).replace('{n1}',str(n+1)) result += '\r\n' n += 1 #      self.view.replace(edit, region, result)
      
      







field_rows-テンプレート内の置換用の値の同じ配列。

すでに記事を書く過程で、ゼロまたは1からインデックスを生成する機能を追加することになりました。このため、それぞれプレースホルダー{n0}および{n1}を追加しました。



これで、プラグイン呼び出しにホットキーを追加できます。 Key Bindings-Userに次のように記述します。

[

{ "keys": ["ctrl+shift+z"], "command": "codegen" }

]








このプラグインが誰かの時間の節約に役立つことを願っています。



All Articles