最近,我开始研究GNU/Emacs.是非常容易使用的程序.研究了它的结构.为我调好色.在C编程中将其配置为类.一切似乎都很正常.但现在问题出现在GNU/Emacs lisp上.如果我没有自己开发Emacs并且只使用它像ide进行C/C++开发,邮件,jabber等,我是否真的应该花时间研究Emacs Lisp ...
事实上,当我编辑我的.emacs时,我理解我写的.但我写的大多是现成的脚本,或者它的内容非常简单.
谢谢.
不,这不是绝对必要的.你可能会写的elisp,但大多只是设置变量和插入必要的片断为您要使用(任何模式或包setq,require等等).其中大部分是通过复制和粘贴完成的,因此不需要真正的elisp知识.
话虽如此,定义小函数可能非常有用,并且为此学习足够的Emacs Lisp可能会很有用.看看Xah Lee的教程,它简短而简洁.
如果您希望在文档中自动执行某种编辑,那么Emacs Lisp就是您的目标,其中通过UI过于繁琐或缓慢.
这是一个例子:我不得不在我的公司做一些重构.它涉及将一堆方法移动到一堆文件.为了帮助那些在转换期间合并我们的代码的人,我们在旧位置留下了"墓碑"评论,告诉他们新代码的位置.墓碑涉及评论整个函数(包括声明),删除函数体,以及在正文的位置放置注释.
经过一些这样的,还有几十个去,我准备把我的头发从无聊中撕掉.所以我把以下命令拼凑在一起并将它们粘在我的~/.emacs文件中.你或许能够得到他们所做的事情的要点,即使没有太多的评论方式.
(defun reheadstone-region (fname beg end)
(interactive "sFilename to use: \nr")
(save-excursion
(save-restriction
(narrow-to-region beg end)
;; comments around entire thing
(goto-char (point-min))
(insert "/*\n")
(goto-char (point-max))
(insert "\n*/\n")
;; zap the method body
(goto-char (point-min))
(search-forward "{")
(forward-line)
(push-mark (point))
(goto-char (point-max))
(search-backward "}")
(beginning-of-line)
(kill-region (region-beginning) (region-end))
(pop-mark)
;; new headstone body
(headstone-in fname))))
(defun headstone-in (fname)
(interactive "sFilename to use: ")
(save-excursion
(beginning-of-line)
(insert (format "\tThis method has been moved to %s." fname))))
Run Code Online (Sandbox Code Playgroud)
这是一个快速而肮脏的黑客,毫无疑问,它的操作远非完美.但是在加载它并将它绑定到一个键之后,通过在执行命令之前选择我想要的函数周围的区域来指导它,我做了一系列繁琐的编辑而几乎没有任何努力.此外,我从这个代码给我的即时满足中获得了快乐.我的同事们想知道为什么我看起来如此开朗,因为我轻松回家的路上,特别是在午餐时间看起来如此脾气暴躁.
这就是Emacs Lisp可以为你做的事情.我想你可以说这与"开发Emacs本身"没什么不同,因为从UI的角度来看,这些命令与Emacs的内置命令几乎没有任何不同,但心理效应却截然不同.我正在以非常具体的方式使用非常具体的命令扩展编辑器,以便为我的项目完成任务,如果没有完整的脚本语言和编辑器API,这将很难或不可能.从我的角度来看(我最近也看到了这个观点),没有Emacs Lisp基本功能的Emacs用户还没有成为超级用户.
我已经使用 Emacs 一段时间了,可以看出,如果您对正在使用的模式提供的功能感到满意,因此不需要改进它们,那么就没有真正需要学习 elisp。编写 emacs 配置需要一些 elisp,但是您需要的语言功能范围相当小。
顺便说一句,如果您想扩展某些功能,可以使用其他语言编写 emacs 脚本(例如 python、perl,不记得是哪些语言),因此学习 elisp 并不是那么重要。也许,您可以从这个 emacs wiki 页面开始了解更多信息:http://www.emacswiki.org/emacs/CategoryExtensionLanguage