【问题标题】:Do I need to know Emacs Lisp in order to use GNU/Emacs我需要了解 Emacs Lisp 才能使用 GNU/Emacs
【发布时间】:2010-07-09 05:50:38
【问题描述】:

最近,我开始学习 GNU/Emacs。非常易于使用的程序。研究了它的结构。为我调整了漂亮的颜色。将其配置为 C 编程课程。一切似乎都很正常。但现在 GNU/Emacs lisp 的问题出现了。如果我没有自己开发 Emacs 并且只会像 ide 一样将它用于 C/C++ 开发、邮件、jabber 等,我真的应该花时间研究 Emacs Lisp...

事实是,当我编辑我的 .emacs 时,我明白我在写。但我写的大多是现成的脚本,或者如果它是什么,它们非常简单。

谢谢。

【问题讨论】:

标签: emacs elisp


【解决方案1】:

不,这不是绝对必要的。您可能会编写 elisp,但主要是设置变量并为您想要使用的任何模式或包插入必要的 sn-ps(setqrequire 等)。其中大部分是通过复制和粘贴完成的,因此不需要真正的 elisp 知识。

话虽如此,定义小函数可能非常有用,并且为此学习足够多的 Emacs Lisp 可能会证明是有用的。看Xah Lee's tutorial,挺简短的。

【讨论】:

    【解决方案2】:

    如果您想在文档中自动进行某种编辑,而通过 UI 太乏味或太慢,您可以求助于 Emacs Lisp。

    这里有一个例子:不久前我不得不在我的公司进行一些重构。它涉及将一堆方法移动到一堆文件。为了帮助那些将在过渡期间合并我们的代码的人,我们在旧位置留下了“墓碑”cmets,告诉他们新代码将在哪里。墓碑包括注释掉整个函数(包括声明),删除函数体,并在函数体的位置放置注释。

    在完成了一些这些,还有几十个之后,我已经准备好从无聊中扯掉我的头发了。所以我将以下命令拼凑在一起并将它们粘贴到我的~/.emacs 文件中。即使没有太多的 cmets,您也可以了解他们所做的事情的要点。

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

    【讨论】:

    • 为破解点赞。但这似乎是 TAGS 何时有用的教科书示例,假设您的构建系统足够智能(或可配置),可以为您生成标签,并且每个人都使用 Emacs(谁不会?:) 另外,它没有不要留下一团糟......
    • @Staffan:后一种假设与案例相差甚远,尤其是在合并时间方面,因为涉及到一个特定的非 Emacs 合并工具。世界各地的许多开发人员都在合并这些东西。相信我,在这种特殊情况下,额外的痛苦和混乱是值得的,而且它们后来确实被清理掉了。
    【解决方案3】:

    “否”的简短回答,但对 Emacs Lisp 有所了解将大大提高您在某些领域的工作效率。

    如果您决定花一些时间学习 Emacs Lisp,我无法向您推荐比优秀书籍“Introduction to Emacs Lisp”更好的起点(它还以信息格式与 Emacs 捆绑在一起 - C-h i m Emacs Lisp Intro)。

    【讨论】:

      【解决方案4】:

      我使用 Emacs 已经有一段时间了,我可以告诉你,如果你对正在使用的模式提供的功能没问题,因此不需要改进它们,那么就没有真正需要学习 elisp。编写您的 emacs 配置需要一点 elisp,但您需要的语言功能范围相当小。

      顺便说一句,如果你想扩展一些功能,可以使用其他语言编写 emacs 脚本(比如 python、perl,不记得有哪些),所以学习 elisp 并不是那么重要。您可能会从这个 emacs wiki 页面开始了解更多信息:http://www.emacswiki.org/emacs/CategoryExtensionLanguage

      【讨论】:

        【解决方案5】:

        在我看来,了解 Emacs Lisp 的基本量真的很不错(例如:customizing key bindings,了解 .emacs file)。

        如果需要更深入地了解 Emacs Lisp,取决于您是否对 emacs 的现状感到满意。

        我想,你遇到的大多数问题都已经被其他人解决了。所以很有可能在某个地方得到一个很好的 .el 文件,完全按照你的意愿去做。

        但是,如果您想实现一些奇特的功能,学习 Emacs Lisp 可能是一种选择。另一点是Lisp is an actually used programming language 在行业中,所以知道它从来都不是坏事(好吧,它是 Emacs Lisp,但它和它很相似)。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            不要觉得你必须要全部都知道,只要愿意随着时间的推移拾取点点滴滴,你无疑会发现随着时间的推移,Emacs 会越来越好。

            确保在开始编写代码之前搜索解决方案,但在很多情况下,已经有人为你完成了艰苦的工作:)

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

                取决于您的目标和兴趣。有些人为了使用 Emacs 而学习 Emacs Lisp。有些人学习 Emacs 是为了使用 Emacs Lisp。 ;-)

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-03-21
                  • 2021-09-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多