我已经定义了\
字符在乳胶模式下充当单词组成部分,我对结果非常满意。唯一困扰我的是像这样的序列\alpha\beta
被视为单个单词(当然,这是预期的行为)。
有没有办法让 emacs 将特定字符解释为单词“starter”?这样,它将始终被视为其后面的单词的一部分,但永远不会被视为其前面的单词的一部分。
为了清楚起见,下面是一个示例:
\alpha\beta
^ ^
1 2
如果该点位于1
我按M-d
,字符串“\alpha”应该被杀死。
如果该点位于2
我按M-<backspace>
,字符串“\beta”应该被杀死。
我怎样才能实现这个目标?
另一个想法:
你的要求很像subword-mode
提供驼峰命名法。
您无法自定义子字模式的行为——正则表达式是硬编码的——但您当然可以复制该库并根据您的目的修改它。
M-x find-library
RET subword
RET
这可能是一个非常强大的解决方案。
Edit:根据建议更新了评论:
作为记录,更改每个实例[[:upper:]]
to [\\\\[:upper:]]
在函数中subword-forward-internal
and subword-backward-internal
在 subword.el 中效果很好 =) (只要“\”被定义为“w”语法)。
就我个人而言,我更倾向于制作库的副本而不是直接编辑它,除非是为了使现有库更加通用,为此,最简单的解决方案似乎是将这些正则表达式移动到变量中 - - 之后,为了这种目的而拥有缓冲区本地修改版本将是微不足道的。
Edit 2:从 Emacs 24.3 开始(目前是发布候选 http://permalink.gmane.org/gmane.emacs.devel/157522),子字模式通过新的subword-forward-regexp
and subword-backward-regexp
变量(用于简单修改),以及subword-forward-function
and subword-backward-function
变量(用于更复杂的修改)。
通过使这些正则表达式变量在乳胶模式下具有所需值的缓冲区本地,您可以直接使用子字模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)