有没有办法将选定的文本提取到同一目录中的新文件中?

时间:2013-09-11 15:17:42

标签: sublimetext2

在Sublime Text中,有没有办法可以将选定的文本提取到单独的文件中?

我经常在LaTeX中这样做。请考虑以下文件:

main.tex

\section{Introduction}
...
...

\section{Conclusion}

我希望能够选择从Introduction开始直到Conclusion之前一行的文本,右键单击然后说“Extract to file”(有点类似于“Extract method”的方式)适用于Visual Studio)。有没有办法使用任何快捷方式实现这一目标?

奖励:提取完成后,将提取的文本替换为自定义文本,例如\input{introduction},其中introduction是文本提取到的文件的名称

1 个答案:

答案 0 :(得分:1)

没有任何内置功能,但使用插件很容易实现。请注意,以下是经过最低限度测试的,并且不会处理ST中的所有内容。话虽如此,它应该是你开始的良好基础。为了安全起见,我将所有东西都扔进了当地的git repo,然后再使用它。讨厌这会导致失去工作。我将要替换的内容复制到剪贴板只是为了安全,但如果您对此有信心,可以删除sublime.set_clipboard(content)

import sublime
import sublime_plugin
import os
import re

class ExtractAndInput(sublime_plugin.TextCommand):
    def run(self, edit):
        view = self.view
        self.region = view.sel()[0]
        content = view.substr(self.region)
        sublime.set_clipboard(content)
        match = re.search(r"\\section{(.+?)}", content)
        if match:
            replace = "\\input{%s}" % match.group(1)
            view.replace(edit, view.sel()[0], replace)
            current = view.file_name()
            new_file = "%s.tex" % match.group(1)
            path = os.path.normpath(os.path.join(current, "..", new_file))
            with open(path, "a") as file_obj:
                file_obj.write("% Generated using ExtractAndInput Plugin\n")
                file_obj.write(content)

保存插件后,您可以创建一个绑定到extract_and_input的键。您还可以在Context.sublime-menu中使用以下内容创建Packages/User来添加上下文菜单。

[
    { "caption": "Extract to File", "command": "extract_and_input"}
]