Filtern von Sublime Text 2-Pufferinhalten durch ein externes Programm

Filtern von Sublime Text 2-Pufferinhalten durch ein externes Programm

Ich versuche, Uncrustify für meine C++-Codeformatierung in Sublime Editor 2 hinzuzufügen.

Ich weiß, dass es einige Möglichkeiten gibt, externe Prozesse in SE2 auszuführen. Das Hauptproblem besteht jedoch darin, dass der Puffer (die Ansicht) mit meinem Code nicht aktualisiert werden kann, wenn die Formatierung abgeschlossen ist.

Kann jemand ein Plug-In entwerfen, das externe Prozesse auf dem Inhalt des aktuellen Puffers ausführt und ihn dann aktualisiert?

Antwort1

Das folgende Text-Plugin ersetzt alle Kleinbuchstaben in der Datei durch ihre Großbuchstaben. Der bash -cAufruf war ein Workaround, um ein nützliches Beispiel für den (ungewöhnlichen) Fall eines Befehls bereitzustellen, der auf große Argumenteingaben einwirkt: Normalerweise handelt es sich dabei um Dateien oder Standardeingaben.

Um Ihren eigenen Befehl zu verwenden, ersetzen Sie die ersten drei Listeneinträge im ersten PopenArgument durch Ihre eigenen, der letzte ist der gesamte Pufferinhalt.

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)

Um ein Menüelement zu erstellen, fügen Sie Main.sublime-menudem UserPaket einen Eintrag wie den folgenden hinzu:

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

Vor:

Bildschirmfoto

Nach:

Bildschirmfoto

verwandte Informationen