我讨厌emacs的一件事是默认的单词移动。以下是我希望M-f
停止(M-b
应停在同一站点)的示例:
MyFoo myVar = obj->member.my_func(int some_arg);
^ ^ ^ ^ ^ ^ ^ ^ ^^ ^^ ^^ ^ ^^ ^
我正在使用带有Emacs Prelude的Emacs 24.3.1。我有subword-mode
的一半解决方案,它正确地处理了驼峰的情况,另一半解决了M-f
到evil-forward-word-begin
的问题,它正确地处理了所有非驼峰的案例。上面的例子。合并这两种解决方案是理想的,但subword-mode
对evil-forward-word-begin
没有影响。
我也尝试修改语法表并使用forward-to-word
代替默认forward-word
并将其与子词模式相结合,但是1)普通不起作用(我添加的符号是仍然跳过;也许我做错了?),2)我必须添加大量已经与evil-forward-word-begin
一起正常工作的符号,以及3)它只适用于一种语言的语法表,我全球都喜欢这个功能。
另外,我希望M-d
(kill-word
)和M-DEL
(backword-kill-word
)也删除上面示例中的停靠点。
我一直试图解决这个问题一段时间,我已经到处询问过,包括emacs和邪恶模式的IRC频道,但我一直无法找到解决方案。获得这种类型的单词运动将极大地提高我的工作效率。
答案 0 :(得分:3)
我的syntax-subword模式几乎完全符合您的要求。
MyFoo myVar = obj->member.my_func(int some_arg);
^ ^ ^^ ^ ^^^^ ^ ^ ^^ ^^ ^^ ^^ ^^ ^
答案 1 :(得分:1)
我建议定义要分配给subword-forward-function
和subword-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)))