Ho un programma da riga di comando che sparge JSON e YAML. Per impostazione predefinita rileva se pygments (pygmentize) è disponibile e se lo fa, passa l'output attraverso di essa per ottenere un buon output colorized. Tuttavia, pygments non è installato di default sulla maggior parte dei computer su cui verrà eseguito questo programma. Ma la maggior parte dei computer avrà o emacs o vim, tuttavia, lo fa. C'è un modo per ottenere uno di questi editor in sintassi: evidenziare del testo usando le sequenze di escape ANSI e quindi restituirlo di nuovo?Utilizzo dell'evidenziatore della sintassi di emacs o vim per il programma della riga di comando?
risposta
Emacs include una funzione denominata htmlfontify
che convertirà un buffer danneggiato in HTML. Puoi usarlo in modalità batch con un piccolo script elisp per eseguire il rendering di un file in formato HTML. Per esempio:
emacs -q --batch --file myfile.rb --eval '(progn (require (quote htmlfontify)) (htmlfontify-buffer) (set-buffer-modified-p t) (save-buffer))'
Grazie. Scusate non l'ho chiarito, ne ho bisogno nelle sequenze di escape ANSI poiché sto trasmettendo al terminale. Il mio EmacsLisp-fu è molto limitato, ma mi hai dato alcuni suggerimenti per giocare. –
come Emacs (. Cp risposta di ataylor), Vim può rendere un buffer con sintassi completa in evidenza in HTML; vedi :help 2html.vim
. Probabilmente potresti riutilizzare gran parte del codice del plugin che passa attraverso la sintassi del buffer e cambiarlo per renderizzare le sequenze di escape ANSI, ma dovresti re-implementare tutta la logica di rendering da solo.
Sebbene esistano alcuni plugin che utilizzano Vim come cercapersone, non penso sia possibile utilizzare solo Vim per emettere il buffer con sequenze di escape ANSI. Dopotutto, Vim vuole mantenere il controllo del terminale e lo cancella quando esce.
Suggerirei di cercare un'altra soluzione dedicata esterna a Vim, anche se ciò significa che è necessario installarlo.
Se non si vuole seguire il consiglio @IngoKarkat e riscrivere plug standard per supportare ANSI sequenza di escape è possibile utilizzare il mio formatvim plug-in, che supporta il rendering a ANSI sequenza di escape utilizzando
Format format csi to /path/to/file
. Inizialmente il mio plugin era una riscrittura del targeting standard 2html per il supporto di diversi formati con una facile aggiunta di un nuovo formato (ho impiegato circa 30 minuti per aggiungere il supporto alla sequenza di escape ANSI, principalmente leggendo le specifiche di queste sequenze), ma il codice attuale è andato troppo lontano menziona le somiglianze È noto che funziona più velocemente per i file di grandi dimensioni o quando si utilizza un'istanza di vim per eseguire il rendering di un certo numero di file (ad esempio quando la fase di riscaldamento ("compilazione" e riempimento cache) viene mascherata dal vantaggio di un'ulteriore esecuzione).
come l'editor può già fare le cose ansi, piuttosto facile fare una cattura dello schermo dell'editor, no?
script -qc "stty rows 10000
emacs -nw -visit YOURFILE.YAML -eval '(redisplay t)' -f kill-emacs
resize"
(Rivisualizza è necessaria solo per GNU Emacs FSF)
ora ripulire la cattura
perl -p0E 's/\A(?s:.*)\e\[27m\r\n
\e\[A\n((?s).*?)
(?:\e\[K\n)+
\e.*\e\[27m\r$(?s:.*)\Z/$1/mx' < typescript
se non si desidera che il processo di registrazione visibile sullo schermo, è possibile avvolgere in un terminale nascosto con qualcosa di simile a IO :: Pty
Bel trucco! Un po 'eccessivo per il problema a portata di mano però. Grazie. –
Matthew Wozniski ha scritto uno script chiamato vimcat.sh che lo fa con Vim. La sua versione è https://github.com/godlygeek/vim-files/blob/master/macros/vimcat.sh. Ho apportato alcune modifiche (se la memoria serve, le modifiche gli hanno permesso di funzionare sul mio sistema Mac OS X, so che la sostituzione di /dev/fd/9
per /proc/self/fd/9
aveva lo scopo); guarda il mio succo allo https://gist.github.com/4090959.
Credo che entrambe le versioni dello script abbiano problemi con il ritorno al colore di sfondo predefinito se l'evidenziazione di Vim cambia lo sfondo.
- 1. Utilizzo dell'argomento della riga di comando per il trasferimento di file in un programma
- 2. Modo corretto per uscire dal programma della riga di comando?
- 3. Emacs in esecuzione nella stessa finestra della riga di comando
- 4. Vim evidenziazione della sintassi per rubino 1.9
- 5. Argomenti della riga di comando nel programma C utilizzando Netbeans
- 6. Argomenti della riga di comando nel programma F #?
- 7. Utilizzo di sed con argomento della riga di comando?
- 8. Recupero della cronologia della riga di comando
- 9. Sintassi della riga di comando per impedire il wrapping nel file di output di PowerShell?
- 10. Cambia il colore della sintassi in vim?
- 11. Impostazione colore riga di comando Vim
- 12. Evidenziazione della sintassi in vim
- 13. Evidenziazione della sintassi per .gitignore in Vim?
- 14. evidenziazione della sintassi vim per jinja2?
- 15. Come aggirare il limite di lunghezza della riga di comando?
- 16. Utilizzo degli argomenti della riga di comando in VBscript
- 17. Utilizzo di * nella riga di comando in un programma Java
- 18. Colorazione della sintassi più avanzata in emacs per Python
- 19. Vim: sostituzione della fine della riga
- 20. Utilizzo della sintassi di inizializzatore della raccolta su tipi personalizzati?
- 21. Argomenti della riga di comando in python.
- 22. Crash il programma con argomenti della riga di cmd
- 23. Haskell: Parsing argomenti della riga di comando
- 24. Esegui comando vim da riga di comando
- 25. Argomenti della riga di comando di Eclipse
- 26. Rubino controllo della sintassi in vim
- 27. Interfaccia della riga di comando C++
- 28. Argomenti della riga di comando Java. Utilizzo di * come argomento per la moltiplicazione
- 29. Aggiungendo argomenti della riga di comando per l'applicazione VB.Net
- 30. C++ e opzioni della riga di comando
BTW, ho appena scoperto di coderay. È basato su ruby e il suo programma da riga di comando è molto più veloce di pygmentize. –
Un'altra opzione potrebbe essere [GNU Source-highlight] (http://www.gnu.org/software/src-highlite/source-highlight.html). Lo uso per ottenere i colori con [meno] (http://superuser.com/a/71593/79870). –
@RandyMorris: sì, c'è anche un modulo CPAN per questo (il mio programma è basato su Perl). L'unico problema è che la dipendenza è abbastanza grande (l'installazione di source-highlight e le sue librerie di sviluppo per costruire il modulo CPAN richiede circa 100 MB di pacchetti Debian). –