2

请问,将文件(foo.txt)插入到插入位置的打开文件(bar.txt)中的最佳方法是什么?

最好有一个打开文件对话框来选择要插入的任何内容。

文字处理等价物在此处为“插入文件”。

这是 的替代品foo.sublime-snippet,它可以链接到其他地方的表单文件:

import sublime, sublime_plugin    

class InsertFileCommand(sublime_plugin.TextCommand):
    def run(self, edit):    

        v = self.view    

        template = open('foo.txt').read()    

        print template    

        v.run_command("insert_snippet", {"contents": template}) 
4

2 回答 2

1

从文本命令中,您可以访问当前视图。您可以使用 获取光标位置self.view.sel()。我不知道如何在 python 中做 gui 的东西,但你可以使用快速面板(类似于FuzzyFileNav)进行文件选择。

于 2013-04-03T00:26:36.847 回答
0

这是我对https://github.com/mneuhaus/SublimeFileTemplates的非官方修改,它允许我insert-a-file-here使用快速面板。它适用于 OSX 操作系统(运行 Mountain Lion)。

到目前为止,我看到的唯一缺点是无法正确翻译\\表单文件中的双斜杠——它只是作为单斜杠插入\。在我的 LaTex 表单文件中,双斜杠\\表示行尾,如果前面有~. 解决方法是在实际表单文件中的每次出现处插入一个额外的斜线(即,放置三个斜线,但要理解运行插件时只会插入两个斜线)。表单文件需要是 LF 结尾,我使用的是 UTF-8 编码——CR 结尾没有正确翻译。稍作修改,也可以有多个表单文件目录和/或文件类型。

import sublime, sublime_plugin
import os    

class InsertFileCommand(sublime_plugin.WindowCommand):    

    def run(self):
        self.find_templates()
        self.window.show_quick_panel(self.templates, self.template_selected)

    def find_templates(self):
        self.templates = []
        self.template_paths = []    

        for root, dirnames, filenames in os.walk('/path_to_forms_directory'):
            for filename in filenames:
                if filename.endswith(".tex"): # extension of form files
                    self.template_paths.append(os.path.join(root, filename))
                    self.templates.append(os.path.basename(root) + ": " + os.path.splitext(filename)[0])    

    def template_selected(self, selected_index):
        if selected_index != -1:
            self.template_path = self.template_paths[selected_index]    

            print "\n" * 25
            print "----------------------------------------------------------------------------------------\n"
            print ("Inserting File:  " + self.template_path + "\n")
            print "----------------------------------------------------------------------------------------\n"    

            template = open(self.template_path).read()    

            print template    

            view = self.window.run_command("insert_snippet", {'contents': template})    

            sublime.status_message("Inserted File: %s" % self.template_path)
于 2013-04-05T21:58:22.180 回答