texto - vim linux
¿Utiliza el resaltador de sintaxis de emacs o vim para el programa de línea de comandos? (5)
Al igual que Emacs (respuesta de cp. Ataylor), Vim puede representar un búfer con resaltado de sintaxis completa en HTML; ver :help 2html.vim
. Probablemente puedas volver a utilizar gran parte del código del complemento que pasa por la sintaxis del búfer, y cambiarlo para renderizar en secuencias de escape ANSI, pero tendrás que volver a implementar toda la lógica de renderizado por ti mismo.
Aunque hay algunos complementos que emplean Vim como buscapersonas, no creo que sea posible utilizar Vim para enviar el buffer con secuencias de escape ANSI. Después de todo, Vim desea mantener el control del terminal y lo borra al salir.
Sugeriría que busque otra solución dedicada fuera de Vim, aunque eso significa que debe instalarla.
Tengo un programa de línea de comandos que arroja JSON y YAML. De forma predeterminada, detecta si pygments (pygramize) está disponible y, si lo hace, pasa la salida a través de él para obtener un buen resultado coloreado. Sin embargo, los pigmentos no están instalados por defecto en la mayoría de las computadoras en las que se ejecutará este programa. Pero la mayoría de las computadoras tendrán ya sea emacs o vim, sin embargo, lo hace. ¿Hay alguna forma de obtener uno de estos editores para la sintaxis, resaltar texto usando secuencias de escape ANSI y luego emitirlo de nuevo?
Emacs incluye una función llamada htmlfontify
que convertirá un búfer con fuentes a HTML. Puede usar esto en modo por lotes con un pequeño script elisp para representar un archivo como HTML. Por ejemplo:
emacs -q --batch --file myfile.rb --eval ''(progn (require (quote htmlfontify)) (htmlfontify-buffer) (set-buffer-modified-p t) (save-buffer))''
Matthew Wozniski escribió un guión llamado vimcat.sh que hace esto con Vim. Su versión está en https://github.com/godlygeek/vim-files/blob/master/macros/vimcat.sh . Le hice algunas modificaciones (si la memoria sirve, las modificaciones le permitieron funcionar en mi sistema Mac OS X; sé que la sustitución de /dev/fd/9
por /proc/self/fd/9
tenía ese propósito) ); ver mi esencia en https://gist.github.com/4090959 .
Creo que las dos versiones del script tienen problemas para volver al color de fondo predeterminado si el resaltado de Vim cambia el fondo.
Si no desea seguir el consejo de @IngoKarkat y reescribir el plugin estándar para admitir la secuencia de escape de ANSI, puede usar mi complemento formatvim , este soporta la secuencia de escape de ANSI mediante el uso de
Format format csi to /path/to/file
. Inicialmente, mi complemento era una reescritura de la orientación 2html estándar para compatibilidad con diferentes formatos con la adición fácil de un nuevo formato (pasé unos 30 minutos para agregar compatibilidad con la secuencia de escape ANSI, principalmente leyendo la especificación de estas secuencias), pero el código actual ha ido demasiado lejos como para mencionar similitudes. Se sabe que funciona más rápido para archivos grandes o cuando se usa una instancia de vim para representar varios archivos (es decir, cuando la etapa de calentamiento ("compilación" y llenado de caché) se enmascara por el beneficio de una ejecución posterior).
como el editor ya puede hacer las cosas ansi, es bastante fácil hacer una captura de pantalla del editor, ¿no?
script -qc "stty rows 10000
emacs -nw -visit YOURFILE.YAML -eval ''(redisplay t)'' -f kill-emacs
resize"
(la nueva exhibición solo es necesaria para GNU FSF Emacs)
ahora limpia la captura
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
Si no desea que el proceso de grabación sea visible en la pantalla, puede envolverlo en un terminal oculto con algo como Perl''s IO :: Pty