[英]elisp macro to write a function?
我寫了一些幾乎相同的函數,除了它們的名字。 例如:
; x is name, such as function/paragraph/line/etc.
(defun my-x-function
(interactive)
(mark-x) (do-more-stuff) (modify-x))
有沒有辦法自動生成這樣的功能? 我有一種感覺這是宏做的,但我不知道如何使用它們。 任何幫助,也許包括一個小例子都會很棒。
謝謝!
是的,這正是宏所做的。 這是一個簡單的宏,它根據您指定的模式構建函數:
(defmacro make-my-function (name)
(list 'defun (intern (format "my-%s-function" name)) ()
(list 'interactive)
(list (intern (format "mark-%s" name)))
(list 'do-more-stuff)
(list (intern (format "modify-%s" name)))))
您可以將此宏復制到Emacs中的*scratch*
緩沖區並對其進行評估,然后檢查它是否像這樣工作:
(make-my-function x) ; type control-J here
my-x-function ; <-- Emacs's output
(symbol-function 'my-x-function) ; type control-J here
(lambda nil (interactive) (mark-x) (do-more-stuff) (modify-x)) ; <-- Emacs's output
更常見的是,可以使用反引用工具更簡潔地編寫宏,但是所有宏基本上以與上述示例相同的方式工作。
宏可以做到這一點,但有很多模板模塊可供emacs做類似的工作。 我使用一個名為yasnippet.el的東西來快速生成代碼。 例如,在C源文件中,如果我for<TAB>
鍵入,我會得到一個for循環模板; 它允許我填寫模板,設置變量名稱,限制和內部循環內容。
看起來像這樣:
您可以為喜歡的任何內容設置模板。 函數定義,if語句,switch語句等等。 為不同的模式設置不同的模板。 C語言中for
循環的模板與C#中for
循環的模板不同,依此類推。 非常便利。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.