As a hobbyist Python programmer, over the years I have tried a variety of different editors. Back in the day I used to use Eclipse with the PyDev plugin. I then moved on to use GEdit with a few extensions switched on. After that I moved to Geany. I have to admit, much to the shock of some of you, I never really stuck with Sublime, despite a few attempts.
As some of you will know, this coming week I start at GitHub as Director of Community. Like many, when I was exploring GitHub as a potential next career step, I did some research into what the company has been focusing their efforts on. While I had heard of the Atom editor, I didn’t realize it came from GitHub. So, I thought I would give it a whirl.
Now, before I go on, I rather like Atom, and some of you may think that I am only saying this because of my new job at GitHub. I assure you that this is not the case. I almost certainly would have loved Atom if I had discovered it without the possibility of a role at GitHub, but you will have to take my word for that. Irrespective, you should try it yourself and make your own mind up.
Going into this I had a set of things I look for in an editor that tends to work well with my peanut-sized brain. These include:
- Support for multiple languages.
- A simple, uncluttered, editor with comprehensive key-bindings.
- Syntax highlighting and auto-completion for the things I care about (Python, JSON, HTML, CSS, etc).
- Support for multiple files, line numbers, and core search/replace.
- A class/function view for easily jumping around large source files.
- High performance in operation and reliable.
- Cross-platform (I use a mixture of Ubuntu and Mac OS X).
- Nice to have but not required: integrated terminal, version control tools.
Now, some of you will think that this mixture of ingredients sounds an awful lot like an IDE. This is a reasonable point, but what I wanted was a simple text editor, just with a certain set of key features…the ones above…built in. I wanted to avoid the IDE weight and clutter.
This is when I discovered Atom, and this is when it freaking rocked my world.
Atom is an open source cross-platform editor. There are builds available for Mac, Windows, and Linux. There is of course the source available too in GitHub. As a side point, and as an Ubuntu fan, I am hoping Atom is brought into Ubuntu Make and I am delighted to see didrocks is on it.
As a core editor it seems to deliver everything you might need. Auto-completion, multiple panes, line numbers, multiple file support, search/replace features etc. It has the uncluttered and simple user interface I have been looking for and it seems wicked fast.
Stock Atom also includes little niceties such as markdown preview, handy for editing
README.md files on GitHub:
So, in stock form it ticks off most of the requirements listed above.
A Hackable Editor
Consequently, basically everything in Atom can be customized. Now, there are core exposed customizations such as look and feel, keybindings, wrapping, invisibles, tabs/spaces etc, but then Atom provides an extensive level of customization via themes and packages. This means that if the requirements I identified above (or anything else) are not in the core of the editor, they can be switched on if there are suitable Atom packages available.
Now, for a long time text editors have been able to be tuned and tweaked like this, but Atom has taken it to a new level.
Firstly, the interface for discovering, installing, enabling, and updating plugins is incredibly simple. This is built right into Atom and there is thankfully over 3000 packages available for expanding Atom in different ways.
Thus, Atom at the core is a simple, uncluttered editor that provides the features the vast majority of programmers would want. If something is missing you can then invariably find a package or theme that implements it and if you can’t, Atom is extensively hackable to create that missing piece and share it with the world. This arguably provides the ability for Atom to satisfy pretty much about everyone while always retaining a core that is simple, sleek, and efficient.
To give you a sense of how I have expanded Atom, and some examples of how it can be used beyond the default core that is shipped, here are the packages I have installed.
Please note: many of the screenshots below are taken from the respective plugin pages, so the credit is owned by those pages.
Symbols Tree View
symbols-tree-view in the Atom package installer.
This package simply provides a symbols/class view on the right side of the editor. I find this invaluable for jumping around large source files.
merge-conflicts in the Atom package installer.
A comprehensive tool for unpicking merge conflicts that you may see when merging in pull requests or other branches. This makes handling these kinds of conflicts much easier.
pigments in the Atom package installer.
A neat little package for displaying color codes inline in your code. This makes it simple to get a sense of what color that random stream of characters actually relates to.
color-picker in the Atom package installer.
Another neat color-related package. Essentially, it makes picking a specific color as easy as navigating a color picker. Handy for when you need a slightly different shade of a color you already have.
terminal-plus in the Atom package installer.
An integrated terminal inside Atom. I have to admit, I don’t use this all the time (I often just use the system terminal), but this adds a nice level of completeness for those who may need it.
linter in the Atom package installer.
This is a powerful base Linter for ensuring you are writing, y’know, code that works. Apparently it has “cow powers” whatever that means.
As I said earlier, editor choice is a very personal thing. Some of you will be looking at this and won’t be convinced about Atom. That is totally cool. Live long and edit in whatever tool you prefer.
Speaking personally though, I love the simplicity, extensibility, and innovation that is going into Atom. It is an editor that lets me focus on writing code and doesn’t try to force me into a mindset that doesn’t feel natural. Give it a shot, you may quite like it.
Let me know what you think in the comments below!