2012-11-15 15 views
5

Mam program wiersza polecenia, który wypluwa JSON i YAML. Domyślnie wykrywa, czy obiekty (pygmentize) są dostępne, a jeśli tak, przekazują dane wyjściowe, aby uzyskać ładne, kolorowe wydruki. Jednak moduły nie są instalowane domyślnie na większości komputerów, na których uruchomiony będzie ten program. Jednak większość komputerów będzie miała emacs lub vim. Czy istnieje sposób, aby jeden z tych edytorów podświetlił składnię, zaznaczając tekst za pomocą sekwencji kontrolnych ANSI, a następnie wypuszczając go ponownie?Wykorzystanie zakreślacza składni emacsa lub vima dla programu wiersza poleceń?

+0

BTW, właśnie dowiedziałem się o coderay. Jest oparty na rublach, a jego program wiersza poleceń jest znacznie szybszy niż pygmentize. –

+1

Inną opcją jest [Źródło główne GNU] (http://www.gnu.org/software/src-highlite/source-highlight.html). Używam tego, aby uzyskać kolory za pomocą [less] (http://superuser.com/a/71593/79870). –

+0

@RandyMorris: tak, jest nawet moduł CPAN (mój program jest oparty na Perlu). Jedyny problem polega na tym, że zależność jest dość duża (zainstalowanie kodu źródłowego i jego bibliotek dev w celu zbudowania modułu CPAN pobiera około 100 MB pakietów Debiana). –

Odpowiedz

1

Emacs zawiera funkcję o nazwie htmlfontify, która przekształci bufor z czcionkami na HTML. Możesz użyć tego w trybie wsadowym z małym skryptem elips, aby renderować plik jako HTML. Na przykład:

emacs -q --batch --file myfile.rb --eval '(progn (require (quote htmlfontify)) (htmlfontify-buffer) (set-buffer-modified-p t) (save-buffer))' 
+0

Dzięki. Niestety nie wyjaśniłem, potrzebuję tego w sekwencjach escape ANSI, ponieważ wysyłam do terminala. Mój EmacsLisp-fu jest poważnie ograniczony, ale dałeś mi kilka wskazówek do zabawy. –

2

Podobnie jak Emacs (odpowiednik ataylora), Vim może renderować bufor z pełnym podświetlaniem składni do HTML; patrz :help 2html.vim. Prawdopodobnie możesz ponownie użyć znacznej części kodu wtyczki przechodzącej przez składnię bufora i zmienić go tak, by wyświetlał sekwencje specjalne ANSI, ale musiałbyś ponownie wdrożyć całą logikę renderowania samodzielnie.

Chociaż istnieje kilka wtyczek, które wykorzystują Vima jako pager, nie sądzę, że możliwe jest użycie Vima do wyprowadzenia bufora z sekwencjami specjalnymi ANSI. W końcu Vim chce zachować kontrolę nad terminalem i czyści go przy wychodzeniu.

Proponuję szukać innego, dedykowanego rozwiązania poza Vim, chociaż oznacza to, że musisz go zainstalować.

1

Jeśli nie chcesz śledzić porady @IngoKarkat i przepisać standardowej wtyczki do obsługi sekwencji escape ANSI można używać mojego formatvim wtyczki, obsługuje renderowanie do sekwencji escape ANSI używając

Format format csi to /path/to/file 

. Początkowo moja wtyczka była przepisem standardowego kierowania 2html dla różnych formatów wsparcia z łatwym dodaniem nowego formatu (spędziłem około 30 minut na dodaniu obsługi sekwencji znaków ANSI, głównie czytając specyfikację tych sekwencji), ale obecny kod posunął się za daleko wspomnieć o podobieństwach. Wiadomo, że działa szybciej w przypadku dużych plików lub gdy używa jednej instancji vima do renderowania wielu plików (tj. Gdy rozgrzewka ("kompilacja" i wypełnianie pamięci podręcznej) jest maskowana z korzyścią dla dalszego działania).

4

jako redaktor może już robić rzeczy ansi, raczej łatwo zrobić zrzut ekranu edytora, nie?

script -qc "stty rows 10000 
emacs -nw -visit YOURFILE.YAML -eval '(redisplay t)' -f kill-emacs 
resize" 

(ponownego wyświetlenia potrzebna jest tylko dla GNU Emacs FSF)

teraz oczyścić przechwytywanie

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 

jeśli nie chcesz proces nagrywania widoczny na ekranie, można go owinąć w ukrytym terminalu z czymś podobnym do perlowego IO :: Pty

+0

Dobra sztuczka! Trochę przesada dla problemu w zasięgu ręki. Dzięki. –

4

Matthew Wozniski napisał skrypt o nazwie vimcat.sh, który robi to z Vimem. Jego wersja to https://github.com/godlygeek/vim-files/blob/master/macros/vimcat.sh. Wprowadziłem do niej kilka modyfikacji (jeśli pamięć służy, modyfikacje pozwoliły na uruchomienie go w systemie Mac OS X. Wiem, że w tym celu nastąpiła zamiana /dev/fd/9); zobacz moje główne informacje na temat https://gist.github.com/4090959.

Wierzę, że obie wersje skryptu mają problem z przywróceniem domyślnego koloru tła, jeśli podświetlenie Vima zmieni tło.

Powiązane problemy