MAKING FRIENDS WITH ED(1) For the past two weeks I have been using ed(1) as my primary text editor at work. Previously, I used a very nearly plainly configured Emacs. The switch is owed to a few of my favorite characters on an IRC server I visit. They often post ed(1) commands alongside commands to use ed(1). For a long time I thought they were joking. Finally after they said "use ed(1)" for the bah-zillionth time I obeyed... I build WordPress websites. Code I write is in PHP or JavaScript, markup in JSX or HTML, package definitions in JSON, and stylesheets in SCSS. To my surprise, ed(1) performs well within each of these contexts and its related workflows. Although ed(1) takes very few commands they can each be very powerful. I have quickly learned how to adapt commands to the given syntax. It is nice being able to do this without learning a new "mode" or set of keystrokes... ed(1) is a line editor. A given file is modified through the accumulation of many commands. If I were very good at programming I might be able to use just one ed(1) command, `a', which appends all subsequent lines to the given file. But I make mistakes, generate new ideas, and refactor code over time. So I also make use of "c" (change), "i" (insert), "p" (print line), and "s" (search and replace) quite a bit. Initially I used these commands in a rather straightforward manner, like rewriting an entire lines with "c" to fix a single typo. Now I am more nimble. I get ed(1) to surgically target text using "s". I perform sequences of commands using "g". Incidentally, an efficient ed(1) programming experience is aided by other tools. In keeping with the spirit of UNIX (do one thing well), ed(1) does its one thing well without eclipsing the purpose of other programs. Happily, I have become a frequent user of: - less to view files - sed to search and replace - grep to find files containing certain strings - find to run many commands over many files - git to take risks without consequence When I used Emacs to code it was my only friend. I did everything inside Emacs. With ed(1), I have widened the social circle and I am glad for it for two reasons: my knowledge of the standard tools has improved; and, my workflow has become modular (I can easily swap one program for another (bat for cat, say)). Another new perspective brought by ed(1) is: there's a cost to every keystroke--either when it is first made or when it is future changed. ed(1) helped me tangibly grasp that cost, so now I challenge myself to keep it cheap. (Sometimes cheap means sloppy, poorly indent text that gets prettified by a linting program). Editing with ed(1) is efficient. I feel more oriented towards following logically sequential programming operations. I'm no longer gallivanting around buffers, wobbling my way over to some line or character I need to add or edit. ed(1) keeps me on task. The line editing style of ed(1) encourages me towards an economy of keystrokes and operations---I only run commands when I can anticipate the result. Further, my brain is uncluttered by configurations, complicated keystrokes, or a plethora of commands. Like a good friend, ed(1) is growing alongside me. I feel our conversations reaching greater depths and eloquence. And I know still more interesting chats lie ahead! Favorite commands so far ---------------------------------------------------------------------- `!less -N %' to view the current file in less. `s/some pattern/\' to split a line. `/some pattern/s/some pattern/a replacement' to replace all matches in a file. `G/some pattern/' to interactively replace. `10z20' to print the 20 (or some other number) of lines from 10 on. `.t.' to copy the current line.