是否可以在emacs中添加注释结束字符?
我将使用我拥有的第一个代码并应用我想要的作为示例:
(defun smart-tab ()
(interactive)
1 (if (minibufferp)
1a (minibuffer-complete)
2 (if (eq major-mode 'emacs-lisp-mode)
(progn
(save-excursion
(search-backward "(def")
(while (not (looking-at "\s-*)"))
(beginning-of-line 1)
(indent-for-tab-command)
(beginning-of-line 1)
(next-line)
(when (looking-at (concat ".*" comment-start))
(next-line))))
(indent-for-tab-command))
(yas-expand)))
)
我想在函数前面的缩进区域添加一些信息,指示逻辑部分从哪里开始。
对于emacs-lisp是否可能,是否有一种简单的方法可以使用一些小技巧来考虑求值器跳过某些文本?
Emacs Lisp没有读取器宏(或任何其他修改读取器的方式)。但是你可以通过编写你自己的宏来代替defun
来做你想做的事情。例如,使用这个宏定义:
(defmacro mydefun (name args &rest body)
"Define NAME as a function.
Like normal `defun', except BODY may contain |comments|."
(labels ((uncomment (form)
(cond ((not (consp form)) form)
((and (symbolp (car form))
(string-match "|.*|$" (symbol-name (car form))))
(uncomment (cdr form)))
(t (cons (uncomment (car form))
(uncomment (cdr form)))))))
`(defun ,name ,args ,@(uncomment body))))
你可以写:
(mydefun smart-tab ()
(interactive)
|1| (if (minibufferp)
|1a| (minibuffer-complete)
|2| (if (eq major-mode 'emacs-lisp-mode)
(progn
(indent-for-tab-command)))))
(不可能使用,因为该字符对于Emacs Lisp阅读器已经具有意义。)
我不得不说,尽管如此,这对我来说似乎不是一个特别好的主意。最好把你的段落标题放在源代码右边的注释中:
(defun smart-tab ()
(interactive)
(if (minibufferp) ; 1
(minibuffer-complete) ; 1a
(if (eq major-mode 'emacs-lisp-mode) ; 2
(progn
(indent-for-tab-command)))))
这看起来和你的提案一样清楚,而且对于其他Emacs Lisp程序员来说更容易理解。