外部プログラムを通じて Sublime Text 2 バッファの内容をフィルタリングする

外部プログラムを通じて Sublime Text 2 バッファの内容をフィルタリングする

Sublime Editor 2 で C++ コードのフォーマットに uncrustify を追加しようとしています。

SE2 で外部プロセスを実行する方法がいくつかあることは知っています。しかし、主な問題は、フォーマットが完了したときに、コードでバッファ (ビュー) を更新できないことです。

現在のバッファの内容に対して外部プロセスを実行して更新するプラグインを誰か描いてくれませんか?

答え1

次のテキスト プラグインは、ファイル内のすべての小文字を対応する大文字に置き換えます。このbash -c呼び出しは、大きな引数入力に対して動作するコマンドの (まれな) ケースに役立つ例を示すための回避策でした。通常、これらはファイルまたは標準入力を扱います。

独自のコマンドを使用するには、最初のPopen引数の最初の 3 つのリスト エントリを独自のものに置き換えます。最後はバッファー コンテンツ全体です。

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" }

前に:

スクリーンショット

後:

スクリーンショット

関連情報