2013-10-22 15 views
7

In Sublime Text 2, voglio essere in grado di salvare tutti i file aperti/caricati che hanno nomi.sublime: salva tutti i file aperti/caricati con nomi?

Mi piace come Sublime può avere file con nomi di file, e avere file che non sono mai stati salvati, e può essere chiuso e si ricorda dei file senza titolo e li ricarica senza che io debba salvarli. Ma quando un file ha un nome di file e ha alcune modifiche nel buffer non ancora salvato, sublime lo mostra come tale, con il nome del file e il cerchio, chiudo sublime e lo riapre, l'ho sublimate come lo era e quindi le modifiche non vengono ancora salvate nel file. È fantastico ... Ma ... vorrei un comando per salvare tutti, ma non quelli senza titolo.

C'è un'opzione salva tutto nel menu, ma si apre una finestra di dialogo che chiede di salvare i file senza titolo.

Quali funzioni API sarebbero coinvolte per scrivere un comando che lasci quelli senza titolo così come sono e salva quelli con nomi di file? (e c'è un codice di esempio che posso usare che usa quelle funzioni API?)

risposta

8

AFAIK, un file aperto è rappresentato da una o più viste. Quindi cerca di ottenere tutte le visualizzazioni e salva quelle con i nomi dei file. Ho scritto un semplice esempio. Spero possa aiutarti.

A proposito, è possibile controllare tutte le API tramite il seguente collegamento.

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

grazie, ho appena provato a inserirli, anche se non funziona con view.run_command ('..') una domanda correlata http://stackoverflow.com/questions/19532204/in-sublime-why-is -def-run-working-in-one-case-and-not-another-caseand-how-can nel frattempo proverò un binding. – barlop

+0

@barlop È un 'ApplicationCommand', quindi non è possibile eseguirlo in una vista. Puoi usare keymap o cambiare 'ApplicationCommand' in' TextCommand' e cambiare 'run (self)' in 'run (self, edit)' di conseguenza. – longhua

+0

grazie, vedo che il tuo codice funziona molto bene. darò che ApplicationCommand-> TextCommand andrà anche domani. – barlop

5

di answer lhuang è fantastico, e fa esattamente quello che penso che vuoi che faccia. Assicurati di salvare il plug-in come Packages/User/save_all_existing_files.py affinché funzioni correttamente. È possibile raggiungere la directory Packages tramite la voce di menu Preferences -> Browse Packages.... Ho alcune aggiunte per rendere la vita un po 'più facile, però - una voce di menu e una combinazione di tasti.

Generalmente non è necessario modificare nulla nella directory Packages/Default, poiché tutti i file possono essere sovrascritti/espansi, ma in questo caso lo consiglio per motivi estetici. Aprire Packages/Default/Main.sublime-menu e aggiungere la seguente riga subito dopo la linea 128, che dovrebbe essere la voce di menu save_all:

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

Questo aggiungerà l'opzione "Save All nome file" per il menu File. Poi, vai a Preferences -> Key Bindings - User e aggiungere la seguente riga:

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

Se questo file non ha altri contenuti, circondare la linea di cui sopra con le parentesi quadre [ ] e togliere la virgola finale, altrimenti Sublime si lamentano a voi.

volta che il file viene salvato keymap, è possibile attivare il comando premendo Ctrl AltMaiuscS. Ovviamente, puoi cambiare le chiavi se non ti piacciono. Se scegli una combinazione che dà un comportamento strano, controlla il plug-in FindKeyConflicts da @skuroda: è di valore inestimabile per la risoluzione dei problemi della tua configurazione e, soprattutto, quando sviluppi i tuoi pacchetti.

Buona fortuna!

+0

sì, sembra buono, non ho ancora votato o accettato nulla, perché non ho avuto un possibilità di provarlo, ma posso vedere che sembra buono. grazie anche per le tue aggiunte sono appena uscito per ore senza un portatile con una buona batteria. – barlop

+0

grazie, ottima aggiunta al menu file. Il binding per save_all_existing_files non sembra una buona scelta, dato che con esso si deve fare ctrl-s due volte per salvare normalmente. Con quell'associazione ctrl-n di ctrl-n, se uno fa semplicemente ctrl-s per un normale salvataggio, non risponde, penso che voglia sapere se uno farà un ctrl-n in seguito. – barlop

+0

@barlop hai ragione, ho notato la stessa cosa. Prova '" ctrl + alt + shift + s "' e dovrebbe funzionare meglio. Ho appena aggiornato la mia risposta per riflettere. – MattDMo

1

Basta aggiungere la riga accanto al Preferences > Key Bindings - User

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

super è un tasto di comando in OS X. Usa ctrl su Windows.

Problemi correlati