I love when tools make my life easier. A conversation came up online the other night and I had shown someone a quick summary of the awesome power of Sublime Text. They wanted to know how I made the magic happen in that video. I felt I should and share it with everyone via a blog post. Here’s a quick video of my uses along with a description of what you can do with it, as well as how to make it work.
Simply put, Sublime Text has a feature called snippets. With snippets you can basically leverage a form of text expansion across multiple lines. And even place multiple blinking cursors. For me, I use it both ways. I have configuration snippets that simply put sections of configuration into the document. I do these for all the major components I run into often. For example, I have a snippet for the AAA config, another for the EIGRP config (including key chains etc), as well as one for SIP in the case the router may be a SIP gateway of sorts. I can take a project, open Sublime Text, and within a few short commands I can build out a modular configuration specific to the elements needed for that particular router installation.
When I leverage Sublime Text this way, I have to go back and scrub the configuration for changes such as source-interfaces, subnets, etc. However, I can quickly have the base configuration built.
The other way I like to leverage Sublime Text is to do repetitive tasks such as building a port channel across a couple of Nexus devices in a VPC. I like to keep VPC and Port Channel numbers the same, interface descriptions consistent, and not worry about typos in numbers. In this case, I have the snippet write the configuration of all two ports and the port channel interfaces. Once it writes it into the document, there are a series of cursor points (highlighting more than one at a time) that I can tab through. This means, On both interface channel-group commands, the port channel interface numbers, and the VPC numbers, I simply type 1234 once, and it enters it into all six areas.
Again, you can see these two use cases in my video at the beginning of the post.
The concept is pretty simple. You create a new text file that has a specific format, define a shortcut command and save it in a special folder. Now, when you are in Sublime Text you simply type your shortcut command and hit tab. Your configuration (or code) is expanded into that document. If you used cursor insertion points, it starts at the top most one.
First is an example of the just straight text expansion I use for quick configuration builds of multiple modules. Simply note where I placed the configuration code itself. Of particular interest is at the bottom of the file where I declare the tab completion shortcut. In this case confaaa.
<snippet> <content><![CDATA[ aaa new-model ! aaa group server tacacs+ CiscoACS server-private 10.10.42.150 key 7 1a2b3c4d5e6f ip tacacs source-interface Loopback0 ! aaa authentication login default group CiscoACS local enable aaa authentication enable default group CiscoACS enable aaa authorization config-commands aaa authorization exec default group CiscoACS local none aaa authorization commands 0 default group CiscoACS local none aaa authorization commands 1 default group CiscoACS local none aaa authorization commands 15 default group CiscoACS local none aaa accounting exec default start-stop group CiscoACS aaa accounting commands 1 default start-stop group CiscoACS aaa accounting commands 15 default start-stop group CiscoACS aaa accounting network default start-stop group CiscoACS aaa accounting connection default start-stop group CiscoACS aaa accounting system default start-stop group CiscoACS ! aaa session-id common ]]></content> <tabTrigger>confaaa</tabTrigger> </snippet>
Next we’ll look at the example I used cursor insertion points. The concept is the same as the above example with the exception that where I want cursor insertion, I place a $ followed by a number. Similar to declaring variables in other languages. The trick to these is quite simple. Anywhere I place $0 a cursor will be blinking in that spot. I simply type once, and it fills what I type into all those $0 spots. Continue this format with new numbers for each grouping of insertion points.
<snippet> <content><![CDATA[ *** TOP SWITCH *** interface Ethernet104/1/3 description $1-LINK1 switchport access vlan $2 spanning-tree port type edge spanning-tree guard root channel-group $0 mode active interface port-channel$0 description $1 switchport access vlan $2 spanning-tree port type edge spanning-tree guard root vpc $0 *** BOTTOM SWITCH *** interface Ethernet114/1/3 description $1-LINK2 switchport access vlan $2 spanning-tree port type edge spanning-tree guard root channel-group $0 mode active interface port-channel$0 description $1 switchport access vlan $2 spanning-tree port type edge spanning-tree guard root vpc $0 ]]></content> <tabTrigger>dcportchannel</tabTrigger> </snippet>
So now, where do you save these darn files and what do we call them? In Windows, these files get placed under c:\users\YOURNAME\appdata\roaming\sublime text 3\packages\users Change Sublime Text 3 to whatever version you are working with. I can confirm it works with 2 and 3.
On OS X they go in the /Users/mattouellette/Library/Application Support/Sublime Text 3/Packages/ folder.
In both cases the files are named YOURFILENAME.sublime-snippet
It’s really that simple!