Questions tagged «elisp»

与其他语言(尤其是与其他Lisp方言相比)有关Emacs Lisp作为一种语言的问题。也就是说,它是关于语言本身的问题。*请勿使用*关于*使用* Emacs Lisp的问题。Emacs Lisp是Emacs编辑器所基于的脚本和编程语言。

4
使用setq而不是custom.el设置变量的优点?
我看到很多人(扩展作者和其他人)通过setq以下示例提供配置示例: (setq foo 'bar) 这些参数通常使用定义defcustom,因此可通过进行自定义custom.el。 我通常custom.el用来设置它们。setq替代使用是否有任何优势,或者这两种方法大致等效?

6
我可以使用org-mode来构造我的.emacs或其他.el配置文件吗?
我的.emacs配置文件越来越大,我希望通过添加标题,子标题并能够像我使用Emacs一样隐藏或显示它们来获得更好的概述和结构org-mode。 我注意到我也org-mode可以在.emacs缓冲区中激活,并且可以添加标题并折叠它们。但是,如果添加org-mode标题(例如,以一个或多个星号开头的行),Emacs / Aquamacs是否仍可以从文档中加载Elisp代码? 我可以将所有内容保存在一个文件中,还是必须拥有一个.*org文件,然后定期将Elisp代码导出到另一个文件中?

3
如何将键盘宏另存为Lisp函数?
我经常需要执行需要多个击键的一组步骤。对于同一会话,可以将这些步骤记录在键盘宏中。 一个示例是将频繁执行的搜索/替换操作另存为键盘宏。但是当我退出emacs时,该宏丢失了。 如何将常用的键盘宏另存为Lisp函数? 为了简单起见,我想将用“ def”替换“ abc”的动作保存为一个函数,以便可以在emacs会话中重用它。

2
为什么elisp没有名称空间?
问:为什么elisp没有名称空间,我们如何获得它们? Elisp除了全局名称空间外没有其他名称空间,这导致了编码约定,即为所有全局函数,变量和常量加上唯一的前缀。 除了烦人的因素外,考虑到以下因素,这还令我感到震惊:1)强大的库和程序包数量不断增加,以及2)遗留不遵守前缀约定的传统函数和变量的持续存在,或者具有足够的特质,因此实际上并没有一个好的前缀选项可以使用。这也意味着定期尝试对较旧的代码进行合理化(例如从cl到的转换cl-lib)是一项艰巨的工作。(尽管我为清理感到高兴,但每次输入诸如此类的文字时,我还是会流下眼泪cl-find。) 我四处逛逛,看看是否能找出为什么elisp在使用了几十年后仍然没有命名空间,但对适度的收获感到有些惊讶。关于名称空间的Wiki页面很短。 Nic Ferrier对这个问题的处理时间稍长,并且在emacs-devel上也有一个相当新的话题。从2010年开始就有一个旧的Stack Overflow线程,讨论使用宏实现名称空间的可能性。宏方法的另一个示例可以在这里找到。至少有两种实现(在这里和这里,并在此处描述后者)。),但他们已经有两年没有看到太多活动了,而且我还没有遇到任何使用它们的图书馆。 我认为,如果添加名称空间很容易,那就已经可以了。所以: 向elisp添加名称空间的技术障碍是什么? 添加名称空间会破坏很多现有代码吗? 此功能是否需要有机地消除(对解释器本身的更改),还是真的可以通过宏在顶部构建?
40 elisp 

9
如何开始学习Emacs Lisp?
背景: 我主要是vi用户,并且正在转换为Emacs。 超越了基础知识,现在将其用于用C和一些计划编写R转换的Python编写代码。 二十多年前,当我在读研究生时,我写了(Common)LISP好几年了,但现在我已经严重失误了(可以打个招呼世界,仅此而已)。 题: 您对我这个位置的人有什么建议,以使其能够学习Emacs LISP环境并开始入侵Emacs。 是否应该阅读书籍,博客,资源和练习?

5
如何替换列表元素?
默认情况下,我在auto-mode-alist: ("\\.js\\'" . javascript-mode) (即使使用emacs -Q)。我想替代js2-mode的javascript-mode。当然,我可以使用assq-delete-all,然后add-to-list再次,但我不知道是否有没有更好的办法。 编辑:我明确不想使用自定义,我更喜欢init.el自己动手。

3
为什么“ let”在词法范围内更快?
在阅读dolist宏的源代码时,我遇到了以下注释。 ;; 这不是一个可靠的测试,但这并不重要,因为两种语义都可以接受,其中一种在动态作用域下会更快,而另一种在词法作用域下会更快(并且具有更清晰的语义)。 其中提到了此代码段(为清楚起见,我对其进行了简化)。 (if lexical-binding (let ((temp list)) (while temp (let ((it (car temp))) ;; Body goes here (setq temp (cdr temp))))) (let ((temp list) it) (while temp (setq it (car temp)) ;; Body goes here (setq temp (cdr temp))))) 看到let循环中使用了某种形式,这让我感到惊讶。我曾经认为,与setq在相同的外部变量上重复使用相比,这比较慢(就像上面第二种情况一样)。 我本可以将其视为无用,如果不是在其上方的注释中明确表示,这比替代方法(带有词法绑定)要快。所以...为什么呢? 为什么上面的代码在词法绑定和动态绑定方面的性能有所不同? 为什么let用词法形式更快?

3
如何知道何时或何时不使用变量名前的单引号?
我有以下内容: (setq some-variable "less") 我很困惑为什么必须将单引号与一起使用,boundp而不将其与一起使用bound-and-true-p。 范例1: (when (boundp 'some-variable) (message "some-variable is %s" some-variable)) 结果: “多变少” 示例2a: (when (bound-and-true-p some-variable) ;; Note that using single-quote causes error (message "some-variable is %s" some-variable)) 结果: “多变少” 示例2b: (when (bound-and-true-p 'some-variable) ;; Note that using single-quote causes error (message "some-variable is %s" some-variable)) …
31 elisp  quote 

4
何时对lambda表达式加引号?
问:如果,如果有的话,是很有用锋利引述lambda,当,如果有的话,我们一定不锋利引述lambda? 人们lambda以三种方式使用: 平原: (lambda (x) x) 引: '(lambda (x) x) 引号: #'(lambda (x) x) 该SO线程讨论了这三种类型,该SO线程说明了为什么不引用(NB:not sharp-quote)lambda,并且该SO线程还讨论了引用和尖引号之间的区别。 现在,对匿名函数手动节点和文档字符串lambda注意,lambdas为自报价: 形式的调用(lambda ARGS DOCSTRING INTERACTIVE BODY)是自引用;评估lambda表达式的结果是表达式本身。然后可以将lambda表达式视为一个函数... 因此,似乎(lambda (x) x)和#'(lambda (x) x)是等效的,但'(lambda (x) x)不是等效的(最重要的是,在字节编译时)。 似乎很少有人想用a 来引用lambda,但我不清楚何时应该(或不应该)用引号引起来: 引号lambda只是一个风格选择,还是在某些情况下引号实际上有用? 是否在某些情况下我们不能用尖括号将a括起来lambda,即这样做会改变代码的含义?
30 elisp  functions 


3
什么时候应该使用自动加载而不是require?
据我了解,require虽然它也可以加载单个功能,但它通常用于加载大块代码(类似于模块)。 另一方面,自动加载仅注册功能,并将加载推迟到执行时间。 我最近读了一篇提倡autoload专有使用的文章。 它是更好地autoload比require?每种情况都有哪些典型用例?

1
如何使用nadvice?
我的配置充满了建议,而且我不断听到有关新的闪亮简约nadvice.el包的信息。 我已经搜索了手册,并且阅读了源代码,但我会公开承认:我仍然不知道如何实际使用它。 在座的任何人都可以向我指出指南,或告诉我如何开始移植旧式建议吗?

2
exec-path和$ PATH
我在网上看到了一些示例,其中人们使用以下命令将路径添加到Emacs中的默认路径: (add-to-list 'exec-path "/usr/local/bin/") 我是Elisp的新手,我想我了解上述声明的功能,但是我有几个问题: Emacs 以什么顺序搜索执行路径?例如,它是否完全考虑$PATH(env。variable)的值(如果是,则在它之前或之后exec-path?) 如何设置多个此类路径?我可以继续串联它们吗?例如 (add-to-list 'exec-path "PATH1", "PATH2") 还是我应该做: (add-to-list 'exec-path "PATH1:PATH2:PATH3") 我还在GitHub上找到了这个有趣的包:exec-path-from-shell。为什么需要为此包装? 动机 有没有发现命令在您的Shell中有效,但在Emacs中无效? 这在OS X上经常发生,在OS X上,从GUI启动的Emacs实例继承了一组默认的环境变量。 这个库的工作原理是通过从用户的shell复制重要的环境变量来解决此问题的:它通过要求shell打印出感兴趣的变量,然后将其复制到Emacs环境中来工作。
28 elisp  path 

3
推送和添加到列表有什么区别?
我发现安装说明中的不同软件包都使用push或add-to-list(例如,将目录添加到load-path),我想知道它们之间的区别是什么,每种用法都有什么用。
27 elisp 

2
可选参数默认值
Emacs Lisp不对可选参数的非null缺省值提供语法支持。提供这些参数的推荐惯用法是什么? 为了阐明我的观点,这是一种过于明确的方式。 (defun command (a &optional supplied-b) (let ((b (or supplied-b default-b))) (command-body a b))) 推荐的样式是什么(如果有的话)?
26 elisp 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.