Honestly, I never really had that much love for Emacs until relatively recently. I've always dabbled due to it generally having good support for most languages (including esoteric ones) but recently I got into it a lot more due to the fact that many of the new-ish OSS editors but Emacs has always been there and likely will always be there.
A few years back I got into Atom quite a bit since it checked all the boxes: extensible, open source, and it was very nice. Then VSCode killed it. And it seems more and more that VSCode is taking over, all the while inserting more proprietary code to the point where half the 'big' plugins don't work on Codium, only the proprietary MS distribution.
So I got back into Emacs but really worked on my environment. Stopped dabbling and started just forcing myself to use it. And it's honestly amazing. It checks off every box available in VSCode and more. And it's nice knowing that it'll always be there. I'm not against proprietary software per-se, but I definitely don't have a lot of trust in Microsoft.
(yeah, that model led to poor performance, but afaict that's a combination of (a) just JS things and (b) not putting any effort into the design)
> I definitely don't have a lot of trust in Microsoft.
Very wise, given the user-hostile stuff they've been doing in Windows recently...
> (a) just JS things and (b) not putting any effort into the design
This feels a bit self-contradictory, since one might argue a properly designed extension API must include process isolation, so naively-written extensions can't mess up the main loop. VS Code extensions are also in JS.
This is the same problem that, say, preemptive multitasking solves, and why Windows 3.1 crashed much more than '95 and XP.
I'm also a recent Emacs enthusiast. Many many years ago, I never felt productive with the navigation and keys.
Then, recently, I _really_ wanted to try org and thought "I'll force myself to use it". I started with Evil mode and Doom. I was blown away tbh. What I thought to be an "old" tool that would slow me down, is actually a massive booster (and fun!). My personal experience, of course.
I had a very similar experience, but I started with plain Emacs, and little by little adding what I needed. I was afraid of getting something really bloated, or not understanding how it all bundles together. I think it has paid off a bit, but the learning curve has been steep.
Evil/Doom never really clicked for me and I went back to Neovim because of it. There were always gotcha's or packages that didn't have evil support and the when the walls broke down it was kinda clunky. Now that you can script Vim with Lua (or Python/Ruby) I don't really think I care too much about Emacs' infinite extensibility.
And thanks to recent developments in cross-editor infrastructure projects like tree-sitter and LSP, editors like VSCode, Emacs, Sublime Tex, and even public nuisances like vim can all advance at the same time and benefit from each other's development work in areas where the editors aren't differentiated.
We're very close to a world in which we don't have N implementations of finding the start of a C function or figuring out what parts of a Python buffer are keywords.
Somehow, Microsoft managed to invent LSP for VSCode and then abandon some parts of it just a couple of years later -- e.g. python language server is dead, pylance is there instead, closed source, VSCode-specific and with prohibitive license. Most language plugins in VSCode don't use LSP anymore IIRC.
Pyright is the best thing I've ever added to my Python workflow. It's nuts how productive you can be with a good type checker and completions.
"public nuisances like vim"
Others here seem to have taken this as tongue-in-cheek. On the first read I took it as "I think vim is ridiculous". I'm honestly curious to know which it is (or if both are inaccurate).
Of course it's tongue in cheek. Vim is venerable high quality software that a lot of people love. Emacs people dunking on vim (and vice versa) is just an old traditional joke with no actual animus behind it.
> even public nuisances like vim.
I love vim (err… Neovim), and this was great.
we all love vim, especially to mock it absurdly
Which flavor of vi do you use? Spacemacs or Doom?
(Edit: Yes, this is a joke)
Vim is dn addiction. Difficult to quit
Spacemacs is bee's knees.
For people who ask, "why use text-only editors like vim or Emacs, when I can use a full GUI IDE?":
One of the reasons I haven't seen mentioned much is: I'm a touch typist, and I hate having to switch between mouse and keyboard! I have to take my attention off the screen. Slows me down. Disturbs my concentration.
With Emacs, I can work for hours without ever having to hunt for the mouse, or without even having a mouse plugged in. That's particularly nice for using my Ubuntu laptop on a lap desk, leaning back in my armchair. The best mouse is no mouse at all.
Yes, I know many IDEs have shortcut keys for some commands, but the basic assumption with GUI applications is that you have a mouse. Even if you learn the shortcuts, somehow you always end up having to use the mouse for some common task, e.g., to select a paragraph. That's why I never got to like a GUI IDE, despite having had to use Eclipse for years.
I found I am unique, I never learned to touch type but at the same time reaching for a mouse really slows me down. I realized years into using Vim that the reason I love it so much is that I can do all my editing from the keyboard and because it is a deterministic state machine (modal) I can have a mental copy of the editor running in my head while I'm not looking at the screen. This is important to me because I look at my hands while typing. When I use GUI editors like VSCode it pops up all kinds of fancy bells and whistles that when I return my eyes to the screen it no longer matches the mental model I had in my head and I have to do a huge context switch to re-sync; just like how I have to context switch when I reach for the mouse. Am I the only one has this method of typing/editing? Praise the creators for Vim and Emacs editors.
All these friendly gooey things want to help you by popping up this kind of stuff. But luckily, some of them let you turn it off.
I've told IntelliJ and Eclipse and VSCode to please stop popping up suggestions, and let me type Ctrl+space to summon them.
Aaaah. Much better.
Drives me crazy that these types of programs always want to fill in the closing bracket for you. Like, as soon as you type an opening bracket, it sticks a closing bracket there. Completely interrupts my train of thought, why would I want the editor to assume it knows what I want and write things for me? Maddening. Especially something that messes with my internal thought process around the syntax "tree" that I'm trying to work out. I always disable it, but I have no idea how people put up with that. In Emacs on the other hand, it just highlights the matching bracket for you, so you easily know to type when you need it. Accomplishes the exact same goal without being so intrusive. I think there's a UX lesson to be learned there.
I also find moving hand to mouse is a really frustrating context switch, so I ended up getting a roller mouse (https://www.contourdesign.com/product/rollermouse-red/) to use along with my main mouse. The idea is for lots of small things my hands stay at the keyboard but my thumbs can move the mouse so I don't incur a context switch.
You are unique, but not in this respect. I write the same way, with a mental model of the editor state an integral part of the coding process.
I'm afraid you are the only one
Honestly stunned. Thanks for sharing.
I find it amazing how common it is for programmers to not be touch typists (I mean typing without looking at the keys). Like, isn't that something you pick up by the sheer amount of keyboard time?
It is simple, really: There are also many piano players who cannot make confident and accurate movements on the keyboard without looking at their hands! My process learning how to type on a computer keyboard without looking was very much like the process I experienced while working on my piano skills over the years: You graduate from fumbling with your hands and exhausting switching between looking at your hands and the sheet music to sight reading to playing with your eyes closed (if you want to). Though a lot of advanced players can and do play without sheet music and sight reading at all, interestingly, a lot of those players then keep looking at their hands instead! because the music progression is strictly following their mental model of the piece.
I don't touch type in the sense that I don't hold my fingers on the home row the way I was taught back in school. My home position for my right hand is shifted by one column, and I never use the little finger for typing. My hands move around the kit more than what a touch typist would be do.
However, I still type easily without looking at the keyboard, and I'm about as fast as the average typist, perhaps faster.
Could I speed up more? Possibly, but I don't feel that I'm slowed down by typing speed, and I find my way to type better when one uses a lot of special characters, as is common when doing programming and accessing Emacs keys.
Most people get by with pseudo-touch typing. They have most of the speed down, and look down at the keyboard occasionally, but they do not have the accuracy that is displayed in true touch-typing.
That describes me. I described it once as 'highly advanced hunt-and-peck'. I did learn to tough-type in school, but I didn't touch a computer until the following year and simply forgot it all. That was 40+ years ago. I get by well enough.
That sort of blows my mind. How can you not learn to touch type? It will take you a month at most and it greatly improves life at a keyboard.
On the other hand, code is often not the only output. Tickets, design docs, bug repros, emails, wikis, user docs, etc. Touch typing can remove one source of friction there.
It won't take you a whole month. A simple way is to just use blank keys, and you'll naturally pick it up during the time you normally spend in front of the computer.
> It will take you a month at most
I always gave up after about a week, I've tried it twice or three times during the last 25 years. Like always, good (fast) enough beats perfection. And I'm a mathematician and programmer because I'm lazy :D
This is very much how I type as well. A couple of other factors for me:
1) I learned to type as a kid at the same time that I was getting into programming. So my typing style tends to optimize for quickly hitting numbers, operators, random punctuation characters, and editor movement/selection/command sequences every bit as much as ordinary letters. (And therefore, I tend to find obsessively staying near the home-row less useful.) I find that I type a little slower at pure linear prose, but a little faster at code than many classical touch-typist.
2) Since I was a self-taught typist who learned to type on a computer keyboard, rather than learned a formal touch typing method that was originally designed for typewriters, I've been comfortable since the beginning with backspace being available. It always used to annoy me whenever I had to take a typing class in school where they emphasized accuracy and dinged my typing speed an arbitrary constant amount for each typo. I can usually sense immediately by feel when I've hit the wrong key, smoothly hit backspace, hit the correct character, and then continue with almost no interruption to the flow of my typing. I usually don't even consciously think about those sorts of corrections.
Isn’t it distracting to have to look and visually think about the keyboard in the midst of working? Genuinely asking. I literally can’t imagine having to look at the keyboard. And how much of a commitment is it really?
I'm eternally grateful for Mrs. Walker's 2nd grade class, where they shoved us in a room full of Apple 2e's and made us play a typing game (and if you finished, you got to play Oregon Trail). I'm a bit surprised/disappointed that touch typing isn't universally taught in school.
I can type at warp 9, but never in my 30+ years with various computers and keyboards have I felt lack of typing speed or lack of laser focus on screen would be a drag on peogramming 'speed' or abilities even. However, it is a bit odd for someone spending few years behind keyboard not to pick up touch typing.. prime example being MDs.
I can type without looking but I still have trouble placing my fingers over the keyboard in the right initial place so I’ll often start a little off and I type so fast that I’ll type half a dozen characters before I realize and have to correct.
Most keyboards have a little raised bump on the F and J keys ;)
The MUD I was playing had the command "snuke". It was like "smile", but for when you positioned your right hand incorrectly
scbrg snukes happily.
That’s so cool! Not only you touch type, you also do not need to look at the screen!
I'm not that old (30's) but we were forced into learning how to touch-type throughout grade-school. Pretty much any white-collar work requires it. Getting through university basically requires it (even humanities courses; good luck writing long essays without it). It's shocking that anyone who went through school in a developed country can't touch-type.
Which developed countries have courses in school to learn touch typing?
I have never, ever heard about it.
Edit: by touch typing I mean having your index fingers on fj and from there using ALL keys without ever leaving the starting position, and yes that includes shift, alt and control and special characters.
I know very few people who are really touch typists (I am a proficient one), and I don't believe for a second people are taught touch typings, it's a skill that requires consistent training.
We had a touch typing class in the mid nineties in South Africa.
I told my teacher I don't need to touch type (I could already use a keyboard from tons of programming) so she said if I could beat her I could sit it out. I beat her and she kept up her end of the bargain.
However years later I wish I had just sucked up my pride and learnt it because I had to eventually anyway. It wasn't so useful for programming, but it's great for text (emails, etc.).
I find it interesting that in your view most people aren't touch typist. My experience (now in Australia) is that most people touch type. Although, there does seem to be a spectrum of purity. e.g. my fingers always remain on the home rows, but I use left shift for all capitals except Q, A, Z (when I'm using QWERTY).
Well I grew up in Canada. We had generic 'computer lab' classes (don't remember which subject it was associated with for most of those years) from kindergarten to grade 12. Touch typing was definitely drilled into our brains throughout.
And of course it's not a 'course'. 'Reading' and 'writing' weren't courses, but you learn them regardless. It's too basic to be a course. It's just stuff we learned.
Edit - the format for schooling here is for the first 6/7 years you have a single teacher all day long. That teacher teaches you every subject. And that included several trips to the computer lab per week. The next 6 years of schooling had 'courses' split up by teacher and time slots, but again, computer lab time in some of those courses. There was also a required course called 'CALM' (Career and life management I think) which included a very strong computer lab component. There were also CS-ish electives (equivalent to shop classes) where you learned CS, albeit at a very basic level. And this was during an era where most people didn't have computers at home... So computer labs were always open after school hours.
Edit 2 - Anyhow, a lil random. But being able to touch-type at a specific speed on a test program was required to pass CALM and it was required for high-school graduation. Some kids could pass and then forget it all, but in general the entire schooling system here involves computers enough that most people can touch-type.
Edit 3 - My partner had a similar educational upbringing, despite being born under communism. Hell, she can touch-type multiple keyboard layouts (for other languages) on a US keyboard despite not being technically inclined...
How old are you? so I'm 35, USAian, and I had typing as a specific bit of course work (can't remember the program names) in elementary school (so 92-95ish?) and there was a class when I was a freshman in highschool (2000) that was 50% typing (different program, also don't remember the name) and 50% word/excel.
I'd absolutely believe that a lot of us on HN grew up in the narrow slice of time when computers were novel enough that people thought they should teach typing specifically, before that time: too niche; after that time: it's assumed we already know
It was included as part of the curriculum in certain classes I had in middle school.
As with most things in my education, most people including myself just put in minimal effort, to get the grade (which touch typing didn’t really effect, as it was not part of any homework, quizzes, tests, etc.) and after a few years you never had to see it again.
I’m 50, and I took a typewriter course in high school because it seemed obvious that keyboarding skills would be useful, although computers themselves were still somewhat niche.
It was called “computer class” but most of it was touch typing (you had to type with a cardboard box over your hands).
I learned touch typing as an exchange student in an US high school in the late '90s.
> Edit: by touch typing I mean having your index fingers on fj and from there using ALL keys without ever leaving the starting position, and yes that includes shift, alt and control and special characters.
Yes, we were taught that all throughout school... Is the US school system really that shit? I'm curious where your scepticism is coming from?
Like really, I didn't know a single kid in university who couldn't consistently type 60 wpm. 40 wpm was literally required to pass high school, pretty slow, but not something you can do staring at the keyboard punching keys one by one. The kids who were really good at it were touching 100wpm. I could get highs of 80-90.
I can count on one hand the amount of people I've met who can't touch-type...
I suppose it depends on your definition of touch typing. Back in the early 70s, before many people had heard of personal computers, I was planning a career in journalism. I had to learn my way around a keyboard, so I took a quarter of high school typing. It didn’t teach me to “touch type” in the sense of achieving 100 word per minute or whatever, but it was the solid foundation I needed for typing in college, in my (too brief) journalism career, in office work and systems admin work. I’m reasonably fast, and I don’t always look at the keyboard, and no one has ever complained about it.
You're assuming that most of the writing is done on computers - but depending on the discipline - it isn't : computers aren't nowhere nearly good enough to compete with paper / chalk (/ even whiteboard !) when it comes to mathematics-heavy domains.
Pure maths is a pretty small niche. The vast majority of while collar work, university students, etc..., definitely type and use computers constantly.
I'm a touch typist, but emacs chords always bothered me. I feel much more content switching to mouse or track pad for things like switching tabs, picking files from a file tree to copy / paste or duplicate or whatever, etc.
That said, being a programmer and not touch typing definitely sounds odd to me as well
emacs chords always bothered me
I got carpal tunnels a few years back from emacs, which forced me to try https://ergoemacs.github.io/ . I like it a lot, it's more sensibly designed. I've found it a pain to install though...
Spacemacs has saved me.
unfortunately I can only really work for long stretches on a kinesis split keyboard - with the modifiers all the on the thumb. if they would finally make a bluetooth one maybe that wouldn't be so bad.
I had a split keyboard and pretty quickly moved on.
The reason should have been rather intuitive, had I considered it. Splitting the keyboard allows a more natural position, but it still needs to be relatively static. Unfortunately, at half the weight, each side had less resistance to moving, especially with the inner stands kicked up at an angle. That meant more frequent fiddling to readjust the positioning, and lots of time wasted trying to decide if it was in the wrong spot, or if I hadnt yet adjusted properly.
also - they aren't really that great I hate to say. after a couple decades of using them I still get the firmware confused by excessive modifier usage and have to jam on all the keys to get it back again (spend a while with a support engineer trying to make it reproducible. they did try, that was something)
the keys don't actually last all that long. they will sell you a new flex/key assembly for the left or the right side though - which is nice...oh yeah, and the function keys stop working pretty quick if you actually use them.
but its so much more comfortable and speedy
remapping caps lock to control helped me with emacs chords
Touch typing isn't about writing without looking at the keys, that's something that pretty much every dev I know does. It's about writing in an efficient way that minimizes finger travel, and zeroes palm and writ movement.
There's a reason F and J have bumps on them, or why we have two shifts, etc.
For anyone interested into relearning how to type efficiently I want to recommend this free website full of tutorials and exercises: https://www.typingclub.com/
> There's a reason F and J have bumps on them
Actually that’s a regression. At one point some keyboards (Apple IIRC) put the bumps on D and K, which made it much easier to notice when your hands were misplaced.
It’s easier to notice that the wrong finger has the bump than noticing that no finger has the bump beneath it.
to operate and use a tui like emacs with confidence and start typing at the speed of thought:
consider putting a photo of your keyboard next to your screen and painting the keyboard a nice uniform black.
your body-mind's intelligence will swiftly learn to position your hands and coordinate your/its fingers without adding things to unlearn later.
the photo of your keyboard near where you are focusing when looking at the screen makes a huge difference, one could start with just that.
Yes, but I often work with different keyboards. The place I live has a couple of different stupid local variations, and then if I have an Anglosphere keyboard it's 50-50 between UK and US. Sometimes I change the "layout" and type as if I'm on a different keyboard, but usually the keys don't even physically match up. Then there are different types of keyboard, from super-compact to full numpad monsters and from chiclet to hefty mechanical, and then there's my shitty touchscreen phone.
I'd love to be able to type from muscle memory, but the keyboards keep changing!
I actually like it being a touch typist? Using the mouse gives me more movement and I like it. From my observation, there also seems to be a very high correlation between touch typing and carpel tunnel as well.
I literally trained the correct technique as a child because I was so into computers. I'd argue children today are far less exposed to keyboards than people (well, nerds) my age were.
Maybe but I’ve typing since I was a kid on a Windows 95 and I still only know the gist of the keyboard and have to look down and correct myself every minute or so, so I don’t that’s they only reason. I actually think that typing without looking isn’t as important as people used to say it was for speed.
It would be an interesting experiment to have one group do that before teaching both groups to touch type. Then measure the speed and accuracy of both groups.
I was programming since 80s and had never managed to learn touch typing. I am a vegetable in this department. My fingers do remember some key sequences so when I press first key I could usually master the rest of the sequence without looking but then I have to look again.
I could probably put a gun to my head spend a month and learn it but I do not really feel it slowing down my programming (I spend more time thinking and drawing some skeletons) so I've never bothered.
Also a keyboardist, and you can pry my emacs from my cold dead fingers, but I still think it would benefit from a bit more ability to incorporate platform-appropriate keyboard-driven GUI widgets/arbitrary drawing. For example, if the minibuffer could look like a regular GUI text field + a drop-down menu, or a floating command palette, I genuinely think it would be a nicer experience (and would make it "look more modern" which is not a terrible thing)¹. Similarly for the mode line and fringes. If some of the peripheral elements could be enabled to escape the "everything is a grid of characters" paradigm I think it would be a net positive.
¹I've tried mini-frame, and it's fine, but it's still just a utilitarian grid of text.
On your last point, in terms of absolute speed, pointing your mouse to the paragraph and dragging to highlight is usually faster than the fussiness of multiple key presses and/or chord combos needed from a full keyboard setup. That is, unless you've macro'd a custom single key shortcut for just that particular action
Emacs has a standard shortcut for moving around in terms of paragraphs, so you don't need to customize anything. It's these semantic(ish) movement commands that really let keyboard navigation shine—moving around in terms of paragraphs, code blocks, matching delimiters is not only productive but also combines well with other commands and keyboard macros, which makes a lot of repetitive things easy to automate in Emacs but difficult anywhere else.
I have no problem going keyboard to mouse, but mostly because I use a macbook with touchpad exclusively. Reaching my thumb down right below the space bar to use the mouse is really not a big deal.
+ and basically I would generalize this across to all the common actions people typically use that are often easier with a mouse. And can even be faster, even with the extra hand travel to the mouse.
It's worth mentioning that Emacs is not a text-only editor, but is able to function in a text only environment if configured to. I think many people never consider giving Emacs a shot because they think it's purely a terminal based program.
Modern Emacs can be (and mostly is) compiled with GTK support and features a GTK interface, but can be launched in text-mode with a command line argument. If you don't mind using bleeding edge versions, there is a branch called "PGTK" that allows the GTK interface to run natively on Wayland!
> If you don't mind using bleeding edge versions, there is a branch called "PGTK" that allows the GTK interface to run natively on Wayland!
The two biggest Linux distros (Ubuntu and Fedora) are Wayland by default now. And the 'standard' Emacs distribution you install through the Software 'store' in both is GTK (which of course works). Wayland support isn't really a big deal anymore. I haven't come across any apps that don't work on Wayland.
Yeah, it is GTK but not pure GTK! It uses X11 drawing calls for some elements so it needs XWayland on Wayland. Pure GTK might be coming with Emacs 28 by the way.
At least on Sway (with the scaling settings I use), fonts are a bit crap (blurry) on xwayland and perfect on native Wayland.
IntelliJ has a M-x equivalent and IdeaVim covers text editing. I literally never touch my mouse when using the IDE. I really don't think this is a compelling argument.
I just started using VS Code a lot last weekend and I didn't find myself using my trackpad much. The Vim plugin, whatever it's called, allowed me to do the same things I do in Vim itself. I can't speak to the Emacs emulation, though, now that I think about it.
To add to this: yes, full blown IDEs have shortcuts but they are hard to explore, counter-intuitive and hard to extend.
I think JetBrains has a great system to it.
cmd+shift+a opens a command palette with every possible command in the IDE. It matches as you type the name of an action, and every action has a keybinding shown to the right (if it exists).
Every relevant button generally has keyboard shortcuts right on them.
And pressing cmd+e opens a list of gui interactions you've made so you can repeat them (things like focusing buffers, clicking on a file in the project file tree, etc.)
Basically, if you know cmd+shift+a, you're golden for learning commands and key shortcuts.
In comparison, emacs/vim are pretty awful. I've done a few tutorials of each and while I could have spent more time learning them, JetBrains makes it stupid easy to start learning the editor.
Alt-x does the very same in Emacs. Every available command with tab completion and with the keyboard shortcut listed. I think showing the shortcut is new.
If you are not familiar what a particular command does you can use C-h f <function-name> to open the help page.
I think Emacs is really easy to learn after you get a handle of the navigation keys. Which you might already be familiar with from shell.
shift-shift brings up the same window, albeit with different prompts.
Never mind being "touch typist" I completely suck at typing in general. I think my cat could do a better job.
Still I hardly ever use mouse when using IDE's like Visual Studio C++ coding for example. It has shortcuts for everything.
I used emacs for a number of years and recently switched to doom-emacs as a base configuration. I got tired up of trying to fit together many packages and I found that doom is highly customizable but with sane and polished default.
I can recommend it to anyone that tried emacs but didn't like it.
Great to see lists like these. I’m a long time Emacs user and recently learned to use neovim. I made the same mistake many new Emacs users make in that I installed a lot of plugins at once and lost control of the editor. Only by installing packages incrementally after you have discovered a real need, can you keep mentally on top of what your editor is capable of.
This is a very good point. I first tried to jump in Emacs by using Spacemacs, and was overwhelmed trying to manage the fairly huge and complex init.el that Spacemacs produces. I also had lots of trouble before realizing that Spacemacs and vanilla Emacs package configurations should really be treated as separate and not mixed together.
I'm sure if I went back to Spacemacs now, I'd understand things a whole lot better, but as a new user, it was far too much to figure out at once.
So I went Vanilla, and haven't looked back. I do think that there should be some more articles out there like "so you've decided to try Emacs? Here's what to do beyond opening and saving documents". With a heavy emphasis on, as you said, incrementally adding to your configuration. Something like "here's why you split your config file into 2, with automatic changes going into one file, and manual going into another" followed by "here's use-package" and "if you want to X, here are Y packages that do it" with comparisons between each different way. But broken down into small chunks so things can be done incrementally.
I second this, I started with spacemacs, and then reinstalled clean emacs to get a good grasp of it.
I'm quite annoyed. I was working on a minor-mode because I tire of having to switch to my browser for asciiflow. Reading this article, it turns out artist-mode is built in to stock emacs. And it's quite good, better than anything I could build.
Discoverability problem? You don't say?
After spending endless hours in learning the ins and outs of Emacs and starting to learn Elisp, I come to realize that Emacs‘ tinkering-to-doing ratio is too high. I need tools that get out of my way. Emacs can get a hobby or an obsession. If you have nothing else to do, fine, spend your time sharpening the saw instead of cutting wood.
I turned to VS Code + PyCharm for coding. And use Emacs for editing text only. And for that, it is excellent.
What I love about Emacs most is the macro recorder. Whenever I have to transform text, I record my steps in Emacs‘ macro recorder and replay the steps. That’s like magic. I wouldn‘t even bother writing a Python script for these one-off transformations.
> I come to realize that Emacs‘ tinkering-to-doing ratio is too high.
You are in full control of how much tinkering you do, though. Strange to blame a tool for this.
But most of the things you do require a certain amount of tinkering, even basic stuff like setting up C indentation, making Emacs not use tabs, and configuring keyboard shortcuts - especially in the early days, when you might not quite understand how things fit together.
Compare and contrast with Visual Studio Code, which has a much smoother onboarding experience.
Agreed about the onboarding experience. However, the person I was replying to seems quite well versed in Emacs.
Much more strange when a tool blames its users for their unsatisfying experiences. It is tool is made for user, not the other way.
I love emacs because of org-mode. I have sometimes wondered whether emacs can do something I have often wanted. I write poetry. If you write with pencil on paper the edit marks (line through, move text, insert) let you see the evolution of a work. It's hard to get the same effect with a text editor. After reading this web post I went searching for "emacs edit history" and I discovered "undo-tree". This is a perfect functionality for my use case, and another reason for me to love emacs.
BTW, the author is using the Modus Operandi theme for Emacs. It's really easy on the eyes (high contrast) and comprehensive. Oh, and it's beautiful.
Shout out to Prot who maintains it.
I use it too, highly recommended
True, Prot is the man
Sometimes I wish I initially spent my time learning emacs. Vim has been great to me. I don't value programming workflows as much as I used to so I'm not going through that steep learning curve again
Try SpaceMacs, or even just Evil. I've found that Emacs (the text editor environment) and VIM (the language for interfacing with a text editor environment) skillsets are actually complimentary and together form a terrific text editor.
> Sometimes I wish I initially spent my time learning emacs. Vim has been great to me.
If spacemacs or evil seem too inauthentic or complicated, I suggest boon-mode. It's a very simple, modular, minimal modal editing package with verbs and motions.
And if you like modal editing but want to stick to a more emacs-centric interaction, there is God mode which I eventually found to be better than evil if you are working solely within emacs.
Conversely I feel I wasted my time learning emacs and moved to vim eventually. I also only religiously use a subset of vim functionality which is fulfilled by most of the vi equivalent editors. This turned into a massive advantage for me as I spent most of my career dotting around random Unix and Linux machines doing admin work. Vi derivative is always there and the muscle memory was ready to go.
One of the key things I found though is that I learned to compose tools outside of vi rather than rely on the editor functionality. This was applicable to much larger problem domains than just editing. The Unix philosophy of using lots of small well defined things to solve problems applies to editing text.
FWIW if I can ssh I can use emacs tramp to edit remotely, if there's latency lag, it seems similar to using local editor.
I've done SSHFS to fairly good success for this too.
I really like to use code-server instead
I think you get a lot just out of knowing modal editing. Sometimes I don't even realise what is emacs and what is vim because of evil keybindings.
You may like Doom Emacs. It has really really good Vim keybindings. Some people like Spacemacs too, but I found it too bloated and too abstracted (hard to fix when it breaks).
I still find myself reaching for Vim when I want to just write a simple script. Emacs, VS Code, etc. can just be too much sometimes.
I had a pretty full featured vim setup (creaking under the weight of all those plugins) and then switched to spacemacs. You're exactly right that debugging was a pain sometimes, but once I started to figure out what everything was, I wanted to replicate everything I had in vim.
I realised that if I'd started minimal I would have reinvented so many of the spacemacs wheels, but done it worse.
Spacemacs could do with being slightly more user friendly. It gives you a lot of friendliness already, but to prevent people from being frightened off by emacs' formidable reputation it really needs to "work" out of the box. For me that would be one click install and a reasonable suite of IDE-like features for working with a given language pre-configured. That would include scripting to install the command line tools that they shell out to, e.g. ag or rg.
Have you looked into emacsclient? If you have emacs running you can connect to it in the terminal so that there’s (practically) no startup time.
It replaced vim on the cli for me.
> I still find myself reaching for Vim when I want to just write a simple script. Emacs, VS Code, etc. can just be too much sometimes.
I used to do this too. What stopped me was that I often use emacs as a terminal multiplexer with vterm, and it becomes super difficult to control vim if you have evil-mode capturing those same inputs. In the end oh-my-zsh (more crappy bloat like spacemacs which I love to bits) has an alias called "e" which will open a file for editing in your current emacs.
(If only it worked through docker! Or maybe it does and I just don't understand TRAMP well enough yet.)
As far as I know, pure vanilla emacs from GNU comes with multiple vi emulations. I’ve been using viper for 20 years. It’s the only reason I use emacs at all. I had a co-worker many years ago who swore by emacs, but I found the key bindings completely counterintuitive having learned vi while getting my degree. Having made that discovery I was off to the races with emacs, and have never looked back.
Emacs is really just a beautiful refutation of the "Unix philosophy" that programs should only ever do one specialized thing. It's a kitchen-sink tool and it's very useful, and has been for decades.
I really respect people who can use emacs (and vim, vi etc...) they wiz around doing allsorts and make it look effortless.
The only reason I have not tried is I seem to spend most of my time thinking about the change, and the time saved is easily wiped out by the time taked to re-write the line 5 times.
You don't really have to. Try DoomEmacs or something similar, very little tinkering needed to get going.
https://prelude.emacsredux.com/en/latest/ and https://github.com/ianyepan/jetbrains-darcula-emacs-theme were the two "game-changers" for me getting me comfortable in emacs.
BTW. You do not need typing skills with Emacs, because it has an autocomplete. And it is subject and writer specific. Firstly you load some text containing words you want to use in another buffer and then you bind M-X hippie-expand to some convenient key. I use (global-set-key (kbd "å") 'hippie-expand) because Swedish å is useless in Finnish keyboard.
This works even better with languages with varying form and spelling. Finnish Android autocomplete gives mostly annoying and mispelled suggestions, but in Emacs you can use your own writings as the sublime storage of words.
Amazing that I have not used emacs in years but I wanted to see this artist mode with my own eyes, so I opened it and was surprised I could still remember how to get all around with the m-x commands... my muscle memory even remembered the combo to exit emacs correctly, and even as I type this, I couldn't tell you what that key combo is! It's all in my finger muscles' memory. Incredible.
This is what Emacs does to your brain. Dont know if that's a good or a bad thing, mind you.
My first serious Emacs engagement happened in 1996, with XEmacs. Then it became my editor of choice for basically two decades. I can confidently say that I can open your Emacs setup and manage my way around it (unless you happen to be an evil-mode infidel, that is).
Oh damn, I had no idea about undo-in-region. That's so convenient and it comes with Emacs stock. Wish I knew about that years ago.
I've been using Emacs for about 4 years now, and some of the stuff on this list was news to me. Thank you, OP, for sharing this; I found it useful!
Same, more than 10 years and I really should have known M-\ earlier :-) (or remembered it, I think I read about it earlier).
The thing is with Emacs, you can really optimize every key stroke if you want, but usually I'm too busy using it to program so I optimize the workflow only time to time.
Some of the very recently upgraded batteries in standard emacs include describe-bindings (C-h b gives a neatly organized, foldable output that greatly enhances discoverability) and emoji-insert that uses a neat selection interface.
For discoverability I love using helm with M-x (or SPC-SPC). I just think of a function I might like to call, like "git fetch" or "sort lines" or "render latex inline" or anything else, and pretty quickly I can figure out what it's called and what its shortcut is for next time. I take for granted that it exists.
Helm is great and I still use it occasionally even after I recently transitioned to using orderless, marginalia, consult, vertico, etc. for most things like that. C-h b has become my recent goto for inspecting the keybindings on various modes; I used to do C-h m, but the new interface of describe-bindings is neat.
326 lines long!
I use emacs for over a decade now. It took like 2 years and 3 serious approaches to get into it. Now it feels like home.
I didn't know about SelectiveUndo. Nice.
This is what I like about emacs see a few nifty things, easily add shortcuts and integrate, (selective-mode is useful for an outline of a file).
Power comes from being able to customize - add a easy shortcut to show outline, add another to back to non-outlined. Then use these to jump around code.
As someone that has always wanted to try stock emacs, this kind of a breakdown is appreciated. I know the individual systems aren't all that complex but when you're new to almost all of them it gets overwhelming quickly.
I think many Vim users look at Emacs and go “Hmm, Emacs is a bit more clunky when I use Emacs to do the exact same things I do in Vim. Therefore, I’ll stick to Vim.”
"It'd take me longer to figure out how to use emacs than it would to just do what I want in vim, and I'm really just trying to get to retirement before I lose my mind."
As a vim user, I mostly look at this article and think, "Hmm, Emacs seems to include an artists mode for drawing ASCII images. I need a text editor. Therefore, I'll stick to vim."
That's how I felt until I started using org-mode.
I think that Org-mode is now the fourth piece of software on my never-gonna-give-you-up list, after VIM, GNU coreutils, and Anki. I seem to add one per decade.
As a vi user, I got to artist mode and was wondering what keys you would press to draw rectangles and circles and how you would get out of it, but it doesn’t say.
Then you definitely wouldn’t be interested in M-x tetris.
Maybe M-x doctor could help, but maybe not...
How does that make you feel?
And there's nothing wrong with that opinion. As long as the basics aren't covered I don't care about extra features.
For me Emacs fulfills the same purpose as Vim, but mostly in exactly the opposite way of how I want it. Some people prefer that, I don't. It's a great program, but not my cup of tea and so I don't use it. Vim does everything I need without annoying or distracting me, which is rare enough.
I mean. Emacs has the ability to do basically what vim does. Evil mode is really nice (though I can never get used the = register evaluating elisp instead of vimscript).
What kills me about emacs is the startup time. Breaks my flow when I'm jumping around and need to edit something quickly.
Though I'll admit that doom provides a very nice environment for when I want to play around with some lisp.
Run Emacs as a server. Then open with emacsclient. Instant and you have access to the same process you've been using with all the buffers, etc.
Useful for when you have different contexts and want to separate them more cleanly.
emacs --daemon=<name> emacsclient -s <name>
Absolutely worth it, but it needs mentioned that bundled in Emacs is a sytemd job for launching the server at user login(!!!):
This means I never have to even THINK "I should boot the editor", because it's already ready.
systemctl --user enable emacs.service # For next login systemctl --user start emacs.service # launches it just this once
Add a keyboard shortcut for emacsclient and you're golden
Use emacsclient and don't close emacs server. Super fast startup (for emacs). There is a guide on emacswiki afaicr
I've had M-x emacs-uptime hit nearly 200 days before. It takes a little effort to get used to that style of working, but it's definitely handy once you do. (Also, I
in my shell.)
alias ec="emacsclient -n"
I use vanilla Emacs with 145 packages and my startup time is 0.9 sec on a 6 y/o thinkpad. With deferred evaluation, there is no need to use a daemon.
emacsclient can also talk to multiple emacs-servers by name. this is awesome to keep different sets of buffers available.
also, there's zile.
It's still not instantaneous like `vim .` is. Also it leaves me outside of my terminal. I know, I know, just don't leave emacs, but that's not how I work.
I appreciate the tip about zile though. That looks cool.
Check out Doom Emacs for a fast startup time with no server.
I mention using doom in the last line of the comment you responded to.
But, yeah. I use it for the start up time/vim compatibility out of the box.
Check out evil mode. Makes emacs behave more like vi. Game changer for me.
One of my pain points with evil mode (and with every vim emulation for that matter): it's often incomplete. To keep my fingers on the home row I use Alt to exit insert mode (:help i_META in neovim) but Alt- is already mapped to something in Emacs, and that's just painful.
That inward-spiralling learning curve never ends. `selective-display' is my new trick for the day. Thanks!
Last time I was coding, I used vim+tmux. I found terminal emulation in emacs slow and buggy.
I do always have a spacemacs window open, but I only use it for magit.
FWIW, I use emacs exclusively inside tmux, starts in ~0.3ms for me with more than 40 external packages.
I've always wanted to get into emacs, but I only have enough room in my life for a single set of keybinds, and vim has taken that spot. A lot of the emacs-for-vim-people projects are these huge distributions and when something breaks I have no idea how to fix it. Do any of you have a good resource for learning emacs from the ground up, but with vim keybinds?
I started using vim before switching to emacs, and my experience was that just installing evil-mode and then picking up any normal emacs tutorial was enough - I skipped all of the editing specific stuff and got the interesting stuff from the rest. You might want to try that.
Actually, your question made me realize that the interesting part of vim is the modal editing interface, while the interesting part of emacs is everything but the text editing bits. So, focus on those.
Does that help, or have you already tried this?
Some pointers that might be useful:
Best of luck!
Honestly, to just get moving, installing Doom emacs and selecting evil mode during setup. The basic keybinds are all Vim then, works great for me with minimal headache.
Is there a vim/tmux feature similar to pulse? I do lose my cursor sometimes when switching panes and I'd love to try something pulse-like to see if I like it.
Some cool stuff I had no idea exists! But I can't see anything I feel like picking up, I do like to keep it simple. I switched to Emacs after something like six years as a vim user, primarily for the more beginner friendly key bindings so my coworkers wouldn't get _too_ freaked out. Many of the navigation shortcuts work in most shells and even all text fields in macOS out of the box too!
I did implement all kinds of funky customisations at first, but in the last years I stuck mostly to what comes with Emacs, and customize over writing Elisp. I do some work in IntelliJ and Xcode out of necessity, but there's nothing quite as productive for me as vanilla Emacs and ansi-term. It's all just text - and mastering how to deal with text doesn't take that long, and is fairly universal.
One of my favourite and most trivial habits is to use forward/backward search extensively for navigating around a file.
For me the killer aspect of Emacs (it applies even more to vi) is being able to use it in a terminal so being able to use it over a network connection.
I know X can export over a network connection, but text mode Emacs is much simpler and does not require X.
I once used a little netbook at a conference in Germany on a crowded wi-fi connection to edit using Emacs within a terminal SSH connection to a desktop in the western U.S.
It held up surprisingly well. The Emacs terminal display system dates from the days of low-baud terminal sessions and so decouples screen updates from the editing input. I.e., it's smart enough not to try to fully update the screen on every keystroke when the terminal connection is slow -- not unlike dropping video frames to keep up. So you can type ahead with some lag and know that it will bring the screen up-to-date as efficiently as possible whenever it can.
Emacs is older than X11.
Batteries may be included, but some assembly is definitely required in learning all of the commands to make it useful.
I'm sure vim and emacs were great tools back when monochrome monitors were all that were available. But with modern UI IDEs and what not, I only use vim when need to make fast and dirty changes directly on the server. I do find all of things that can be done in emacs/vim quite impressive, but I'm also quite happy that it is not the tool I have to use because nothing else is available.
I do find myself getting environments backwards in my head though when flipping back and forth quickly. Like typing :wq in my IDE, or cmd-s in vim when prompts my terminal to save my session.
That text drawing mode is beautiful. Or of curiosity, entirely because my vim knowledge is far greater than that of Emacs, is there anything like it for vim, including two button mouse support?
Perhaps not the right thread, but: is there anything like 'follow mode' in other editors like Sublime Text/VSCode/Visual Studio editor? I'm now emulating that with e.g. 'new view into file' followed by manually scrolling. Having that autoamtic can be really handy.
Great article! I like the approach to focus on things that ship per default and take no time to learn! Also didn't know about undo in region!
emacs is like a musical instrument in program form. one is only limited by their creativity.
Very well done demos of some fun packages in emacs. Thanks!
I’m wondering if a vscode in the terminal could ever exist.
That's like wondering if elephants could ever roam the depths of the oceans. If they did, they would no longer be elephants.
What specific features of vscode would you like to see in a terminal editor?
About 15yrs ago I had a nice vim vs vstudio competition with a friend. It started with "look what vim can do"... block select, block indent, bookmarks, etc Vstudio (& now /vscode) can do too. Vim was always slower (mainly bc the guy wasn't seasoned by 10yrs of it) to figure it out. The interesting thing is that vstudio has the same abilities, but for the really arcane stuff (which vim users take as why it's better), can be done too, but just more keystrokes. Lots of the everyday stuff is often the same or fewer keystrokes than vim. And you can always write a macro for edge cases.
So to me, the "win" of vstudio is the tiny command pallete that is used & the shortcuts are displayed in menus. (& everyone mentions the difficult hill to climb to learn emacs or vim by comparison).
The thing which will never work in terminal is ctrl-c and ctrl-v. (Macos covers this nicely by using cmd-... tho). It's a shame.
I actually use le editor in terminal, but am rather cramped using it. I consider learning vim or emacs once every few years... and go... nah, no thanks.
Eg. There are a few comments above about region undo. In vstudio it sounds ugly, but it's trivially easy. Press and hold undo (ctrl-z) and let key repeat until the block appears as you want. Select it, copy. Press and hold redo. Select area. Paste.
Tastes are different.
> The thing which will never work in terminal is ctrl-c and ctrl-v.
If you enable cua-mode in Emacs, C-c and C-v work perfectly fine as copy and paste. Even in the terminal.
> There are a few comments above about region undo. In vstudio it sounds ugly, but it's trivially easy. Press and hold undo (ctrl-z) and let key repeat until the block appears as you want. Select it, copy. Press and hold redo. Select area. Paste.
That works in practically every editor. The entire point of region undo is that it's faster and more convenient than doing it manually.
Elephants can walk underwater using their trunks as snorkels. Maybe they would be too buoyant for it in sea water. It seems a fair thing to wonder though.
I’m not sure why not? Everything has a shortcut in vscode. And if it doesn’t you can use the command palette.
You might like VIM. In VIM everything has a shortcut as well.
In fact, in VIM, everything _is_ a shortcut.
https://github.com/zyedidia/micro With the disclaimer that I haven't tried it.. this tool aims at being a successor to nano.
There are many terminal web browsers.