1

複数単語の略語に関するこのメーリング リストメッセージを見つけましたが、まだ展開が機能しません。

次の 2 つの略語を定義しています。

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

「agw」の後にスペースを押すと機能しますが、「ag w」は機能しません。ただし、 を呼び出す (abbrev-expansion "a g w")と、正しい展開が返されます。

問題は、Emacs に 1 つの単語の境界を越えて逆方向に検索させる方法です。

はい、yasnippet が存在し、私はそれを使用していますが、abbrev はよりシームレスです (たとえば、「1/2」の後にスペースを押すと、Unicode の半分に変わります)。また、構文テーブルを変更したくありません。

4

2 に答える 2

0

SPACE は、それ自体を挿入する前に、展開するポイントの前に略語を探します。前のスペースで停止する「backward-word」を使用します。したがって、SPACE は略語内のスペースを展開できません。

于 2013-01-22T17:36:54.417 に答える
0

アンドレアスが説明したように、デフォルトでは略語は「単語の構成要素」であり、「 」が単語の構成要素ではない文字で構成されている場合にのみ機能するため、機能しません。このルールは、特定のテーブルに対して(abbrev-table-put <table> :regexp <regexp>)、正規表現"\\<\\(\\w+:?\\)\\W*"がデフォルトの動作をほぼ再現するようなもので変更できます。

あなたの場合、「ag w」と「agw」に一致する正規表現が必要ですが、「dawg」の「agw」と一致してはならず、「ag agw」とも一致しないことに注意してください。ちょっとトリッキー。これを行う 1 つの方法は、正規表現を として定義することです(concat "\\<" (regexp-opt '("agw" "a g w")) "\\W*")。これは非常に簡単ですが、略語を追加するたびに正規表現を変更する必要があるという欠点があります。

于 2013-03-01T14:18:43.137 に答える