Elisp编程 - 什么是最好的设置?

Tho*_*ten 16 emacs development-environment elisp

Emacs中有各种很酷的编程语言模式,用elisp编写,但显然没有特别支持elisp本身.

由于粘液不适用于elisp,我问自己是否所有elisp代码都只是在临时缓冲区被黑客攻击了?在编写elisp时是不是需要像粘液这样的东西,还是根本就不存在?是否有人使用ECB和语义进行更大的elisp项目?

Rai*_*wig 28

ielm 是Emacs Lisp REPL:交互式Emacs Lisp模式.

M-x ielm 把你带到那儿.


Gil*_*il' 15

Emacs本身带有Emacs Lisp支持.基本到中间之类的东西完成(M-TAB),库搜索(M-x apropos),文件(C-h f,C-h v,C-h S),运行的代码在即时(C-M-x,M-:在运行的Emacs)直接操作.

史莱姆的主要目的是与外部流程互动.你不需要为Emacs Lisp(除非你正在开发不同版本的Emacs,但这是一个罕见的问题).

ECB和语义的功能主要用于大型项目(由多个源文件组成).人们不倾向于在Emacs Lisp中编写大型项目.

  • 甚至可以说Slime的观点是让CL开发几乎和Elisp开箱即用一样方便. (8认同)

Raf*_*ler 13

总是有emacs-lisp-mode,每当你编辑.el文件时都会自动加载(至少在Emacs 23中).这似乎是许多emacs lisp黑客用来编写程序的东西.它有一些很好的功能(比如编译或评估缓冲区,一些调试工具,分析).*scratch*缓冲区默认是从lisp-interaction-mode编辑的,这有点不同.

它并不像slime那样功能齐全(elisp的社区比普通的lisp小得多),但绝对有效.您必须浏览文档并尝试使用该模式以查看可以使用的功能类型.

  • 编写SLIME是因为elisp黑客想要的东西和edebug,ielm以及Common Lisp的相关工具一样好.这很难验证,但我猜想elisp程序员的数量远远大于Common Lisp程序员的数量. (3认同)
  • 因此有3种选择:用于交互式使用的scratch-buffer和ielm以及用于更"严肃"的elisp编程的emacs-lisp-mode.就在不久之前,我为elisp找到了大量的Yasnippets,即使是文件标题,也可能会进一步加速:http://www.emacswiki.org/emacs-en/AndyStewart_YasnippetTemplate#toc2 (2认同)

phi*_*ils 10

如上所述,Emacs已经是最终的elisp开发环境,并在内部为您提供了您可能想要的大部分功能.

如果您想要跳转到尚未加载的函数定义(并且缺少自动加载声明),您可能还可以使用ctags/etags为您的elisp代码库生成外部索引.M-x find-function RET除此之外.(我绑定到C-hC-f)

"apropos"功能是一般查找事物的关键.我使用以下绑定来方便访问:

(define-prefix-command 'Apropos-Prefix nil "Apropos (a,c,d,i,l,v,C-v)")
(global-set-key (kbd "C-h C-a") 'Apropos-Prefix)
(define-key Apropos-Prefix (kbd "a")   'apropos)
(define-key Apropos-Prefix (kbd "C-a") 'apropos)
(define-key Apropos-Prefix (kbd "c")   'apropos-command)
(define-key Apropos-Prefix (kbd "d")   'apropos-documentation)
(define-key Apropos-Prefix (kbd "i")   'info-apropos)
(define-key Apropos-Prefix (kbd "l")   'apropos-library)
(define-key Apropos-Prefix (kbd "v")   'apropos-variable)
(define-key Apropos-Prefix (kbd "C-v") 'apropos-value)

;; Use prefix arg (C-u) to see more results for a call,
;; or uncomment the next line to do this by default:
;; (setq apropos-do-all t)
;; See C-h v apropos-do-all RET for details.
Run Code Online (Sandbox Code Playgroud)

我也启用eldoc-mode并且我已经imenu-ido-goto-symbol绑定(但很少使用).

还有其他可能有用的库.我知道有些人例如发誓ParEdit.不可否认,搜索对于编写elisp有用的elisp库有点困难.我不确定Emacs Wiki是否有类别?


Dre*_*rew 6

  • 我通常emacs-lisp-mode优先使用默认模式*scratch*.99%的时间我甚至想要保存丢失的交互式测试(至少是暂时的),所以我经常使用的*.el文件比*scratch*.

  • 在与Emacs Lisp交互时,冰柱可以提供很多帮助.这里列出的方式太多了.以下是两个可以提出想法的概述:

http://www.emacswiki.org/emacs/EmacsNewbieWithIcicles

http://www.emacswiki.org/emacs/Icicles_-_Nutshell_View