
The single most useful Emacs feature - rodw
http://stackoverflow.com/questions/60367/the-single-most-useful-emacs-feature
======
tptacek
hi-lock-mode!

Hi-lock lets you specify regexes to highlight anywhere in a file; it's like
domain-specific font-lock.

It's _astoundingly_ useful in code review. For instance, given a giant blob of
J2EE web handler code, I can eyeball one handler, recognize the annotation
mapping the method to URL syntax, and then punch in a hi-lock regex to light
up similar annotations everywhere in the file, then glance through the whole
file looking for color patterns. I can read any of those functions and
recognize the code that checks "am I an admin", hi-lock it, and then quickly
spot any function mapped to a URL that doesn't check admin credentials.

That's just one tiny use case. I used hi-lock so much I ported it into our
web-based code review tool. I converted one person to Emacs just to get that
feature (my office would be thrilled if someone could point out the vim
package that does the same thing).

CUA column editing (CTR-SPC arrow-arrow-&c type-type-&c) is probably my #2.

 _Late edit:_

Holy hell how do you forget magit! Magit is a near-complete UI for git; it
figures out what git repo you're working from, and then gives you up-to-date
status on the contents of your checkout, spots untracked files, allows you to
visually stage your commits, gives you single-key revert and a browsable repo
history.

Magit is one of the rare Emacs extensions that not only improves Emacs but
also the external service it integrates with. I am actually a better git user
(or, git is just better) when I've got magit running.

~~~
ludwigvan
Out of curiosity, do you use usually emacs for J2EE code?

I am an emacs user, but have been doing some J2EE stuff for the last few
months, and have been getting really annoyed by the IDE's lately, and I was
wondering if it was a wise choice to go with emacs for Java too.

~~~
ww520
For Java work, I use Emacs and command line tools.

~~~
jrockway
Indeed. Java is only different from the rest of the world if you use Eclipse
and think its defaults are sane. For everyone else, you write some sort of
build script that builds your project, and that's as easy to run from Emacs as
it is from anywhere else.

------
nyellin
It isn't an official part of Emacs, but _no_ Emacs user should go without
installing el-get, the meta-package-manager for Emacs.

<https://github.com/dimitri/el-get>

El-get can install and update elisp from git, svn, http, and EmacsWiki. (It
also wraps ELPA and apt-get where packages exist.)

If el-get doesn't have a recipe for your favorite Emacs extension, please
consider adding the recipe and pushing to GitHub. (It doesn't take long - most
recipes are only a few lines long.) Don't forget to issue a pull request for
the rest of us.

~~~
justinhj
I use package.el Any advantage to swapping to el-get?

~~~
nyellin
Yes, package.el doesn't install arbitrary snippets from anywhere on the
internet.

~~~
technomancy
It takes about five minutes to take a library that isn't packaged and publish
it on Marmalade, and then anyone can depend upon it.

el-get made lots of sense back in the day when package.el only supported
tromey.com, but now that there's a community repository I don't see the point.

~~~
nyellin
OK. My old complaints against package.el were as follows:

1\. Packages need to be updated manually by maintainers. I can't use
package.el to install the master branch of my favorite project on GitHub, or
an old snippet on EmacsWiki.

2\. Marmalade (the community repository) has licensing requirements for
package inclusion.

Are those two assumptions incorrect?

~~~
technomancy
> 1\. Packages need to be updated manually by maintainers.

Yes, but considering uploading new versions can be done with M-x marmalade-
upload-buffer, generally Marmalade encourages short release cycles. So there's
not much reason to ever work from master unless you're hacking on it yourself,
in which case you already have it checked out.

> 2\. Marmalade (the community repository) has licensing requirements for
> package inclusion.

This is not specific to Marmalade since Emacs itself has licensing
requirements. Every elisp library is a derivative work of Emacs itself,
therefore it must be distributed under the same license.

EDIT: Perhaps you're thinking of elpa.gnu.org? That repository requires
copyright assignment for libraries to be included, but Marmalade does not.

~~~
nyellin
OK. I was wrong about licensing requirements.

I think you're slightly confused about el-get's purpose: it isn't to replace
package.el. el-get supplements package.el and provides options for people who
want to run the latest and greatest versions of libraries, or who can't be
bothered to monitor the odd elisp snippet and update Marmalade every time it
changes.

Personally, I find el-get recipes so easy to install and create that I never
use package.el at all, but that isn't the _goal_ of el-get developers.

Here is an example recipe for el-get. I haven't tried creating uploading
anything to Marmalade yet, so I can't compare the ease of use.

[https://github.com/dimitri/el-
get/blob/master/recipes/evil.r...](https://github.com/dimitri/el-
get/blob/master/recipes/evil.rcp)

One last note: You may find that el-get lowers the barrier for contributing to
libraries. If you find the odd bug in a mode you use, the source code is
always checked out in ~/.emacs.d/el-get and it would be practically criminal
to not fix it. With package.el, you have to reinstall the library first.

~~~
technomancy
> Personally, I find el-get recipes so easy to install and create that I never
> use package.el at all, but that isn't the goal of el-get developers.

That's my main objection. If you write an el-get recipe, it benefits el-get
users. If you use package.el, all users (of Emacs 24+) benefit.

~~~
nyellin
You made me laugh :)

You're _right_ , of course, but only because the Emacs community chose an
inferior solution to begin with. Let the better package manager win. Don't
tell people not to use el-get because it is so convenient that they wont use
package.el anymore.

------
etfb
I love how every post on Stack Overflow that gets popular on Hacker News
always gets closed by SO admins as "not constructive". It's like they really
are annoyed when their stuff gets noticed by the world outside their walled
garden. What are they - hipsters? "I was a fan of internet startups before
they got popular, dude." It's bad enough on Wikipedia, which appears to
operate on the principle that a megabyte of hard disk still costs $100, but on
Stack Overflow it's just plain foolish.

~~~
thristian
Less cynically, Stack Overflow is about specific answers to specific
questions. Any question broad enough to be interesting to a site like Hacker
News is too broad for Stack Overflow, apparently.

~~~
etfb
Makes sense, but it's insane. More general answers are more generally useful
than specific ones, by definition.

~~~
thristian
Not always. The only question that the linked StackOverflow page can answer is
"What Emacs features did a self-selecting set of StackOverflow users find
particularly useful as of early December 2011". While it's quite possible that
somebody might someday want that very specific piece of information, I can't
blame Joel and Jeff for preferring that particular database-space had been
used to record a workaround or explanation for some uncommon error message.

------
markbao
For Vim users like myself, there's a related Stack Overflow Discussion: _What
is your most productive shortcut with Vim?_

[http://stackoverflow.com/questions/1218390/what-is-your-
most...](http://stackoverflow.com/questions/1218390/what-is-your-most-
productive-shortcut-with-vim)

~~~
rryan
The very phrasing of these two questions highlights the philosophical
differences between emacs and vim: "feature" vs. "shortcut".

------
jpdoctor
Good god. I've been using emacs since 1981 and this thread is teaching me
things.

~~~
mark_h
I've "only" been using it since 1998, but I always skim threads like this --
even lots of short articles -- because there's nearly always something new to
discover! Sometimes it's hard not to gush, but it's just such an amazing and
organic piece of software.

~~~
diminish
i was escaping it since 1992, and now i jumped into it while reading this..
and i admire.

------
avar
TRAMP. Being able to seamlessly remotely edit files and run remote modes.

At work I regularly edit files on 10-15 remote machines. But I never ssh to
them and run an editor. Instead I'll just visit them through TRAMP, run Magit
to commit stuff that I've done etc.

~~~
tikhonj
My coworkers often don't even realize I'm editing a remote file or working in
a remote shell. It's really that seamless.

Of course, sometimes _I_ forget I'm working remotely, and hilarity ensues. The
worst episode was in a recent school project. I thought "oh, I'll just finish
this on the train". And then, when I got on the train, realized I had actually
been working remotely. Oops.

~~~
technomancy
> It's really that seamless.

Not only is it seamless editing, you can actually use tramp to "cd" into a
directory on a remote machine using eshell.

------
calibraxis
Undo-tree handles all my undo'ing needs, and non-emacs users like looking at
its strikingly elegant tree visualizer.

(<http://www.emacswiki.org/emacs/UndoTree>) Scroll down for screenshot.

And follow-mode on a monitor turned sideways is pretty funny. Doubles your
vertical space (good for eyeballing logs and data dumps).

------
noelwelsh
The single most useful Emacs feature is the design of Emacs as a platform for
hosting ELisp. Without ELisp, and the OS and text editing services provided by
the Emacs run-time, none of these extensions would be possible.

Trite but true!

------
tjr
It's nothing unique to Emacs, but I get a lot of use out of M-q.

~~~
nixme
I use M-q (fill-paragraph) quite a bit when modifying comments in source
files.

Not sure why you were downvoted.

~~~
tjr
M-q is admittedly not very interesting. Just useful. :-)

------
jlongster
`ansi-term` is probably is for me. Integrating your terminal closer with your
editor is really amazing. Using `multi-term` to make it easier to handle
multiple terminals, and you've got a really nice integrated environment.

That's probably the killer feature for me.

------
jfb
The kill ring. I would marry the kill ring and have its babies. Why have other
editors not adopted this? Have they?

~~~
billswift
I wish the Windows Clipboard would implement a version of the kill ring. I
really, really hate not having previous cuts and copies available. As a rather
clumsy work-around I keep an emacs scratch file open on my task bar and copy
stuff I might need more than once to it.

~~~
jfb
Same with the Mac clipboard.

~~~
lucaspiller
The pro version of Alfred has this functionality built in:
<http://www.alfredapp.com/powerpack/>

~~~
jfb
I will try this out, thanks.

------
jbp
\- ido mode with ido-enable-flex-matching set. \- recentf-mode integrated with
ido. Too many to list.

------
RockyMcNuts
record and play macro (someone had to mention)

    
    
      C-x ( 
      <type some magic /> 
      C-x ) 
      C-x e
    
      M-x 99 C-x e 
    

(play macro 99 times)

~~~
tikhonj
Also note that

    
    
        C-u 0 C-x e
    

plays the macro until it rings the bell (e.g. runs out of buffer space or
tries to forward-search for a name that doesn't exist. This is great when you
don't know how many times it needs to be run.

~~~
vedang
^ This. super-useful under appreciated keyboard macro feature.

------
SonicSoul
on a side note, whenever i asked such open ended question on stackoverflow, it
would quickly get closed by some other user claiming that "there is no right
answer" and the question must be closed. But there are so many great open
ended questions on there that score so high among users. i guess it's a matter
of luck that some anal retentive person doesn't get to it first?

~~~
JeremyBanks
It's not exactly luck. Until today this question hasn't been active since
2009, when opened-ended questions were permitted. Now that it's been bumped
it'll be closed shortly.

~~~
smackfu
Closed now.

I'm actually surprised that someone hasn't gone through all the older
questions looking for stuff to close, given how rigid their mods tend to be.

~~~
rcthompson
The moderation is lazily-evaluated on-demand. Before today it was just a
moderation thunk.

------
ordinary
This is not really a _feature_ , as such, but it is a classic work-around for
one emacs' many silly defaults:

    
    
                ; Ask for y/n on all queries that normally ask for yes/no.
      (fset 'yes-or-no-p 'y-or-n-p)

~~~
tikhonj
I personally don't think that default is silly. I've noticed that some
(usually less important) questions use y or n already; the yes/no is reserved
for important ones. I don't mind having to type a bit more before recursively
deleting a directory, for example.

------
Semiapies
For newcomers, C-g is a delight (it certainly was for me). Especially with the
arcane reputation of Emacs, it was awfully reassuring to know how to get out
of whatever unfamiliar function I'd fat-fingered myself into.

~~~
jrockway
Well, it won't get you out of recursive edits. I remember visiting a
coworker's machine before telling him about those, and the modeline was
something like [[[[[[[[[[(CPerl)]]]]]]]]]].

ESC ESC ESC is a much better "get me out of here!" command to remember.

~~~
Semiapies
I haven't managed to get into such a position; I may not be as clever as your
coworker.

------
juanre
It's interesting that it's hard to explain, because the fingers will play the
chord by themselves and I need to stop and think to know what I am actually
typing.

C-x r k to cut a rectangle, and C-x r t to add one filled with, for example,
the comment symbol:

(C-space)this

to comment

C-x r t #

#this

#to comment

~~~
tikhonj
You can also use the M-x comment-region and M-x uncomment region to comment
stuff. If you use it a lot, just bind them to a convenient key stroke.

~~~
mark_h
Don't forget M-; is comment-dwim which usually does... what you mean
(uncomments the region if it looks commented, comments it otherwise)

~~~
rebelnz
This was my contribution to the SO thread! Super handy feature. I also use the
- highlight block - then 'C shift -' to undo in region

------
bitstream
The kill ring gets my vote.

Regional undo/redo is a close second.

------
justinhj
I use `self-insert-command' an awful lot. I'd say it was the single most
important feature.

------
dman
slime - emacs package for editing, running, debugging and enjoying lisp.

~~~
pjscott
It's the finest IDE I've seen for any language.

------
gnuvince
`C-u SPC` which pops the mark. This allows you to go back to different places
in your buffer quickly. For example, if you are editing a program and need to
add an import statement, you could do it like this: `C-SPC M-< [add your
import] C-u SPC` and you'll be back to where you were editing.

If you are using transient-mark-mode, you can use `C-SPC C-SPC` to active and
deactive the highlighted region. That'll still leave a mark.

~~~
basman
The nice thing is that many commands set the mark automatically. So in your
example, there's no need for the initial C-SPC.

~~~
gnuvince
True. I've just gotten into the habit of doing it manually in case I use a
command that doesn't do it.

------
kabdib
Keyboard macros.

Multiple buffers, and windows against them.

Followed closely by mode-specific buffers (c-mode, etc.).

Buffers with command shells are the bee's knees. I love those things.

------
paddy_m
for me it has to be comint mode and every mode that wraps comint. I run M-x
shell all the time, being able to use all my favourite editing commands to go
back through shell history is just killer.

------
xtacy
I like idomenu, which lists variable/function definitions in your file. When
you combine it with ido-menu, it's magic. Bind it to C-c s, and you get a list
of symbols you can navigate extremely fast.

The downside is that if the symbol locations change in a file, you'd have to
refresh it. :(

~~~
thurn
Sorry, is there a typo in here somewhere? Are "idomenu" and "ido-menu"
different things?

------
michaelty
C-x C-t

Transpose the current line with the previous line.

------
plq
I thought StackOverflow was done with such poll-type questions? I was sorry to
see the "Best Programming Comics" question go.

------
parbo
Undo in region saves me every day.

------
mmc
Too hard to pick one, it depends on the task. Maybe I'd go with M-x Occur.
Other candidates are regex i-search, registers, yasnippet,
kill/copy/(insert)string-rectangle, etc etc.

Also, emacsclient.

------
einhverfr
Hard to argue with C-x C-s being the most useful feature of EMACS.........
It's so useful people take it for granted ;-)

------
ww520
Breadcrumb for Emacs

------
T_S_
Ctrl-k

~~~
Semiapies
It's definitely up there for me, which I find amusing as I thought it was such
an odd action to mention early in tutorials - and yet it's so damn handy once
you get get it in muscle memory.

------
veyron
C-x C-c is to exit :)

------
gaving
M-! open <http://www.vim.org/>

------
kakuri
I can't switch away from Notepad++ to any editor that lacks instantaneous, no-
hassle (no extra key presses), buttery smooth current buffer word auto-
complete.

~~~
jrockway
Presumably you have to press a key to accept a completion. With dabbrev or
hippie-expand, you don't.

