Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以编写始终保持向上兼容的.emacs?_Emacs_Elisp_Dot Emacs - Fatal编程技术网

有没有一种方法可以编写始终保持向上兼容的.emacs?

有没有一种方法可以编写始终保持向上兼容的.emacs?,emacs,elisp,dot-emacs,Emacs,Elisp,Dot Emacs,从版本18开始,我就一直在使用Emacs。Emacs Lisp不是我的常规编程语言,但几年前我花了一些时间研究它,以创建一个比迄今为止任何GUI IDE都好的.Emacs 这是一次性的工作,从那以后,我完全忘记了如何用lisp编程 唉,每次我升级我的Emacs(18>19>20>21>22>23),我的.Emacs中就有东西坏了,我最终花了太多的时间(有时是几天)来修复这些东西 在我常规编程的许多其他语言中,编写永不过时的代码是可能的。另一方面,在emacs中,我永远无法预测事情会发生怎样的变化

从版本18开始,我就一直在使用Emacs。Emacs Lisp不是我的常规编程语言,但几年前我花了一些时间研究它,以创建一个比迄今为止任何GUI IDE都好的.Emacs

这是一次性的工作,从那以后,我完全忘记了如何用lisp编程

唉,每次我升级我的Emacs(18>19>20>21>22>23),我的.Emacs中就有东西坏了,我最终花了太多的时间(有时是几天)来修复这些东西

在我常规编程的许多其他语言中,编写永不过时的代码是可能的。另一方面,在emacs中,我永远无法预测事情会发生怎样的变化。例如,在21.4.1版之前一直使用的
[M-TAB]
,在23版中不再有效,必须用
“\M-\t”
替换。另一个例子是
dired-ommit切换
,它曾在版本21中工作,但在版本22中停止工作,被
dired-ommit模式
取代

现在,我知道如果.emacs做的不多,就有可能编写一个“几乎为空的”.emacs,它可以(可能)与将来的版本保持兼容

但是my.emacs是巨大的,设计用于在许多不同的操作系统(以及它们不同的风格、版本和版本,包括非GUI系统)上运行,而无需进行任何更改。我希望有一个保证始终工作的核心API或子集

真的有这样一种方法来编写一个始终保持向上兼容的.emacs吗


如果是这样的话,我在哪里可以找到一本“烹饪书”或权威指南来完成这项工作?

我很同情你,我也分享你的痛苦。答案是不,恐怕没有这样的圣杯。正如您所说,如果您的init文件足够简单,那么您可能不需要更改任何内容。事实上,即使不是这样:init文件名和Emacs查找它的位置都随着时间的推移而发生了变化。

由于无法预测任何东西的未来变化,因此没有人能够保证未来的兼容性

我认为以下几点是使.emacs或init.el(我现在正在练习)易于维护的许多通用方法中的几点

  • put.emacs.d/版本控制(必须有一个)
  • 将init文件拆分为几个小文件
  • 当加载emacs版本的特定自定义项时,使用

    例如:

    (当(=emacs主要版本24)
    ;加载24小时的设置
    )

  • 在依赖于特定功能的任何代码段周围使用
    (当(boundp'some variable)…)
    (当(fboundp'some function)…)
    。(当您使用时,请从
    (需要'cl)
    开始,对于那些在
    内置时没有
    的旧版本。)

    当所有其他操作都失败时,区分
    emacs主要版本
    emacs次要版本
    运行xemacs
    (定义为
    (字符串匹配“xemacs\\\\\清晰”emacs版本)

    避免使用仅在较新版本中支持的语法和库函数

    当您坚持使用文档化的接口时,很少会出现故障。因此,试着寻找一种方法来完成手册中提到的事情,如果没有其他方法,只会退回到修改一些随机的非自定义变量。根据我的经验,如果您允许偶尔的条件限制,那么在所有版本中(至少对于GNU Emacs,XEmacs有时更难取悦)总是有一种相当简单的方法让某些东西工作

    例如,
    “\e\t”
    始终适用于
    M-TAB
    。使用
    直接忽略模式
    ,如果前者不存在,则返回到
    直接忽略切换

    (set (if boundp 'dired-omit-mode 'dired-omit-mode 'dired-omit-toggle) t)
    
    是的,有点痛,但不像你想象的那么剧烈。我维护了一个
    .emacs
    ,它可以在所有DOS、Windows和unix上使用19.23之后的任何东西(IIRC,我已经有一段时间没有使用19.34之前的任何东西进行测试了)。事实上,与Windows兼容比跟上GNU Emacs版本变化更为沉重


    至于烹饪书,版本之间的大部分差异都与未被广泛使用的特性有关(否则,维护人员会更加重视严格的向上兼容性)。由于Emacs很大,毫无疑问,您可以使用大量的Emacs,但是编写食谱的人不会听说。你得随机应变。幸运的是,这并不太难。

    Feature detect=fboundp=or=boundp=而不是此处所示的版本检测将有助于使.emacs.el更能抵抗更改。