2012-09-04 6 views
8

En resumen, necesito saber en un Makefile si `make está siendo invocado desde ViM o no. ¿Hay alguna variable (como AMBIENTE o algo) que ViM establezca en un valor específico?¿Cómo saber en un Makefile si se invoca `make` desde ViM?

La razón por la que necesito esto es la siguiente:

Si llama desde bash, lo que podía hacer todo tipo de cosas maravillosas para el usuario (o yo), como dar mensajes en cuanto a que el subsistema está siendo construido y resaltando errores y advertencias

El problema es que, cuando se llama desde ViM, los mensajes de error ya se capturan y la introducción de los comandos \x1b (para el color) hace que los mensajes sean incomprensibles para ViM. Lo que quiero hacer es básicamente desactivar la coloración cuando se emite :make en ViM.

Aunque prefiero que el Makefile lo resuelva, estoy abierto a otras soluciones.

Respuesta

2

Dentro de Vim, puede establecer variables de entorno heredadas por shells abiertas; p.ej.

:let $INSIDE_VIM = 1 

Si esto se trata sólo de :make, se puede manipular la 'makeprg' que determina lo que se invoca:

:set makeprg=export\ INSIDE_VIM=1;make 

Si no eres más que preocupados por las secuencias de escape para colorear, usted podría establecer $TERM a algo que no entiende los colores (¿quizás dumb?) y si el coloreado no está codificado (lo que desafortunadamente es una herramienta grande si se usa en muchas herramientas), debería obedecer la configuración del terminal y no imprimir las secuencias de escape.

+0

Tengo una configuración que dice si debe usar compilaciones o no. La comprobación en el archivo Makefile simplemente anula la configuración. Sin embargo, no había pensado en verificar si la terminal puede mostrar los colores o no (gracias por señalar eso). Sin embargo, probablemente cambiar 'TERM 'en sí no sea tan bueno, ya que otros programas (bash, por ejemplo) pueden confiar en él. – Shahbaz

+0

¡El 'let $ INSIDE_VIM ​​= 1' es genial! – Shahbaz

+0

Siempre y cuando no cambie 'xterm' a' dtterm', sino que "reduzca la calidad" de las capacidades del terminal, debería estar bien. Pero no soy un experto en terminales, y probablemente no funcionará todo el tiempo; acaba de agregar eso para completar. –

1

Puede modificar su encuadernación vim a SOURCE="vim" make, por lo que en su archivo MAKE la variable $$SOURCE se establece en "vim".

Editar: Veo que no son de hecho el uso de fijaciones en vim, puede utilizarlos con la siguiente línea en su .vimrc (o /etc/vimrc) así:

:nmap <F5> <CR>SOURCE="vim" :make<CR> 

Esto se unirá F5 para lo que quiere

+0

¿Por qué el doble '$'? Además, ¿podría alias ': make' a' SOURCE = "vim" make' en su lugar? – Shahbaz

+0

es lo que necesitaba en mi Makefile para imprimir el contenido de la variable SOURCE 'all: echo" $$ SOURCE "' que imprimía vim con mi invocación – jolivier

1

Puede marcar MYVIMRC o VIMRUNTIME variables de entorno. En mi distribución GNU/Linux, el valor SHLVL es 1 de bash y 2 cuando se invoca make desde vim.

+0

Estos son agradables y fáciles. Sin embargo, 'MYVIMRC' no se puede definir si' .vimrc' no existe. 'VIMRUNTIME' de todos modos puede ser definido por un usuario (aunque poco probable). 'SHLVL' no es tan robusto, ya que' vim' puede no haberse ejecutado desde un nivel 1 bash. Esperaré por otras respuestas, pero 'VIMRUNTIME' hasta ahora parece ser la solución más confiable. – Shahbaz

4

O le diría explícitamente al archivo MAKE que no desea colorear, o lo filtraría. Si intenta adivinar dentro del archivo MAKE, es posible que se rompa cuando usa un editor diferente, o shell, o modifica su entorno.

Mi preferencia sería simplemente filtrar los caracteres no imprimibles:

:set makeprg=make\ $*\ \\\|filter 

ya que este no requiere soluciones explícitas en el makefile. Sin embargo, el filtro requerido en sí no es trivial: ver por ejemplo this question en unix.stackexchange.

Por otra parte, como ya se ha sugerido, la forma más fácil de decir a su makefile explícitamente es añadir una variable a su invocación:

:set makeprg=make\ NO_COLOUR=1 

o lo que sea (make debería ser el valor actual de makeprg).

.

Cuestiones relacionadas