2013-10-22 9 views
7

In Sublime Text 2 möchte ich in der Lage sein, alle geöffneten/geladenen Dateien mit Namen zu speichern.sublime - Speichern Sie alle geöffneten/geladenen Dateien mit Namen?

Ich mag, wie Sublime kann Dateien mit Dateinamen haben und Dateien, die nie gespeichert wurden, und kann geschlossen werden und es erinnert sich an die unbenannten Dateien und lädt sie neu, ohne dass ich sie speichern müssen. Aber wenn eine Datei einen Dateinamen hat und einige Änderungen im Puffer noch nicht gespeichert hat, zeigt Sublime es als solche, mit dem Dateinamen und dem Kreis, ich schließe sublime, und öffne es wieder, ich Erhaben hat es so gemerkt, wie es war und so das Änderungen werden immer noch nicht in der Datei gespeichert. Das ist großartig .. Aber .. Ich möchte einen Befehl, um alle zu speichern, aber nicht die unbenannten.

Es gibt eine Option zum Speichern aller Dateien im Menü, aber es wird ein Dialogfeld angezeigt, in dem Sie gefragt werden, ob unbenannte Dateien gespeichert werden sollen.

Welche API-Funktionen wären beteiligt, um einen Befehl zu schreiben, der die unbenannten unverändert lässt und die mit Dateinamen speichert? (Und gibt es einen Beispielcode, den ich ausführen kann, der diese API-Funktionen verwendet?)

Antwort

8

AFAIK, eine geöffnete Datei wird durch eine oder mehrere Ansichten dargestellt. Versuchen Sie also, alle Ansichten zu erhalten und speichern Sie diese mit Dateinamen. Ich habe ein einfaches Beispiel geschrieben. Hoffe es kann dir helfen.

Übrigens können Sie alle APIs über den folgenden Link überprüfen.

Sublime Text 2 API Reference

import sublime, sublime_plugin 

class SaveAllExistingFilesCommand(sublime_plugin.ApplicationCommand): 
    def run(self): 
     for w in sublime.windows(): 
      self._save_files_in_window(w) 

    def _save_files_in_window(self, w): 
     for v in w.views(): 
      self._save_exiting_file_in_view(v) 

    def _save_exiting_file_in_view(self, v): 
     if v.file_name(): 
      if v.is_dirty(): 
       v.run_command("save") 
+0

danke, nur versucht, die Eingabe, obwohl dieser Lauf wie funktioniert nicht mit view.run_command ('..') eine verwandte Frage http://stackoverflow.com/questions/19532204/in-sublime-why-is -def-run-working-in-a-case-and-not-and-caseand-how-can ich werde in der zwischenzeit eine verbindung versuchen. – barlop

+0

@barlop Es handelt sich um einen 'ApplicationCommand', sodass Sie ihn nicht innerhalb einer Ansicht ausführen können. Sie können Keymap verwenden oder 'ApplicationCommand' in' TextCommand' ändern und 'run (self)' in 'run (self, edit)' entsprechend ändern. – longhua

+0

danke, ich sehe deinen Code sehr gut funktioniert. Ich gebe diesem ApplicationCommand-> TextCommand auch morgen ein Zeichen. – barlop

5

lhuang des answer ist fantastisch, und tut genau das, was ich denke, Sie es tun wollen. Stellen Sie sicher, dass Sie das Plugin als Packages/User/save_all_existing_files.py speichern, damit es ordnungsgemäß funktioniert. Sie erreichen das Verzeichnis Packages über den Menüpunkt Preferences -> Browse Packages.... Ich habe ein paar Ergänzungen, um Ihr Leben ein wenig einfacher zu machen, obwohl - ein Menüpunkt und eine Tastenkombination.

Sie sollten im Allgemeinen nichts im Verzeichnis Packages/Default bearbeiten, da alle Dateien überschrieben/erweitert werden können, aber in diesem Fall empfehle ich es aus ästhetischen Gründen. Öffnen Packages/Default/Main.sublime-menu und fügen Sie die folgende Zeile direkt nach der Linie 128, die die save_all Menüpunkt sein sollte:

{ "command": "save_all_existing_files", "caption": "Save All Named Files", "mnemonic": "F" }, 

Dies wird fügen Sie ein in die File Menüoption „Alle genannten Dateien speichern“. Weiter finden Sie auf Preferences -> Key Bindings - User und fügen Sie die folgende Zeile:

{ "keys": ["ctrl+alt+shift+s"], "command": "save_all_existing_files" }, 

Wenn diese Datei keinen anderen Inhalt hat, umgibt die obige Zeile mit eckigen Klammern [ ] und das folgende Komma entfernen, sonst Sublime wird dich beschweren.

Sobald die keymap Datei gespeichert wird, können Sie den Befehl auslösen, indem Sie schlagen CtrlAltShift-S. Offensichtlich können Sie die Schlüssel ändern, wenn Sie sie nicht mögen. Wenn du eine Kombination auswählst, die merkwürdiges Verhalten zeigt, schau dir das FindKeyConflicts Plugin von @skuroda an - es ist von unschätzbarem Wert für die Fehlersuche in deinem Setup und besonders bei der Entwicklung deiner eigenen Pakete.

Viel Glück!

+0

ja es sieht gut aus, ich habe noch nicht abgestimmt oder akzeptiert noch etwas 'cos hatte ich nicht a Chance, es auszuprobieren, aber ich kann sehen, dass es gut aussieht. Danke auch für deine Ergänzungen. Ich war nur stundenlang ohne Laptop mit einem guten Akku unterwegs. – barlop

+0

danke, tolle Ergänzung zum Dateimenü. Die Bindung für save_all_existing_files sieht jedoch nicht wie eine gute Wahl aus, da man mit ctrl-s zweimal normal speichern muss. Mit dieser ctrl-s ctrl-n-Bindung, wenn man nur ctrl-s für ein reguläres Speichern tut, antwortet es nicht, ich denke, es möchte wissen, ob man danach ein ctrl-n machen wird. – barlop

+0

@barlop du hast recht, mir ist das gleiche aufgefallen. Probieren Sie '" Strg + Alt + Shift + s "' und es sollte besser funktionieren. Ich habe gerade meine Antwort aktualisiert, um sie zu reflektieren. – MattDMo

1

einfach die nächste Zeile der

{ "keys": ["super+shift+s"], "command": "save_all" } 

superPreferences > Key Bindings - User hinzuzufügen, ist ein wichtiger Befehl in OS X. Verwenden Sie ctrl unter Windows.

Verwandte Themen