We all have at least one or maybe even a handful of programs we seemingly just can't live without. You know, that program that you instantly go looking for as soon as you've installed your new shiny OS (or Linux distribution, more specifically in our case). For me, personally it's the Vim text editor.
I decided to narrow this down to Free and Open Source Software specifically, as while it's probably not necessary given our audience, it's always possible someone would jump up and say something like 'Adobe Illustrator' is their most essential tool! Which is fine in itself, some people do depend on such tools for their occupation or hobbies.
But we want to throw a spotlight on and celebrate FOSS here, as there are heaps (and I mean HEAPS) of great FOSS programs out there. Programs that many of us use everyday not only on desktop oriented systems, but on servers as well. Heck, a great deal of the time when traversing the great World Wide Web, we're interacting with websites running on a literal stack of FOSS software.
I'll start off and say without a doubt, one of my most essential programs is the venerable Vim Text Editor.
Vim Powers My Life
Slight exaggeration perhaps, but when topics of text editors and IDEs (Intergrated Development Environments) come up and I put in my two cents, Vim is the program that I'll mention.
I literally do everything text related in Vim. I'm writing this article in Vim, I wrote all the HTML, CSS and edited bits of PHP for The Linux Rain in Vim and everything else from BASH scripts to simple todo.txt text files, I do in Vim as well. Basically, if it involves text editing of any kind, including writing any sort of code, I use Vim.
It wasn't always this way, of course. Once upon a time I used a mixture of the simple Nano program in terminals and otherwise used whatever GUI text editor was available, such as gedit or kate. If I encountered Vim or it's older, slightly more bamboozling ancestor in Vi, for any reason (most distros ship either Vim or Vi, so it's not unusual to chance upon them) I entered a world of pain. The strange, seemingly other-worldly keybinds did things I didn't expect and were a cause of much frustration. Just trying to exit the program was hard enough!
But one day, I gave it a genuine try. Perhaps out of boredom or maybe I saw someone giving a glowing review of the power of Vim, I am unsure. But I gave Vim a genuine go and looked up some starter tutorials online, not to mention trying out the inbuilt tutorial that Vim includes out of the box. While undoubtedly clunky and just plain "weird" feeling at first, soon I started to develop a certain muscle memory with the way Vim works, to the point where it started feeling faster to manipulate text with than anything else.
Vim as a program IS clunky. Vim IS old. Vimscript and plugins system, equally so, though certainly useable. But yet, nothing more modern or fancy has managed to draw me away from Vim. Sure there are plenty of programs that try to emulate Vim's keybindings. GNOME's Builder is one of the latest new and fancy IDE-type programs I've tried out that features a Vim-like key bind system in the Preferences, if you want it. But still, it just ain't Vim.
Sure, the basic text traversing stuff is there, including the Insert Mode. You see, in Vim you can't just type any letters unless you first press the 'i' key to go into insert mode. When not in Insert Mode, the whole keyboard becomes a massive selection of instantly available functions at the press of a key. Pressing Shift + 4 (AKA the '$' key) will put the cursor at the end of the current line. Pressing 'gg' will put the cursor at the start/top of the text file, while 'G' (capital) will put it at the very end. The 'c' key is used to change something. So for example, typing 'cw' will (c)hange (w)ord, instantly erasing the current word under the cursor and putting you into Insert mode to write a replacement word. To get even cooler and more advanced, putting the cursor anywhere in a string of text surrounded by quotation marks can be deleted and changed instantly by typing the 'c', 'i' and ' " ' (shift + ') keys. A good way to remember this is (c)hange (i)nside the (") marks. That's a typical way Vim works with its keybinds and it eventually feels quite intuitive, even if the text editor as a whole feels anything but at first!
The 'Vim-likes' try valiantly, but the reality is, besides emulating some of the text traversing and manipulation of Vim through mostly similar key binds, they never have everything that Vim has. The Vim keybindings are a big part of what makes Vim, well, Vim, but it's not all. Vim also has the ability to interface directly with the terminal it's running on. For example, if I wanted to quickly attach the output of the terminal 'date' command, in Vim (in Command Mode) I can simply type
:read !date and it will append the output of the command into my current Vim document (or buffer, as Vim calls it).
Thu May 4 11:24:25 AEST 2017
This power can also be exploited if you find Vim's internal substitution isn't powerful enough. For example, there's nothing stopping you running a Perl regular expression on your currently opened text document, right from Vim itself, just by piping the Perl command into Vim. eg.
:%! perl -pe 's/something/someone/g', which would run a search and replace on the current file with Perl and replace everything on your screen with the newly modified text.
A good example of something I often use is the shell command 'wc' for word counts (or line counts, or whatever else you want that wc does), which I'll literally demonstrate now:
:! wc -w %
678 what-is-your-essential-foss-program.txt. The 678 number being the current word count at the time of the command being executed. In Vim, in command mode (using the ':' key), the exclaimation mark ('!') tells Vim you want to execute an external shell command.
wc -w obviously runs the wc command with the word count switch (-w). Finally, the '%' character is the special character Vim will use to run on the external program on the currently opened file. So, in human speak, we're saying to Vim, "run wc -w on my currently opened file" and return the output. And so it does.
I know what you're thinking - a word count, big whoop, probably any text editor or word processor has that function included. And you would be right, in fact Vim may well have it's own internal word count function that I was too lazy to look up, so I instead made use of a known shell program in conjunction with Vim to do what I needed. But that's the thing about me and Vim... I've still only scratched the surface of what it can do and what features it has. I'm far from a Vim expert, in fact, I probably only use basic functionalities, but it's enough for me. But I really just wanted to make the point that Vim does the whole "Unix thing" quite well, by allowing itself to be combined with other programs to do what you want.
Anyway, I don't want to waffle on too much or make this seem like a total Vim puff piece or review, but that is what stands out as an essential bit of software for me. It's not that there's no other programs available to do what Vim does. Quite the opposite, in fact. So essential in this case is more meaning on a personal level, as Vim feels like an extension of myself in day-to-day computing. A virtual swiss army knife, if you will, that just does everything I want it to do.
So, what is yours? It doesn't matter what the program is, as long as it's a program you just feel like you can't do your every day computing without, regardless of whether it's truly the best or most featureful. Yours doesn't need to be as 'nerdy' or so CLI oriented as mine - indeed, yours might be something like LibreOffice or Simple Scan! Which, funnily enough, are programs that I would happily give an 'honourable mention' to as well, but I didn't want to waffle on any more!