Hacker News new | ask | show | jobs
by barrkel 4236 days ago
Emacs's keyboard macros are one of its weaker areas, IMO. C-g cancels recording, but if you accidentally invoke the wrong command and end up in a minibuffer prompt, C-g is the reflexive way to get out of it - terminating the record. So you need to enter your command sequence with zero errors and no use of C-g for it to be of any use. I find multiple cursors more usable in practice, since you can see the results of various navigations simultaneously (at least for those instances that are visible on screen).

I use emacs because it functions the same on Windows, Linux, OS X and Solaris, all the platforms I use across work and home. I use it in the terminal rather than the GUI, because then it functions the same whether over ssh or locally - and no, TRAMP is not quite good enough. And finally, I use emacs because I've had it with learning a different IDE every couple of years. At this point, I want to invest my muscle memory and macro library in something with some longevity. I want something where getting my settings and modules all installed is no more effort than a git clone.

If I could pay someone for something that did all this for me, I would, but the solution would look a lot like emacs: highly scriptable, with a consistent terminal interface across all 4 platforms I use. Ideally it would use a much stronger, faster version of Lisp, although its dynamic scope lookup is actually convenient for layering new behaviour on top of existing code.

(On switching buffers, I use helm + projectile, which does incremental filtering search over file names. For navigating projects, I find helm-git-grep is often more useful than trying to remember a file name - this is an incremental regex search across the whole project, using git grep. No other IDE I use is quite as quick to switch buffers as my emacs config.)

3 comments

Multiple cursors only seem to work for simple things, which is good enough a lot of the time. However, incremental search in a macro is very useful, for example.

C-( do-searching-ESC-deleting-etc C-)

There's a new Emacs StackExchange: http://emacs.stackexchange.com

Maybe it'll become enough of a database that it'll be much easier to figure out how to add the "missing" features in Emacs. Currently 720 questions. Let's see how often it's used.

What you would do with an incremental search inside a macro, I'm much more inclined to do with a regex search and replace. I generally only use search at the end of my macros, to find the next "instance" that need to be run over.
I don't know about vanilla emacs (because I don't use it), but when using emacs in evil-mode, you can record a macro to a register and then edit the register. That way you can correct your mistakes. You can also append to registers and combine registers, so you can continue recording macros where you left-off.

Since evil-mode is a vim-emulation mode for emacs, the above is possible in vim as well.

You can dump your macro to elisp without difficulty. That isn't the problem. Keyboard macros are at their best when you get to use all the regular keys that you normally would, so that you can reuse everything you already know, without having to learn a whole other set of commands. Both editing the resulting macros, and needing to treat C-g as fatal, break this.
I tend to jump straight to Emacs Lisp for anything more complex than trivial keyboard macros. It's well worth learning how to perform text manipulation in that environment.

I once programmed Emacs to convert an entire component of Windows Phone from Hungarian notation to something saner.

I do too. Trivial macros come up very often when I'm using editors other than Emacs - I'd typically create and play back one every few minutes in other editors - but far more rarely in Emacs. Like I said, multiple cursors fills a very similar hole better, because it's not as sensitive to a C-g in the minibuffer.