Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

For instance, I want to convert "CamelCasedName" to "camel_cased_name". Is there a way to do this in emacs?

share|improve this question
The short answer to any question of the form "Is there any way to _____ in emacs?" is Always "YES" – Brian Postow Apr 9 '10 at 21:33
up vote 4 down vote accepted

This small bit of code from this page, with a wrapper function and an underscore replacing the hyphen with an underscore, could easily be turned into a command to do that. (Check that it treats leading caps to suit you):

Sample EmacsLisp code to un-CamelCase a string (from

(defun un-camelcase-string (s &optional sep start)
  "Convert CamelCase string S to lower case with word separator SEP.
Default for SEP is a hyphen \"-\".

If third argument START is non-nil, convert words after that
index in STRING."
  (let ((case-fold-search nil))
    (while (string-match "[A-Z]" s (or start 1))
      (setq s (replace-match (concat (or sep "-") 
                                             (downcase (match-string 0 s))) 
                                     t nil s)))
    (downcase s)))
share|improve this answer

Emacs has glasses-mode which displays camelcase names with underscores in between. (See also

If you want to actually change the text of the file M-x query-replace-regexp is probably suitable.

share|improve this answer

Moritz Bunkus wrote an elisp function to toggle between CamelCase and c_style

share|improve this answer
the package string-inflection is more complete now: (note that there's also string-inflection-camelize-lower to change hello_world to helloWorld). – Ehvince May 7 '14 at 12:42

For display purposes only, you can use this:

M-x glasses-mode

If you want a script which actually converts the text, I imagine you'd have to write some elisp. That question is better asked on stack overflow.

share|improve this answer

I was able to do this across a whole file quickly with just a query replace regexp.

The search pattern is \([a-z]+\)\([A-Z]\)\([a-z]+\) and the replacement is \1_\,(downcase \2)\3).

The replacement pattern uses elisp right in the pattern. This requires Emacs 22 or later.

In emacs documentation style:

M-C-% \([a-z]+\)\([A-Z]\)\([a-z]+\) RET \1_\,(downcase \2)\3)
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.