让Emacs在更多点上前进单词停止

时间:2014-07-14 20:26:01

标签: emacs emacs24

我讨厌emacs的一件事是默认的单词移动。以下是我希望M-f停止(M-b应停在同一站点)的示例:

MyFoo myVar = obj->member.my_func(int some_arg);
^ ^   ^ ^   ^ ^  ^ ^     ^^ ^^   ^^   ^   ^^  ^

我正在使用带有Emacs Prelude的Emacs 24.3.1。我有subword-mode的一半解决方案,它正确地处理了驼峰的情况,另一半解决了M-fevil-forward-word-begin的问题,它正确地处理了所有非驼峰的案例。上面的例子。合并这两种解决方案是理想的,但subword-modeevil-forward-word-begin没有影响。

我也尝试修改语法表并使用forward-to-word代替默认forward-word并将其与子词模式相结合,但是1)普通不起作用(我添加的符号是仍然跳过;也许我做错了?),2)我必须添加大量已经与evil-forward-word-begin一起正常工作的符号,以及3)它只适用于一种语言的语法表,我全球都喜欢这个功能。

另外,我希望M-dkill-word)和M-DELbackword-kill-word)也删除上面示例中的停靠点。

我一直试图解决这个问题一段时间,我已经到处询问过,包括emacs和邪恶模式的IRC频道,但我一直无法找到解决方案。获得这种类型的单词运动将极大地提高我的工作效率。

3 个答案:

答案 0 :(得分:3)

我的syntax-subword模式几乎完全符合您的要求。

MyFoo myVar = obj->member.my_func(int some_arg);
^ ^  ^^ ^  ^^^^  ^ ^     ^^ ^^   ^^  ^^   ^^  ^

答案 1 :(得分:1)

我建议定义要分配给subword-forward-functionsubword-backward-function变量的函数,这些变量检查当前情况,然后调用邪恶函数或默认子字函数。

如果您向前移动,可以使用looking-at做出决定;向后,使用looking-back

答案 2 :(得分:0)

类似的东西:

(eval-after-load 'cc-mode
   '(loop for ch from ?A to ?Z by 1
       do (modify-syntax-entry ch "." java-mode-syntax-table)))