This page has been robot translated, sorry for typos if any. Original content here.

Writing a simple plugin for Sublime Text 2

On this topic:


Sublime Text 2 FAQSublime Text 2 FAQ

The example is real, from engineering practice. Translation of the selected number in the text from decimal to hexadecimal number system. The feature should be accessible from the main and context menu as well as by the key combination Ctrl + Shift + H. Execution result: the number in hex written using numbers and upper case letters without any leading characters like “0x”. If the selected text is not a number - swear about it with the status bar. I draw your attention that the example is intended to be simplified to the maximum, so that for the details the essence is not lost: the simplicity of creating plugins for Sublime.

Writing a plugin

Click Tools -> New Plugin ... and see the workpiece. We change the class name and write the functionality in the run method. I got the following:

 import sublime, sublime_plugin

 class DecToHexCommand (sublime_plugin.TextCommand):
  MAX_STR_LEN = 10
  def run (self, edit):
  v = self.view

  # Get the value of the first selected block
  dec = v.substr (v.sel () [0])

  # Replace decimal number with hexadecimal or output error message		
  if dec.isdigit ():
  v.replace (edit, v.sel () [0], hex (int (dec)) [2:]. upper ())
  else:
  # Cutting too long lines that do not fit in the statusbar 
  if len (dec)> self.MAX_STR_LEN:
  logMsg = dec [0: self.MAX_STR_LEN] + "..."
  else:
  logMsg = dec
  sublime.status_message ("\" "+ logMsg +" \ "isn't a decimal number!")	

We save there where the editor with the name dec_to_hex.py will offer

Add menu items. We register the keyboard combination.

Let's start with the "hot keys".

In the menu, click Preferences -> Key Bindings-User . A file with settings in JSON format opens. Most likely empty. Add a line to it.

  {"keys": ["ctrl + shift + h"], "command": "dec_to_hex"}

We save. Everything. The principle can already be used. If it doesn’t work, it’s worth looking at what is written on the console (Ctrl + `).

To add an item to the context menu, create a Context.sublime-menu file with the following content:

 [ 
  { 
  "command": "dec_to_hex"
  } 
 ] 

I think that, as in the previous case, everything is clear without comment.

We save in the same directory in which the plugin is saved.

Those. % USERPROFILE% \ AppData \ Roaming \ Sublime Text 2 \ Packages \ User , for Windows users. In the same place we create the file Main.sublime-men u. I thought that this item would be the most relevant in the Edit menu, so I wrote the following in the Main.sublime-menu file:

 [ 
  { 
  "id": "edit", 
  "children": 
  [ 
  {"command": "dec_to_hex"} 
  ] 
  } 
 ]

We are checking. Items with the name Dec To Hex should appear in the main and context menu

References:

www.sublimetext.com/docs/api-reference - Plugin API Reference

www.sublimetext.com/download - Download

www.sublimetext.com/dev - Dev Builds. I use the dev version, I have not yet caught the bugs.

net.tutsplus.com/tutorials/python-tutorials/how-to-create-a-sublime-text-2-plugin/ - An article on the same topic in English