On Wed, Nov 25, 2015 at 5:13 PM, Gary Johnson <[email protected]> wrote:
> On 2015-11-25, B. Wilson wrote:
>> When running :make and there is output to both stderr and stdout,
>> I'm seeing a degree of reordering in the displayed output.
>>
>> I didn't notice any similar issues when searching the mailing
>> list, but forgive me if this is already a known bug/feature.
>>
>> Below I give steps on how to reproduce the behaviour on my machine
>> as well as the output of `vim --version`. I will be happy to
>> produce any other details that may be necessary.
>>
>>
>> ## Reproducing the Behaviour
>>
>> Create the following `foo.c` file:
>>
>>               #include <stdio.h>
>>
>>               int main()
>>               {
>>                       printf("This is a message on stdout and should appear 
>> first\n");
>>                       fprintf(stderr, "This is a message on stderr and 
>> should appear second\n");
>>
>>                       return 0;
>>               }
>>
>> Create the following `Makefile`:
>>
>>               run: foo
>>                       @./foo
>>
>> Compile the program:
>>
>>               $ make foo
>>
>> Let make compile and run the program:
>>
>>               $ make run
>>               cc     foo.c   -o foo
>>               This is a message on stdout and should appear first
>>               This is a message on stderr and should appear second
>
> In this case, foo's stdout and stderr are directed to your terminal,
> so those outputs are unbuffered.
>
>> Now compare this to when calling `:make run` from `vim`:
>>
>>               :make run
>>               This is a message on stderr and should appear second
>>               This is a message on stdout and should appear first
>>
>>               Press ENTER or type command to continue
>
> In this case, foo's stdout and stderr are directed to Vim's pipeline
> that collects make's output, so those outputs are buffered.
> Consequently, the lines appear in the order in which the buffers are
> flushed and not necessarily the order in which the lines were
> written to the buffers.
>
> The decision to buffer or unbuffer streams is made by the shell, not
> by Vim.
>
> Regards,
> Gary

If the program had been written in Python (like Mercurial is), setting
$PYTHONUNBUFFERED to some nonempty string would have prevented
buffering. With C and bash, I don't know.

Best regards,
Tony.

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui