2010-07-09 57 views
4

最近,我开始研究GNU/Emacs。非常容易使用程序。研究它的结构。为我调整好的颜色。配置它在C编程上课。一切都很正常。但现在问题出现在GNU/Emacs lisp上。我真的应该花时间学习Emacs Lisp吗?如果我没有开发自己的Emacs,并且只会像IDE一样用于C/C++开发,邮件,jabber等等......我是否需要知道Emacs Lisp才能使用GNU/Emacs

事实是,当我编辑我的。 emacs我明白我写了。但我写的主要是现成的脚本,或者如果它的东西非常简单。

谢谢。

+0

类似的问题在这里:http://stackoverflow.com/questions/2582555/emacs-without-lisp – 2010-07-09 12:06:10

回答

1

我一直在使用Emacs一段时间,可以告诉你,如果你对使用的模式提供的功能没问题,并且因此不需要改进它们,就没有必要研究elisp。编写emacs配置需要一点elisp,但是您需要的语言功能范围相当小。顺便说一句,如果你想扩展一些功能,可以使用其他语言编写脚本emacs(比如python,perl,不记得哪些是那里的),所以学习elisp并不是那么重要。也许,你会发现更多开头此Emacs的维基页面:http://www.emacswiki.org/emacs/CategoryExtensionLanguage

1

的Emacs Lisp的基本量是非常好的了解,在我看来,(例如:customizing key bindings,了解.emacs file)。

如果需要更深入的Emacs Lisp知识,则取决于您是否满足emacs的要求。

我想,你遇到的大多数问题已经被其他人解决了。所以很有可能在某个地方获得一个不错的.el文件,这个文件正是你想要的。

但是,如果您想要实现某些特殊功能,则可以选择学习Emacs Lisp。还有一点就是Lisp is an actually used programming language在行业中,所以知道它是绝对不错的(好吧,它是Emacs Lisp,但它与它相似)。

8

不,这不是绝对必要的。您可能会编写elisp,但主要是设置变量并为您要使用的任何模式或程序包插入必要的代码片段(setqrequire等)。大部分工作是通过复制和粘贴完成的,因此不需要真正的elisp知识。尽管如此,定义小函数可能非常有用,并且为此学习足够的Emacs Lisp可能会很有用。看看Xah Lee's tutorial,它非常简短。

1

由于您是初学者,请不要过于担心Emacs Lisp。熟练掌握编辑。我们通常需要的大多数扩展/模式已经存在。但学习Emacs Lisp是值得的。 ELisp不仅用于定制Emacs,它还是一种完整的编程语言。它可以做很多事情,比如与文件系统,网络,GUI等进行交互。一旦熟悉了ELisp,就有机会丢弃C/C++并开始在ELisp本身开发应用程序!由于Emacs/ELisp已经移植到很多架构,并且可以充当您的部署平台,因此部署应用程序也将变得非常简单。

2

“否”中的简短答案,但是具备Emacs Lisp的一些知识将在某些领域大大提高您的生产力。

如果您决定花一些时间学习Emacs Lisp,我不建议您比出色的书“Introduction to Emacs Lisp”(它也包含Emacs的信息格式 - C-h我是Emacs Lisp简介)更好的出发点。

+0

谢谢你的手动链接 – 0xAX 2010-07-09 06:16:15

0

我自己是Vim用户,但是我曾经玩过GNU/Emacs。您的.emacs文件是emacs lisp,因此如果您正在编写自己的配置,则您已经在使用Emacs Lisp。 :)另外,您可以评估lisp表达式来执行各种操作,但我不认为您需要真正担心 - 尤其是如果您坚持使用高度使用/开发的模式(C/C++等)。这是关于如果你想打开一个单一的程序 - Emacs - 并且它包含你的电子邮件,irc和web浏览器,或者将它用作文本编辑器。但是前面提到的大部分内容都是为你写的 - 所以......这是一个投入。

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用户还没有成为高级用户。

+0

竖起大拇指。但是,这看起来像是一本关于TAGS何时有用的教科书示例,假设您的构建系统足够智能(或可配置)为您生成标签,并且每个人都使用Emacs(谁不会?:)另外,它不会't留下一片混乱...... – Staffan 2010-07-09 17:53:01

+0

@Staffan:后一个假设是从案例中得来的,特别是涉及到合并时间,因为涉及到一个特定的非Emacs合并工具。世界各地的许多开发者正在合并这些东西。相信我,在这种特殊情况下,额外的痛苦和混乱是值得的,而且他们在以后得到清理。 – 2010-07-09 18:08:45

1

这当然没有必要能够写你自己的elisp,但它可以是非常有用的。可能这种能给你带来的最有用的能力就是能够“修补”那些不符合你想要的方式的东西,通常是通过编写你自己的钩子或建议。所以如果你喜欢使用Emacs,但你发现事情并不总是你喜欢的,那么我肯定会建议你开始学习elisp。

不要觉得你必须知道这一切,但随着时间的推移愿意随时拿出零碎,你肯定会发现Emacs随着时间的推移变得越来越好。

确保你寻找解决方案,您开始编码前的东西,虽然 - 在一个伟大的许多情况下,有人已经做好了为你努力工作:)

0

取决于你的目标和你的利益。有些人学习Emacs Lisp才能使用Emacs。有些人学习Emacs以使用Emacs Lisp。 ;-)

相关问题