The Return to VIM

“I’ve come full circle in my choice of text editor. After 10 years away, I’m back on VIM”

Posted by Tejus Parikh on September 18, 2016

Vienna, 7pm CET: A lone individual attempts to gain entry to a critical system in the United States via a redirection point in Amsterdam.

This could be the first sentence in a new cyber-espionage thriller. Or it could be the first sentence about regaining the appreciation for a console text editor. Yep, this is definitely about learning to use VI (well really VIM) again.

My first exposure to VI was in the Emory Computer Science program. Emory’s program was all about Unix. All the courses were taught on Sun hardware running the Solaris operating system. Intro classes were mostly in Java, the more advanced in Unix system call heavy C or C++. At a time when Microsoft dominated the business world and the available jobs, this concerned my father. In retrospect Emory’s program was prescient, I haven’t touched a Windows system in nearly a decade.

Bill Joy: Original photo by Squeakbox

The heavy Unix focus brought with it a strong emphasis on VI. The classes were taught in VIM, the materials on logging in remotely mentioned VIM, professors that launched Emacs were given stern looks. Of course, students could use whatever text editor they wanted, some switched to Pico, but first they would have to figure out how to exit VI.

At a time when Microsoft dominated the business world and the available jobs, Emory’s Unix focus concerned my father.

I was obviously one of the more advanced students and part of the privileged elite that dedicated themselves to deciphering the output of the :help command. We not only figured out how to exit VI, but launch VIM (VI iMproved). We discovered :set and .vimrc and figured out how to configure things like auto-indent and number of spaces in a tab stop. Over the course of the semester, our cohort learned the the ins and outs of the editor. Knowledge we could have gained with a conversation with the very helpful lab assistants or grad students, but I digress.

Armed with this advanced knowledge, it wasn't long before I discovered commands like "split," "vsp” (vertical split), and “=“ (format code). Explaining this in a chatroom to someone who was struggling with what they thought was a silly, cumbersome, and limited editor brought out the exclamation, "wow you're like the VI Jedi." (Immediately entered: /nick vi_jedi, never changed back).

“Wow you’re like the VI Jedi”

The Road Away

My entire Emory career was in VIM: all my projects, some of my papers, and my entire Master’s thesis. But this was 2002 and the world still ran on Microsoft Windows. We went to the ACM tournament, I sat down in front a Windows machine and was lost. Furthermore, I knew two programming languages, C and Java. I hated C and knew from the Internet that Java programmers used what’s called an Integrated Development Environment (IDE). VIM is powerful, but IDE’s knew what you were doing. They knew the syntax of the language, they could hook into version control systems, and some could even compile as you type (which is like spellcheck for your code).

On my next project, I used Eclipse, which carried over into my first set of jobs. I was a professional software engineer and had lost much of the need for editing files on a remote server. Eventually I ditched Linux for Mac and Eclipse for IntelliJ. I stopped writing as much Java, with more of my work in Javascript and Ruby. IntelliJ dropped by the wayside for Textmate and Sublime, but never all the way back to the command line and VIM. Right up until we started taking plane trips with my toddler daughter and the laptop was one hassle too many in airport security.

iPad: The Beautiful VIM Device

iPads don’t have to come out of the bag. An SSH connection, in this case provided by Prompt and a droplet, is all that’s needed to harness almost all the computing power in the world. This is how I found myself fixing a bug early in the evening, 5,000 miles from my computer, while my wife and daughter went out for ice cream.

Prompt in action

While the rust slowly wore off, I came to realize that I really missed using VIM and working from the command line. If you think about the life of VIM, for 40 years, hundreds of people have spent countless hours to make it do one thing incredibly well. They way it does things is non-standard, the learning curve is a sheer cliff, but once you know it, it’s great at editing text. Every keystroke has meaning, making it possible to edit a file on a loaded server or through a latent connection. Once you get immersed, you'll find yourself missing its core features in nearly every other editor. Even in my pro-IDE days I would spend time searching for at VIM drop-in that would give me the best of both worlds.

The Way Back

I’m a big fan of using the right tools for the job. When the job is writing code in a verbose, restrictive, and statically compiled language like Java, and IDE is the right tool. Today’s modern terse, dynamically executed, and extremely flexible languages just feel right when used in a similarly focused environment.

If you spend time working on computers, but have not spent much time working in the command line, you should give VIM a try. If nothing else, it’s a way to share in the experience of some of the computing greats. So much of what we build on today exists because of some code that someone wrote in Vi.

So much of what we build on today exists because of some code that someone wrote in Vi.

Beyond nostalgia comes the practical applications. Sure the Dev Ops Sages state that we are in a post-shell-login world, but that’s a little too idealistic. If you’re a software engineer doing important engineering work, you will eventual have to jump onto a server to see what’s going on and any Unix machine is almost guaranteed to have VI installed. Just to prove a point, if you are reading this on a Mac, open and type vi. Look it’s there (now type :q to quit). It’s ubiquitous.

To me, there’s just something that feels right about writing code in VIM. My hands don’t have to leave the keyboard to find the mouse just to move around the file. There is a command to do almost every manipulation that I might want to do. But, mostly, when I’m using VIM, I feel like a programmer building things. When so much of my job is not that, it’s nice to have a dedicated sanctuary of code.

Related Posts:

Tejus Parikh

Tejus is an software developer, now working at large companies. Find out when I write new posts on twitter, via RSS or subscribe to the newsletter: