[HN Gopher] Editing Code in Emacs
___________________________________________________________________
Editing Code in Emacs
Author : redpenguin101
Score : 100 points
Date : 2025-11-23 14:59 UTC (8 hours ago)
(HTM) web link (redpenguin101.github.io)
(TXT) w3m dump (redpenguin101.github.io)
| nine_k wrote:
| In short: turn Emacs navigation into Vim-like navigation, make
| the editing modal, and thus make navigation hyper-efficient. (If
| you like the idea, I would suggest taking a look at evil-mode if
| you come from Vim, or god-mode and devil-mode if you already are
| used to Emacs.)
|
| A few useful pieces of advice beside that, too. The workflow the
| author describes is not how I prefer to do things, but the author
| mentions a number of important capabilities to be aware of:
| operating at sexp level, subword motion, etc. Narrowing and
| folding, which I like to use, are not mentioned.
|
| No mention of LSPs or compilers, but these are their own large
| topic.
| emil-lp wrote:
| I've used Emacs for 20 years and I never learnt to navigate in a
| file except backwards and forwards search.
|
| Is there still hope for me?
|
| I think my biggest issue is that I am a slow coder and I never
| feel in a hurry.
| lvass wrote:
| Just type C-h t (help-with-tutorial) and work your way through
| it.
| redpenguin101 wrote:
| If your workflow feels comfortable there's really no need to
| change it in my opinion. The reason I do this is to avoid the
| frustrating feeling that I'm spending all my time moving around
| in the text file rather than actually making the program. It's
| less about speed and more about feeling good while programming.
| brabel wrote:
| You really only need a few shortcuts to feel comfortable. The
| ones in the basic tutorial are pretty much all I use, but I
| also enable god-mode to avoid having to keep Ctrl pressed as
| that hurts.
| final_aeon wrote:
| In my opinion there's no reason to stick to the "old school" /
| classic emacs controls. They're archaic at this point.
|
| I am an experienced emacs user and I still use CUA mode, arrow
| keys, and I wrote a package which completely overhauls built-in
| "word jumping" commands (called bbww on melpa.)
|
| You don't need to worry about upholding traditional emacs
| orthodoxy
| nothrabannosir wrote:
| Disagree with this just because it makes everything else
| easier. The more you stick to common key bindings, the more
| intuitive various packages will be. Eg navigating lines vs
| blocks in a magit diff block is C-n and N respectively. Copying
| a full hash is M-w. All these bindings are intuitive "overlays"
| on conventional bindings.
|
| Emacs shines when packages combine to form a whole greater than
| the sum of its parts. Changing basic key bindings is the
| quickest way to vitiate that symbiosis.
|
| Unfortunately.
|
| And while they may be old school, traditional, and orthodox,
| they are by no means idiosyncratic. They're widely supported:
| readline , bash, everywhere on macos, even modern browsers. Eg
| you can actually paste in bash: try killing something with C-w
| or C-k, and paste it back using C-y. Or transpose arguments
| using C-M-t. Navigate suggestions in Firefox using C-n and C-p.
| Bash even supports undo using C-/.
|
| All to say: learning emacs movement keys pays off.
| v9v wrote:
| Firefox opens a new window when I press C-n. Is this a
| setting that you have to enable?
| brabel wrote:
| The op is probably on Mac where emacs movements use Ctrl
| but FF and other apps use Cmd key, so they always work as
| there's no conflict.
| sbrother wrote:
| Honestly being able to use emacs movements everywhere is
| one of the reasons I stay on MacOS.
| jmclnx wrote:
| Seems to be an intro to a kind of but lite weight vi mode. I tend
| to like the regular mode in Emacs.
|
| Maybe a bit OT, but I think I saw here a week or more ago a post
| about magit, I am toying with using it, but seems to be a rather
| big package. Plus I wonder why dash is needed:
|
| https://emacsdocs.org/docs/magit/Installing-from-the-Git-Rep...
|
| In anycase to avoid downloading additional packages I may use
| Melpa
|
| https://emacsdocs.org/docs/magit/Installing-from-Melpa
| OhMeadhbh wrote:
| Meh. I'm not a fan of modal interfaces. But if it works for you,
| then knock yourself out. I appreciate the write-up here. I'll
| give it a try to see if I can see what the author is talking
| about. The overwhelming majority of code I write now is in
| snippets inside text documents (think Knuthian Literate
| Programming) so I don't know how that would work w/ the author's
| modal setup. But they went to the trouble of documenting it, and
| it seems sort of like what `vi` people are always yammering
| about. Seems a decent idea to try to understand it.
| iLemming wrote:
| > I'm not a fan of modal interfaces
|
| I'm assuming you're using Emacs (otherwise why would you be
| commenting in this thread, right?). It's weird to hear that
| from an Emacs user - it's inherently a modal editor - keycords
| are modal, isearch is modal, repeat-mode is modal, transients
| are all modals with states. Evil-mode only adds some consistent
| "language" and structure to deal with modality, there's nothing
| much to it.
|
| Idea of vim-navigation is actually pretty neat thing -
| absolutely beautiful, practical model. Its biggest problem is
| that it encapsulates some tacit knowledge - nobody can really
| explain the benefits of it to anyone until they try it for some
| time and it "clicks". I suppose just how learning to ride a
| bike may work differently for different people - it also takes
| different amount of time and effort. But once you figure it out
| - there's really no going back - no reason. It's very rare to
| meet people who've mastered it and then willingly stopped using
| it.
|
| There's no conceptual difference in switching between
| navigation and insert modes in Vim and e.g. C-c C-c/C-d in
| Emacs - the only difference that you're in-between state more
| often, but once muscle memory trained, it becomes second nature
| - you don't even think about what mode you're actually in - it
| becomes very fluid and consistent flow state that allows you to
| very efficiently navigate and deal with text - with any kind of
| text - plain and structured.
|
| Also, I find that mastering efficiency in Emacs using only
| vanilla keybindings is a bit harder than becoming a keyboard-
| maestro with the help of evil-mode or similar modal modes like
| meow. I've been working over a decade in various teams where
| people use Emacs, and evil-mode users typically figure out
| things much faster, while those sticking to native keybindings,
| don't even discover some great features of Emacs for years.
| mystifyingpoi wrote:
| I really like this, it's a bit hardcore, but for someone that
| really cares about efficiency (whether it is worth it or not -
| debatable), this is great.
|
| Though I have one minor nit against one point, that I've seen
| basically in every similar article:
|
| > This means no arrow keys and no mouse
|
| I use Neovim daily, and there is no denying that 98% of the time,
| using mouse is less efficient than doing a fancy search or jump.
| But for the remaining 2%, it's provably true that mouse is better
| - like, selecting an arbitrary block of code (without {} or any
| keyword to hang on). So I always recommend leaving the mouse
| enabled. Just use it when it makes sense.
| magackame wrote:
| How using a mouse and incurring a context switch is better than
| just mashing j/k a couple of times in worst case scenario?
| vinceguidry wrote:
| When you're not editing lisp.
| skydhash wrote:
| v, then t/T or f/F if staying on the same line, j and k if
| it's within a couple line, / or ? for anything else. With
| the repetition commands ./,/n/N if I do not land at the
| correct place.
| trelane wrote:
| If you're moving in emacs using per-line/character commands,
| you're definitely not using emacs as efficiently as you could
| be.
|
| So the distance in efficiency (and therefore efficacy)
| between mouse and keyboard is rather a _gulf,_ once you 've
| paid the cost of learning the extra emacs commands.
| redpenguin101 wrote:
| > But for the remaining 2%, it's provably true that mouse is
| better
|
| This is definitely true. The thing is that using the mouse is a
| habit, and until you break it, people find themselves
| instinctively using it in situations where it would be better
| to use the keyboard. So the 'hard' mouse disable is more of a
| 'going cold-turkey' type thing to try and break the habit. I
| agree that once it's broken it makes sense to relax this.
| dustfinger wrote:
| My favorite way to move around in Emacs, and to move text around,
| is via avy-mode: https://github.com/abo-abo/avy. If you have not
| experienced avy-mode, give it a try, I think you will wonder how
| you ever got along without it.
| globular-toast wrote:
| I don't think this was the first package to use the tree idea,
| but `avy-goto-char-timer` is amazing and is new since the first
| time I tried it. After activating goto with a key press you
| type as many characters as you like to get where you want.
| Often you can get straight there if it's something unique, but
| if not then it goes to the tree. It's amazing how quick you get
| at typing "def" or something to get to a Python function
| definition, for example.
|
| What I love about functionality like this is it's completely
| generic. It's just text. I don't need any lsp support to get me
| "go to def" or something. I can open a file in a language I've
| never seen before and use the exact same interface I'm used to
| to navigate around.
| skydhash wrote:
| I have it installed and have the main commands bound to
| convenient keys. But I'm so used to moving via words,
| paragraphs and isearch that the only time I remember it is when
| targeting symbols.
| Buttons840 wrote:
| I was excited for avy until I realized its purpose is only to
| move the cursor to a place visible on the screen. It does
| nothing a mouse can't do with one click.
|
| (This is my understanding at least; I'm open to correction.)
|
| I'm a lover of Vim bindings, and so I appreciate keyboard
| controls, but where Vim enables working with files and text in
| a general and powerful way, avy enables avoiding one click with
| the mouse. I don't use Vim to avoid the mouse, I use it so I
| can hack some Vim macros together when I'm editing text on a
| text-level. Vim (or Emacs) is an eternal tool that can do big
| things, avy just positions my cursor.
| dustfinger wrote:
| Don't underestimate the advantage of being able to move the
| cursor anywhere in a few clicks without having to take your
| hands off the keyboard. It is much faster than a mouse. Also,
| you can save your elbows the pain of constantly reaching over
| for the mouse.
|
| avy does more than just jump the cursor to a specific place.
| It also allows you search for, copy and move text round
| without needing to move your cursor to that text. It is
| extremely easy to use and very efficient.
| lvass wrote:
| Definitely not it's purpose. Avy can be used to select a
| word, line, or region. One action is move to it. But it can
| also, in it's own words, copy, yank, zap to, transpose,
| teleport, kill, mark, ispell, org-refile, and custom actions.
|
| https://karthinks.com/software/avy-can-do-anything/
| Buttons840 wrote:
| I've bounced off that blog post in the past, because it
| makes it appear the first setup to doing something in avy
| is to position all my files and "windows" (a "window" in
| Emacs terminology is an editing pane inside Emacs) in some
| clever way, and after I got all that setup, and the windows
| are all looking at just the right parts of the files, then
| I can move a paragraph from one window to another with just
| a few special keystrokes.
|
| I feel like moving from a large monitor to a small monitor
| would limit the usefulness of avy; it's weird that the
| physical size of a monitor would limit a tool like this.
|
| I almost never use windows. I almost never look at more
| than one file at once that fills my entire screen. Can avy
| still do things for me?
| jlouis wrote:
| It's really a selector or a filter. It's power comes from
| combining it with other tools.
| eichin wrote:
| Hmm, would be interesting to see a "race" between this and
| isearch; from the examples, it looks like this has an advantage
| only if you have lots of similar strings, so "the one you're
| looking at" vs. "typing more letters of the word" is an
| advantage? (externally timed, see The Humane Interface for
| details on how self-reporting doesn't actually work to measure
| this kind of thing)
| rickstanley wrote:
| Thanks for sharing. I've been off editor hopping for quite some
| time, nowadays I just use some pre-defined configuration like
| Doom Emacs, occasionally I try to build some environment, with AI
| help, from "scratch" for fun and curiosity.
|
| I really like Emacs' flexibility + evil-mode and reactivity,
| recently I searched for something similar and found Lem:
| https://github.com/lem-project/lem, looks promising, I'll try it
| out and compare with Emacs when I have the chance and time.
| tacker2000 wrote:
| You can also use a great vim "integration" in emacs by using doom
| emacs.
___________________________________________________________________
(page generated 2025-11-23 23:00 UTC)