我正在将代码拆分为更小的文件并对其进行一些重构。请考虑以下代码作为我想要提取的部分:
(require 'package)
(add-to-list 'package-archives
'("marmalade" . "http://marmalade-repo.org/packages/") t)
(package-initialize)
(when (not package-archive-contents)
(package-refresh-contents))
(defvar my-packages '(org magit)
"A list of packages to ensure are installed at launch.")
(dolist (p my-packages)
(when (not (package-installed-p p))
(package-install p)))
- 我想要将上面的部分替换为类似于
(require `file-name)
的内容 - 然后将替换的文本放置在当前目录中名为
file-name.el
的新文件中 - 接着在文件顶部添加一行
(provides `file-name)
如果我能按下一个键并输入名称,就可以完成这个操作,那将会很棒。如果有简单的方法可以做到这一点,我很想听听可能的解决方案。
编辑: 我正在发起悬赏,因为我认为这适用于比Lisp更多类型的代码,并且我希望拥有更通用的东西,以便我可以进行扩展。
我考虑过yasnippet,但我认为它不足以执行手头的任务。基本上,理想的工作流程是标记要提取的行,用适当的require或include指令替换它们并将文本发送到自己的文件中。最理想的情况是只需一个命令,就可以了解正在编辑的文件类型或至少是主要模式,以便可以自定义行为。再次提醒,yasnippet在不同的主要模式下执行不同的任务非常出色,但我不知道如何使其工作或评估使其工作的可能性。
如果您需要更多信息,请告诉我。
(delete-region…)(insert)
调用放在(with-current-buffer)
块之后,这样如果创建文件时出现错误(例如只读目录或其他原因),函数将会中止而不会“损坏”原始文件。 - BRPocock