簡體   English   中英

elisp宏寫一個函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM