多字缩写扩展

时间:2013-01-20 16:47:37

标签: emacs

我找到了关于多字缩写的邮件列表message,但是 仍然无法扩展工作。

我定义了这两个缩写:

"agw"          0    "a great whale"
"a g w"         0    "a great whale"

在“agw”工作后按空格键,但不是“a g w”。但是,如果我打电话 (abbrev-expansion "a g w"),然后返回正确的扩展。

问题是如何让Emacs向后搜索一个单词边界?

是的,yasnippet存在并且我使用它,但是缩写更加无缝(例如按 “1/2”后的空格将其变成unicode的一半)。我也不想改变 语法表。

2 个答案:

答案 0 :(得分:0)

SPACE,在插入之前,将在点之前寻找缩写以进行扩展。它使用`后向词',它将在前一个空格处停止。因此,SPACE不能扩展缩写内的空格。

答案 1 :(得分:0)

正如安德烈亚斯所解释的那样,它不起作用,因为默认情况下,缩写只有在由“单词成分”和“”不是单词成分的字符组成时才有效。对于给定的表,您可以更改此规则,例如(abbrev-table-put <table> :regexp <regexp>),其中像"\\<\\(\\w+:?\\)\\W*"这样的正则表达式几乎会重现默认行为。

现在对于你的情况,你想要一个匹配“agw”和“agw”的正则表达式,但请注意它不应该匹配“dawg”的“agw”,它也不应该匹配“ag agw”,这使得这有点棘手。一种方法是将你的正则表达式定义为(concat "\\<" (regexp-opt '("agw" "a g w")) "\\W*"),这很简单,但它有缺点,它需要在你添加缩写时随时更改正则表达式。