2009-11-29 76 views
1

我一直在嘗試emacs節奏模式,它似乎可以節省我很多打字(總是一件好事),但我沒有得到它的工作方式我想要的。在維基上,有一個類似於我想要做的elisp的例子,它按預期工作。下面是我測試的完整的.emacs:如何獲得emacs速度模式使用C/C++的縮寫?

(require 'tempo) 
(setq tempo-interactive t) 
(tempo-define-template "lambda" 
       '(> "(lambda (" p ")" n> r> ")">) 
       nil 
       "Insert a template for an anonymous procedure") 
(define-abbrev lisp-mode-abbrev-table "lambda" "" 'tempo-template-lambda) 

這讓我輸入「拉姆達」後面有一個空格,並讓它自動插入

(lambda () 
) 

在我的緩衝區與點上第一個右括號。

然而,用下面的代碼替換最後兩個SEXP的(通過塞巴斯蒂安Varrette從約阿希姆鮑曼被盜,修改由我):

(tempo-define-template "c-include" 
     '("#include <" r ".h>" > n) 
     nil 
     "Insert a #include <> statement") 
(define-abbrev c-mode-abbrev-table "c-include" "" 'tempo-template-lambda) 

不會導致模板鍵入「C-包括後要插入「後面是一個空格。這是在Ubuntu 9.04下運行的emacs 22.2.1。在我深入研究節奏代碼和/或(上帝禁止)C模式代碼之前,是否有人知道爲什麼會出現這種情況?

回答

1

define-abbrev的最後一個參數應該是'tempo-template-c-include。另外,我不知道,你可以在那裏有一個破折號,即它可能是cinclude,而不是c-include

(define-abbrev c-mode-abbrev-table "cinclude" "" 'tempo-template-c-include) 
+0

現貨。真正使我絆倒的是無法在縮寫中包含短劃線字符。 'tempo-template-lambda'的問題是我在嘗試這個時遇到的剪切/粘貼錯誤。非常感謝。 –

1

tempo的替代方案是yasnippet,我發現更容易建立有趣擴展。

+0

爲yasnippet +1 - 自然工作,幾乎沒有驚喜。 –

相關問題