Come ottenere una vista struttura in sublime texteditor?


117

Come ottengo una vista struttura nell'editor di testo sublime per Windows?

La minimappa è utile ma mi manca una struttura tradizionale (un elenco cliccabile di tutte le funzioni nel mio codice nell'ordine in cui appaiono per una rapida navigazione e orientamento)

Forse c'è un plugin, addon o simili? Sarebbe anche bello se tu potessi nominare brevemente quali passaggi sono necessari per farlo funzionare.

C'è un duplicato di questa domanda nei forum di testo sublimi.


Ho aggiunto una richiesta di funzionalità per SublimeText 3. Sentiti libero di votare per essa.
nome è carl

Risposte:


266

Premi CTRL+ Ro CMD+ Rper Mac per l'elenco delle funzioni. Funziona in Sublime Text 1.3 o superiore.


Suona bene. Ma non succede nulla quando premo ctrl-r. Ho un file php aperto. Posso individuare il comando in un menu? Funziona senza un plugin? karlthorwald
user89021

6
Ctrl + r esiste nell'attuale versione beta ( sublimetext.com/beta ), ma non in 1.2
jskinner

1
Questo è fantastico e mi mancava davvero la vista del contorno da Eclipse. Questo è onestamente molto meglio, anche se vorrei che ci fosse un modo per far sì che richiamasse solo le funzioni principali e non le funzioni di callback / successo.
Michael BW

1
L'elenco non è ordinato, purtroppo. Mi manca la vista struttura di Eclipse con un elenco ordinato di funzioni.
scorpiodawg

1
Qualche progresso aggiuntivo su una visualizzazione struttura reale come quella disponibile negli editor di Eclipse e Oxygen? Ciò che manca con ctrl + r è che non c'è alcuna indicazione di ciò che è stato delineato se è una variabile o una funzione allo stesso modo.
kstubs

17

Uso l'azione fold all. Ridurrà al minimo tutto nella dichiarazione, posso vedere tutti i metodi / funzioni e quindi espandere quello che mi interessa.


10
Dal menu ST 3: Modifica codice Folding-Fold All. Scorciatoia Ctrl + k, 1. Ctrl-k, j per annullare
wolfstevent

16

Un plugin chiamato Outline è disponibile nel controllo del pacchetto, provalo! https://packagecontrol.io/packages/Outline

Nota: non funziona in modalità multi righe / colonne. Per il lavoro su più righe / colonne, utilizza questo fork: https://github.com/vlad-wonderkidstudio/SublimeOutline


2
Nota: per uscire dalla visualizzazione Struttura, fare clic sul piccolo pulsante di chiusura nella scheda Struttura, quindi premere Shift+ Alt+ 1o andare su Visualizza -> Layout -> Singolo. Per riaprirlo usa Ctrl+ Shift+ Pquindi cercaBrowse Mode: Outline
Gabriel Staples

8

Guardo brevemente l' API SublimeText 3 e view.find_by_selector(selector)sembra essere in grado di restituire un elenco di regioni.

Quindi immagino che sia possibile un plugin che visualizzi la struttura / struttura del tuo file.

Un plugin che mostrerebbe qualcosa del genere:

schema del codice

Nota: il plug-in per la visualizzazione del nome della funzione potrebbe essere utilizzato come ispirazione per estrarre i nomi delle classi / metodi o ClassHierarchy per estrarre la struttura del contorno


0

Se vuoi poter stampare o salvare lo schema il ctr / comando + r non è molto utile. Si può fare una semplice ricerca di tutto sul seguente grep ^[^\n]*function[^{]+{ o una sua variante per adattarlo alla lingua e alla situazione in cui si sta lavorando.

Una volta trovato tutto, puoi copiare e incollare il risultato in un nuovo documento e, a seconda del numero di funzioni, non dovrebbe volerci molto per riordinare.

La risposta è tutt'altro che perfetta, in particolare per i casi in cui i commenti contengono la parola funzione (o è equivalente), ma penso che sia una risposta utile.

Con una modifica molto rapida questo è il risultato che ho ottenuto su ciò su cui sto lavorando ora.

    PathMaker.prototype.start = PathMaker.prototype.initiate = function(point){};
    PathMaker.prototype.path = function(thePath){};
    PathMaker.prototype.add = function(point){};
    PathMaker.prototype.addPath = function(path){};
    PathMaker.prototype.go = function(distance, angle){};
    PathMaker.prototype.goE = function(distance, angle){};
    PathMaker.prototype.turn = function(angle, distance){};
    PathMaker.prototype.continue = function(distance, a){};
    PathMaker.prototype.curve = function(angle, radiusX, radiusY){};
    PathMaker.prototype.up = PathMaker.prototype.north = function(distance){};
    PathMaker.prototype.down = PathMaker.prototype.south = function(distance){};
    PathMaker.prototype.east = function(distance){};
    PathMaker.prototype.west = function(distance){};
    PathMaker.prototype.getAngle = function(point){};
    PathMaker.prototype.toBezierPoints = function(PathMakerPoints, toSource){};
    PathMaker.prototype.extremities = function(points){};
    PathMaker.prototype.bounds = function(path){};
    PathMaker.prototype.tangent = function(t, points){};
    PathMaker.prototype.roundErrors = function(n, acurracy){};
    PathMaker.prototype.bezierTangent = function(path, t){};
    PathMaker.prototype.splitBezier = function(points, t){};
    PathMaker.prototype.arc = function(start, end){};
    PathMaker.prototype.getKappa = function(angle, start){};
    PathMaker.prototype.circle = function(radius, start, end, x, y, reverse){};
    PathMaker.prototype.ellipse = function(radiusX, radiusY, start, end, x, y , reverse/*, anchorPoint, reverse*/ ){};
    PathMaker.prototype.rotateArc = function(path /*array*/ , angle){};
    PathMaker.prototype.rotatePoint = function(point, origin, r){};
    PathMaker.prototype.roundErrors = function(n, acurracy){};
    PathMaker.prototype.rotate = function(path /*object or array*/ , R){};
    PathMaker.prototype.moveTo = function(path /*object or array*/ , x, y){};
    PathMaker.prototype.scale = function(path, x, y /* number X scale i.e. 1.2 for 120% */ ){};
    PathMaker.prototype.reverse = function(path){};
    PathMaker.prototype.pathItemPath = function(pathItem, toSource){};
    PathMaker.prototype.merge = function(path){};
    PathMaker.prototype.draw = function(item, properties){};
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.