通过外部程序过滤 Sublime Text 2 缓冲区内容

通过外部程序过滤 Sublime Text 2 缓冲区内容

我正在尝试在 Sublime Editor 2 中添加 uncrustify 来格式化我的 C++ 代码。

我知道在 SE2 中有一些方法可以运行外部进程。但主要的问题是格式化完成后无法用我的代码更新缓冲区(视图)。

有人可以绘制一个插件,它将在当前缓冲区的内容上运行外部进程,然后更新它吗?

答案1

以下文本插件将文件中的所有小写字母替换为相应的大写字母。此bash -c调用是一种变通方法,用于为命令作用于大参数输入的(不常见)情况提供一个有用示例:通常它们处理文件或标准输入。

要使用您自己的命令,请将第一个参数中的前三个列表条目替换Popen为您自己的,最后一个是整个缓冲区内容。

import sublime, sublime_plugin, subprocess

def insert_output(view, edit):
    r = sublime.Region(0, view.size())
    try:
        proc = subprocess.Popen( [ "bash", "-c", 'echo "$0" | tr [a-z] [A-Z]', view.substr(r) ], stdout=subprocess.PIPE )
        output = proc.communicate()[0]
        view.replace(edit, r, output)
    except:
        pass


class ReplaceWithOutputCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        e = self.view.begin_edit()
        insert_output(self.view, e)
        self.view.end_edit(e)

Main.sublime-menu要创建菜单项,请在包中添加如下条目User

{"command": "replace_with_output", "caption": "Replace with Output" }

前:

截屏

后:

截屏

相关内容