将字符定义为单词边界

Mal*_*rba 5 syntax emacs

我已经将\角色定义为乳胶模式中的单词成分,我对结果非常满意.困扰我的唯一事情就是把一个序列\alpha\beta视为一个单词(当然这是预期的行为).

有没有办法让emacs将特定字符解释为单词"starter"?通过这种方式,它始终被认为是跟随它的单词的一部分,但从不是它之前的单词的一部分.

为清楚起见,这是一个例子:

\alpha\beta
^          ^
1          2
Run Code Online (Sandbox Code Playgroud)

如果该点是,1我按M-d,字符串"\ alpha"应该被杀死.如果点是,2我按M-<backspace>,字符串"\ beta"应该被杀死.

我怎样才能做到这一点?

phi*_*ils 3

另一个想法:您的要求与camelCase 的要求
非常相似。subword-mode

您无法自定义子字模式的行为——正则表达式是硬编码的——但您当然可以复制该库并根据您的目的进行修改。

M-x find-library RET subword RET

这可能是一个非常强大的解决方案。

编辑:根据建议更新评论:

根据记录,在函数和subword.el 中更改[[:upper:]]to的每个实例效果很好 =) (只要“\”被定义为“w”语法)。[\\\\[:upper:]]subword-forward-internalsubword-backward-internal

就我个人而言,我更倾向于制作库的副本而不是直接编辑它,除非是为了使现有库更加通用,为此,最简单的解决方案似乎是将这些正则表达式移动到变量中 - - 之后,为了这种目的而拥有缓冲区本地修改版本将是微不足道的。

编辑 2:从 Emacs 24.3(当前是候选版本)开始,subword-mode 通过 newsubword-forward-regexpsubword-backward-regexp变量(用于简单修改)以及subword-forward-functionsubword-backward-function变量(用于更复杂的修改)来促进这一点。

通过使这些正则表达式变量在乳胶模式下具有所需值的缓冲区本地,您可以直接使用子字模式。