Emacs 是否可以在Lisp中为函数名使用别名?
…就像包裹一样 我使用Emacs(也许,它可以提供某种解决方案) 例如,Emacs 是否可以在Lisp中为函数名使用别名?,emacs,lisp,Emacs,Lisp,…就像包裹一样 我使用Emacs(也许,它可以提供某种解决方案) 例如,(定义非常长但很好的名称()…)在以后的代码中没有用处。但是像Fn-15这样的名称或首字母缩写也没有用。 在尝试调用函数名时,是否可以使用包的别名或访问文档字符串 换句话说,函数是否可能以某种方式混合使用自文档和短名称?如果您的问题是无法记住很长的函数名称,但您记住了名称的一部分,那么“apropos”就是这个意思。在我的Emacs中,我将“C-ha”绑定到“hyper-apropos”。您输入要查找的符号的子字符串,它列出
(定义非常长但很好的名称()…)
在以后的代码中没有用处。但是像Fn-15
这样的名称或首字母缩写也没有用。
在尝试调用函数名时,是否可以使用包的别名或访问文档字符串
换句话说,函数是否可能以某种方式混合使用自文档和短名称?如果您的问题是无法记住很长的函数名称,但您记住了名称的一部分,那么“apropos”就是这个意思。在我的Emacs中,我将“C-ha”绑定到“hyper-apropos”。您输入要查找的符号的子字符串,它列出了所有匹配项。您可以简单地拥有一个只调用另一个函数的函数 我不知道Emacs,但是(定义shortname longnamefunctionblahblah)不起作用吗?您可以使用
(defmacro…
来别名函数您想要的defalias
(defalias'newname'oldname)
将保留文档,甚至在请求文档时显示“newname是'oldname'的别名”。如果所有的键入都不希望继续使用长名称,那么是的,emacs可以提供帮助。退房在这方面,我们也考虑到了这一点
如果是可读性的问题,那就更难了 来自《论Lisp》?以下是代码:
(defmacro alias (new-name prev-name)
`(defmacro ,new-name (&rest args)
`(,',prev-name ,@args)))
; use: (alias df defun)
(defun group (source n)
(if (zerop n) (error "zero length"))
(labels ((rec (source acc)
(let ((rest (nthcdr n source)))
(if (consp rest)
(rec rest (cons (subseq source 0 n) acc))
(nreverse (cons source acc))))))
(if source (rec source nil) nil)))
(defmacro aliasx (&rest names)
`(alias
,@(mapcar #'(lambda (pair)
`(alias ,@pair))
(group names 2))))
; use: (aliasx df1 defun
; df2 defun
; df3 defun)
您可以使用
setf
将函数分配给另一个函数单元,例如:
(defmacro alias (new-name prev-name)
`(setf (symbol-function ,new-name) (symbol-function ,prev-name)))
你可能会丢失文档。我的问题是我想要短名称和描述,我想。Ctrl-H f defalias会在你需要的时候为你提供。上面应该是(defalias'newname'oldname)。
defalias
是一个Elisp函数-如果上面有@avp的注释,听起来他们使用的是公共LispVerdamelt,你完全正确,我把环境弄糊涂了。但那是很久以前的事了。。。事实上,尽管这个答案是完全正确的,我也接受它,但如果我不关心代码的大小,使用hippie expand会更容易。。。首先,它不是自动的。第二,我需要自己去关心它。第三,它很笨重…:(我要重复我对leppie说过的话。只是……我不知道……它看起来很难看。我的意思是,它需要努力,但提供的只是可读性。Abbrev mode&hippie expand可以毫不费力地完成类似的工作……但无论如何,感谢您的投入!感谢muyinliu的投入,但Allen已经回答了这个问题。Oto,这个解决方案要求我记住unn必要的细节,我更愿意避免。这甚至不需要是一个宏(defun别名(新名称前置名称)(setf(符号函数新名称)(符号函数前置名称))
。