Emacs24.4开始提供了一个新的minor mode:subword-mode. 它会改变基于word的命令的行为模式.

一般情况下,Emacs会以下划线`_`和横杠`-`作为单词与单词之间的分隔符. 所有的基于单词的命令:forward-word,backward-word,kill-word等,都是基于这个前提来操作的.

下面是一些例子(竖线|表示光标的位置):

;; 带-的单词|some-word;; 按一次M-f (forward-word)some|-word                                                 

;; 再按一次 M-fsome-word|                                                 

;; 按一次 M-b (backward-word)some-|word                                                 

;; 带_的单词|some_word                                                 

;; 按一次 M-fsome|_word                                                 

;; 再按一次 M-fsome_word|                                                 

;; 按一次 M-bsome_|word                                                 

;; 驼峰试的单词 (没有启动subword-mode)|someWord                                                  

;; 按一次 M-fsomeWord|                                                  

;; 驼峰试的单词 (启动了subword-mode)|someWord                                                  

;; 按一次 M-fsome|Word

个人认为,在开启了subword-mode后,Emacs对单词跳转的把握已经相当到位了. 尤其当进行Ruby和Lisp编程时,提供在复杂变量名的中间快速定位的能力非常有用. 但也不是所有人都喜欢这种方式.

当开启了superword-mode后,上面所有的例子,都当成是一个单词来处理. 例如:

;; 带-的单词|some-word              

;; 按一次M-f       some-word|              

;; 带_的单词|some_word              

;; 按一次M-fsome_word|              

;; 驼峰式的单词|someWord               

;; 按下M-fsomeWord|

需要注意的是,你不能同时开启superword-mode和subword-mode. 开启一个的同时会关闭另一个.

个人认为,superword-mode作为一个一直开启的mode,意义不大. 但在做一些特殊编辑时,会特别有用.