最近,我开始研究GNU / Emacs。是非常容易使用的程序。研究了它的结构。为我调好色。在C编程中将其配置为类。一切似乎都很正常。但现在问题出现在GNU / Emacs lisp上。如果我没有自己开发Emacs,我是否真的应该花时间研究Emacs Lisp,并且只会像使用它来进行C / C ++开发,邮件,jabber等...
事实上,当我编辑我的.emacs时,我理解我写的。但是我主要编写现成的脚本,或者它的内容非常简单。
谢谢。
答案 0 :(得分:8)
不,这不是绝对必要的。您可能会编写elisp,但主要是设置变量并为您要使用的任何模式或包插入必要的片段(setq
,require
等)。其中大部分是通过复制和粘贴完成的,因此不需要真正的elisp知识。
话虽如此,定义小函数可能非常有用,并且为此学习足够的Emacs Lisp可能会很有用。看看Xah Lee's tutorial,它非常简短。
答案 1 :(得分:5)
如果您希望在文档中自动执行某种编辑,那么您可以使用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))))
这是一个快速而肮脏的黑客,毫无疑问,它的操作远非完美。但是在加载它并将它绑定到一个键之后,通过在执行命令之前选择我想要的函数周围的区域来指导它,我做了一系列繁琐的编辑而几乎没有任何努力。此外,我从这个代码给我的即时满足中获得了快乐。我的同事们想知道为什么我看起来如此开朗,因为我轻松回家的路上,特别是在午餐时间看起来如此脾气暴躁。
这就是Emacs Lisp可以为你做的事情。我想你可以说这与“开发Emacs本身”没什么不同,因为从UI的角度来看,这些命令与Emacs的内置命令几乎没有任何不同,但心理效应却截然不同。我正在以非常具体的方式使用非常具体的命令扩展编辑器,以便为我的项目完成任务,如果没有完整的脚本语言和编辑器API,这将很难或不可能。从我的角度来看(我最近也看到了这个观点),没有Emacs Lisp基本功能的Emacs用户还没有成为超级用户。
答案 2 :(得分:2)
“否”中的简短回答,但是对Emacs Lisp有一定的了解会在某些方面极大地提高您的工作效率。
如果您决定花一些时间学习Emacs Lisp,我不能向您推荐一个比优秀书籍“Introduction to Emacs Lisp”更好的起点(它也与信息格式的Emacs捆绑在一起 - Ch im Emacs Lisp Intro)。
答案 3 :(得分:1)
我已经使用Emacs了一段时间,并且可以告诉您,如果您对使用的模式提供的功能没有问题,因此无需改进它们,那么就没有必要研究elisp。编写emacs配置需要一些elisp,但是您需要的语言功能范围相当小。
顺便说一下,如果你想扩展一些功能,可以使用其他语言编写emacs脚本(比如python,perl,不记得哪些语言),所以学习elisp并不是那么重要。也许,你可以从这个emacs wiki页面开始找到更多信息:http://www.emacswiki.org/emacs/CategoryExtensionLanguage
答案 4 :(得分:1)
在我看来,基本数量的Emacs Lisp非常有用(例如:customizing key bindings,了解.emacs
file)。
如果需要更深入了解Emacs Lisp,取决于您是否满足于emacs的内容。
我想,你遇到的大多数问题已经被其他人解决了。所以很有可能在某个地方找到一个很好的.el
文件来完成你想要的。
但是,如果您想要实现一些奇特的功能,学习Emacs Lisp可能是一种选择。另一点是行业中的Lisp is an actually used programming language,所以知道它永远都不好(好吧,它是Emacs Lisp,但它与它类似)。
答案 5 :(得分:1)
由于您是初学者,请不要过于担心Emacs Lisp。熟练掌握编辑器。我们通常需要的大多数扩展/模式已经存在。但学习Emacs Lisp是值得的。 ELisp不仅仅用于自定义Emacs,它还是一种完整的编程语言。它可以做很多事情,比如与文件系统,网络,GUI等交互。一旦熟悉了ELisp,就有可能放弃C / C ++并开始在ELisp中开发应用程序!随着Emacs / ELisp被移植到许多架构并且它可以充当您的部署平台,部署您的应用程序也将变得简单。
答案 6 :(得分:1)
当然没有必要能够编写自己的elisp,但它可以非常有用。这将给你带来的最有用的能力可能是“修复”那些不能按照你想要的方式工作的东西,通常是通过编写你自己的钩子或建议。因此,如果您喜欢使用Emacs,但是您发现事情并不总是符合您的喜好,那么我肯定会建议您开始学习elisp。
不要觉得你必须知道这一切,但只是愿意随着时间的推移逐渐收拾残局,毫无疑问,随着时间的推移,你会发现Emacs变得越来越好。
确保在开始编写代码之前搜索解决方案,但在很多情况下,有人已为您完成了艰苦的工作:)
答案 7 :(得分:0)
我自己是Vim用户,但我玩过GNU / Emacs。您的.emacs文件是emacs lisp,因此如果您正在编写自己的配置,那么您已经在使用Emacs Lisp。 :)此外,您可以评估lisp表达式来执行各种操作,但我认为您不必担心这一点 - 特别是如果您坚持使用高度/开发模式(C / C ++等)。如果您想打开一个程序--Emacs - 并将其包含您的电子邮件,irc和Web浏览器,或者将其用作文本编辑器,那就是一切。但是大多数之前提到的东西都是为你写的 - 所以...这是一个折腾。
答案 8 :(得分:0)
取决于您的目标和兴趣。有些人为了使用Emacs而学习Emacs Lisp。有些人学习Emacs以使用Emacs Lisp。 ; - )