2012-02-19 11 views
54

Un qualcosa che potrebbe essere preso in prestito dagli IDE. Quindi l'idea sarebbe quella di evidenziare gli argomenti delle funzioni (e forse i nomi delle variabili con scope) all'interno dei corpi delle funzioni. Questo è il comportamento predefinito per qualche C:Evidenzia argomenti nel corpo della funzione in vim

plain vim highlighting

Beh, se dovessi posizionare il cursore all'interno func Mi piacerebbe vedere gli argomenti foo e bar evidenziati seguire la logica algoritmo migliore. Si noti che il nome simile foo in func2 non viene illuminato. Questo lussuoso potrebbe essere omesso se ...

func hilighted

Usando localmente ambito variabili, vorrei variabili ANCHE hanno localmente inizializzati marcate in:

highlight <code>i</code> inside for

Infine al redemonstrate il lusso:

luxury again

Non così banale da Scrivi questo. Ho usato la C per dare un'idea generale. Davvero ho potuto utilizzare questo per la programmazione Scheme/Clojure meglio:

for clojure too inside let construct

Questo dovrebbe riconoscere let, loop, for, doseq binding per esempio.

Il mio vimscript-fu non è così forte; Sospetto che avremmo bisogno di

  • Parse (non-rexxly?) Gli argomenti dalla definizione della funzione sotto il cursore. Questo sarebbe ovviamente un linguaggio specifico. La mia priorità sarebbe Clojure.
  • definiscono una regione sintassi per coprire la data funzione/portata solo
  • invia la sintassi richiesta corrisponde

Come funzione questo potrebbe essere associato a un tasto (se molto alta intensità di risorse) o CursorMoved se non così lento.

Ok, ora. Qualcuno ha scritto/trovato qualcosa del genere? I guru di vimscript hanno un'idea su come iniziare effettivamente a scrivere una sceneggiatura del genere?

Ci scusiamo per la lieve disassuefazione e la cattiva formattazione. Sentiti libero di modificare/formattare. O votare per chiudere.

+2

argomento supercool. questo highlight migliora davvero la leggibilità dell'algoritmo. alcune notizie su questo? – nkint

+0

È totalmente fattibile per C/C++/Obj-C. So che è possibile usare Python/Clang per ottenere l'ambito del cursore corrente e la firma della funzione corrente. Fonte: http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/. Non dovrebbe essere difficile scrivere un plugin vim con questo. –

+8

Ero così vicino al downvoting per la pubblicazione di immagini di codice anziché di testo ... ma poi ho letto la domanda. ;) –

risposta

1

Una possibile soluzione può essere trovata here. Non è il modo migliore perché evidenzia ogni occorrenza nell'intero file e devi dare il comando ogni volta (probabilmente il secondo può essere evitato, non so il primo). Dagli un'occhiata però.

+0

Bel trucco! Ma questo non è consapevole della sintassi. – viebel

+0

Non fa cose automaticamente abbastanza. – progo

5

Questo è molto più difficile di quanto sembri, e al limite - impossibile con l'API di vimscript così com'è, perché non è solo necessario analizzare il file; se si desidera che funzioni correttamente, è necessario analizzare il file in modo incrementale.Ecco perché i normali file di sintassi sono limitati a ciò che puoi fare con le espressioni regolari: quando cambi alcuni caratteri, vim può capire cosa è cambiato nell'evidenziazione della sintassi, senza dover ripetere l'intero file.

L'evidenziatore della sintassi di vim è limitato a gestire le regex, ma se si esegue questa operazione, è possibile eseguire il rollup del proprio parser in vimscript e generare una sintassi locale del buffer che fa riferimento a token nel file per riga e colonna, usando gli \% l e \% c atomi in un'espressione regolare. Questo dovrebbe essere rieseguito dopo ogni cambiamento. Sfortunatamente non c'è autocmd per "file changed", ma c'è il CmStorHold autocmd, che viene eseguito quando sei rimasto inattivo per una durata configurabile.

+0

Sono d'accordo ... è un po 'folle. Ma ci sono legami python/ruby ​​/ schema là fuori. E quelle lingue hanno librerie di terze parti. Forse avrei dovuto sottolineare il fatto di non dover essere pienamente VimL. – progo

Problemi correlati