If you're like me, you'll usually have a lot of buffers open in emacs
. To
quickly switch between them, you press C-x b
(Ctrl-X
and b
), and type
the beginning of buffer name. This is made much more convenient with
e.g. ido
(see Switching Buffers) or icicles
. They allow you switch to a
buffer by typing just some characters appearing anywhere in the buffer name,
autocompletion etc.
The question for today is: what to do if am not searching for a buffer or file, but for some emacs command?
Often, I search for a certain command, ie. the ones that come after
M-x
. After typing M-x
there's autocompletion if you know the beginning
of the command… but maybe I remember only it was something with string
,
but exactly how? Was it replace-string
or string-replace
?
For these deep problems, there is smex (think: search-M-x). smex
brings
ido
-style completion to choosing commands.
After installing the smex package, you can put something like the following in your .emacs:
(setq smex-save-file "~/.emacs.d/smex.save") ;; keep my ~/ clean (require 'smex) (smex-initialize) (global-set-key (kbd "M-X") 'smex)
As you can see, I have set the keybinding to M-X
, that is (for most people)
Alt-Shift-x
; of course you could override the normal M-x
('execute-extended-command
', note the small x
), but usually the normal
completion is fine.
Admittedly, smex
serves a niche use-case, but I still use it a couple of
times a day.
[ Note that packages like icicles
and anything
can do similar things; they
do much more as well, and I haven't had the chance to play with those in
detail, so for the time being I stay with smex
. ]
10 comments:
icicles does that too without the need for any extra packages
@Anonymous: well, icicles itself is the extra package, or?
You have an extra parentheses closing the key binding function invocation.
It should read:
(global-set-key (kbd "M-X") 'smex)
@perusio: thanks, fixed.
That looks interesting though, I have always done it like this: I type M-x and then type an asterisk before the keyword I remember and it works in kind of the same way.
M-x *string
But it does open another buffer showing you the results so, taking that into account smex is much better. Keep up the good work! Nice blog!
It's not as flexible as these extra packages, but I like (partial-completion-mode t). Then you can do stuff like M-x q-r-r TAB, and it expands to query-replace-regexp.
Works for filenames also.
This is what I was looking for. Thanks :)
How does this differ from using the apropos command?
@finsprings: M-x apropos does not autocomplete.
If you want to make ido completion work in even more places, I've written some code for this that eventually grew into a full package:
https://github.com/DarwinAwardWinner/ido-ubiquitous
Post a Comment