In a previous post I wrote about camel-case aware editing with subword-mode. Emacs 24.4 adds a complementary minor mode called superword-mode , which also alters the behavior of word-based commands when enabled.

Normally Emacs would consider underscores and dashes word separators ( snake_case and lisp-case anyone?). This affects all word commands - forward-word , backward-word , kill-word , etc. Let’s see a couple of examples ( | denotes the cursor position):

;; word with dash |some-word ;; press M-f (forward-word) once some|-word ;; press M-f again some-word| ;; press M-b (backward-word) once some-|word ;; word with underscore |some_word ;; press M-f once some|_word ;; press M-f again some_word| ;; press M-b once some_|word ;; word in camelCase (assuming subword-mode is not enabled) |someWord ;; press M-f once someWord| ;; word in camelCase (assuming subword-mode is enabled) |someWord ;; press M-f once some|Word

Personally I find the default behavior combined with subword-mode great. I do a lot of Ruby and Lisp programming and it also makes a lot of sense to me to be able to navigate the portions of a complex word, but I guess not everyone feels this way. Enter superword-mode - when it’s enabled all “complex/compound” words are treated as a single word:

;; word with dash |some-word ;; press M-f once some-word| ;; word with underscore |some_word ;; press M-f once some_word| ;; word in camelCase |someWord ;; press M-f once someWord|

Note that you cannot have subword-mode and superword-mode enabled at the same time. Turning one of them on will disable the other.