2011-10-21 76 views
2

在emacs中使用yasnippet時,如果在應該觸發代碼段的密鑰之前沒有空格,那麼當選項卡被按下時,代碼段不會被擴展。是否可以這樣做:即使在它之前沒有空間的情況下片段也會擴展?yasnippets在密鑰前沒有空格時不會擴展

這是一個測試用例。做以下片段

# -*- mode: snippet -*- 
# name: \textsubscript (from fixltx2e) 
# key: tsub 
# -- 
\textsubscript{$1}$0 

並嘗試它。請注意,只要在tsub之前有一個空格就會擴展,並且它沒有被觸發,當tsub之前有一個字母時它不會被觸發。另外,請注意,如果標點或括號之前有正確的擴展名。

類似的行爲也被http://groups.google.com/group/smart-snippet/browse_thread/thread/0d08f2c90e24a94d/0a3d7c00d993a7ce?show_docid=0a3d7c00d993a7ce

回答

2

觀察內部,亞斯/段使用的功能skip-syntax-backward找到模板鍵。因此,片段密鑰必須通過不同語法類中的字符與前面的文本分開,以便識別它。語法類別包括'字成分','標點','空格'等。詳細信息是in the elisp manual

正如我所讀到的,這意味着如果要在另一個字母后面插入模板,則不能使用全是字母的鍵(即單詞組成部分)。

對你來說不是個好消息,但也許下面是一個可接受的解決方法?在實踐中,您會在之前調用片段,您希望將下標附加到該單詞上,而不是在之後的

# -*- mode: snippet -*- 
# name: \textsubscript (from fixltx2e) 
# key: tsub 
# -- 
$1\textsubscript{$2}$0 

這可能值得作爲錯誤或功能請求報告給yasnippet維護者。

+1

你可以將它作爲yanippet郵件列表的特性請求(不要使用googlecode問題跟蹤器,我將yasnippet移動到github),但我認爲它不會被添加。以這種方式尋找代碼片段效率極低**和**它不遵循作爲yasnippet基礎的TextMate行爲。我使用'#binding:\\'指令將多個類似乳膠標籤片段綁定到「\」。 –