Sublime Text Macros

Published on: June 18, 2014

Tags: js and interview-questions

My coworker users vim, and has a snazzy macro to put a binding.pry wherever he using a keyboard shortcut. I thought it was a neat trick (and he mentioned something about Sublime not being a real editor), so I decided to implement it for Sublime as well.

I looked up how to make macros and wrote one for adding binding.pry. Basically you need to use control + q to start and stop your macro recording. Then you save the macro by going to Tools/Save Macro.... You should name it something memorable, like add_binding.

Ok, now we've got our macro, and you can invoke it by going to Tools/Macros/User/add_macro. (Note: you might need to restart Sublime first.) But going to the menu each time is lame, we're better than that.

Let’s add a key binding!

I've done key bindings in the past, but not with macros. I chose to use command + b for mine (you might have that map to build, just a heads up...). So my key binding looked like this:

1
2
3
  { "keys": ["super+b"],
    "command": "run_macro_file",
    "args": {"file": "Packages/User/add_binding.sublime-macro"} }

Awesome, now command + b will add a binding.pry inline. Handy!

But I wanted more, a - binding.pry in haml, and a debugger in javascript. I also wanted to use the same key binding. I didn’t want to think about if I’m in haml or JS.

Creating the macros was the same, but I needed the key bindings to know what kind of file I was in. I looked into how to make key bindings source aware. I also needed to know how sublime names file types.

Putting it all together, the final key bindings look like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  { "keys": ["super+b"],
    "command": "run_macro_file",
    "args": {"file": "Packages/User/add_binding.sublime-macro"},
    "context": [{"key": "selector", "operator": "equal", "operand": "source.ruby,source.ruby.rails"}] },

  { "keys": ["super+b"],
    "command": "run_macro_file",
    "args": {"file": "Packages/User/add_haml_binding.sublime-macro"},
    "context": [{"key": "selector", "operator": "equal", "operand": "text.haml"}] },

  { "keys": ["super+b"],
    "command": "run_macro_file",
    "args": {"file": "Packages/User/add_debugger.sublime-macro"},
    "context": [{"key": "selector", "operator": "equal", "operand": "source.js,source.coffee"}] }

comments powered by Disqus