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.
My Requirements
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.
The Basics
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
Where it gets really neat is that Atom is a self-described hackable text editor. Essentially what this means is that Atom is a desktop application built with JavaScript, CSS, and Node.js. It uses another GitHub project called Electron that provides the ability to build cross-platform desktop apps with web technologies.
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.
My Packages
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
Search for 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
Search for 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
Search for 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
Search for 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
Search for 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
Search for 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.
In Conclusion
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!
If you thought this was interesting, you might want to Join As a Member. This will ensure you never miss an article, you get access to exclusive member-only content, early-access to new projects and member-only events, and the possibility of winning free 1-on-1 workshops. It is entirely FREE and I will never sell your information or spam you (those people suck). Find out more here.