VIM: All roads lead to CLI

Observations on text editors, code, and operating systems

Working with UNIX™-like operating systems tends to encourage similar behavior in it's users. In contrast to highly specialized GUI applications, these systems incentivize CLI application use by allowing the collaboration of processes via files and piping of text data from one to another. It's this environment that most often brings many developers into their beloved terminal of choice, taking advantage of a certain conformity of interface in working with CLI commands via command flags and options and symbols denoting their flow.

Despite this penchant many developers like myself have for our command line friends, many still find it hard to escape one class of application in particular - the IDE/code editor. There's a certain thrill of power that these applications give us developers. Making huge refactorings through handfuls of files, giving deep introspection at a hover of a mouse, realtime code analysis.

I used to be a diehard Resharper user in a certain part of my life, at this time, C# was my bread and butter, and I loved having this tool. While I was selling my soul to Microsoft™ each day though, I was jumping into explorations of dynamic languages like Python and Javascript at night. I remember needing tools for these alternative languages and found myself looking into tools like Notepad++, Sublime, and eventually Atom. I became convinced of the power of tools like this not just in making my life easier, but making explorations into non-mainstream technology easier to do even if they weren't perfect. One day I don't quite remember, I just stopped using Visual Studio. It wasn't that is was bad, or not usable, it's just that the collaboration of many people on an editor meant I was not as locked down by operating system or interest. It wasn't perfect, and many times for the sake of a debugging an issue a unit test couldn't identify or some specialized functionality I had to return to IDEs.

For years after using Atom, I came to realize that there's really not much a good editor needs to help you be efficient at a human level pace.

Let me say breifly before this next part I have nothing against someone who needs to use a tool for a functionality that can be acheived no other way. But i've begun to have this feeling:

GUI text editors are fundamentally at odds with the spirit of UNIX™

I offer that these tools are encouraging us not to think of our projects a commanded flows of text information. My most concerning observances are as follows:

I think these are symptoms of a philosophical problem that have expanded our concept of a tool to outside what's necessary. Don't get me wrong, I can recognize that these tools are useful, but I don't see these tools offering an order of magnituded greater level of capabilities than terminal based editors that are much more narrow in functionality and closer to the action in the shell that is UNIX™-like operating system's heart.

As trial and experience have smoothed my rough edges as a programmer, i've noticed that my personal outlook on coding projects has also started to become very terminal oriented:

The types of concerns I think should be relegated to a text editor are rather few:

For VIM in particular I have found these tools exceptionally useful:

I have been able to leave GUI editors behind for this set of functionality fairly painlessly. This article isn't meant as a rallying cry to destroy all GUI editors, its simply a challenge for you to explore how you use UNIX™-like operating systems. Being closer to how the system was meant to be used allowed me to write this whole article and publish it to to servers without leaving a single window using many apps that make no assumptions on who is using them. The real tasks that we use machines for are complex and varied, and we should question any tool that tries to lock us down into one way of doing things even if the chains do look pretty. On the final point of aesthetics. I recognize the power of being surrounded by beautiful symbols that encourage what we do. Before I leave I offer a few suggestions people to take a look at to spruce up their terminal experience:

Read more by Richard Anaya