On 8 August 2010 23:01, Bram Moolenaar <b...@moolenaar.net> wrote:
> ...
> We are getting close to the 7.3 release!  If nothing goes wrong I will
> release 7.3 in less than a week.  Last chance to report problems!
> ...

Bram,

Great thanks to you for doing all this huge work on keeping Vim the
best text editor.  This work of yours helps so many people in the
world, and in so many ways, to do their own work.

The upcoming 7.3 release will no doubt improve on our experience
with Vim, as all previous have done.  However, I am concerned that
the problems with Vim language's basic input and output about which
I wrote several times, are, it seems, going to remain in 7.3 – and
that means for at least another couple of years or more.

Please reconsider this!

One way to use Vimscript is to write and execute simple REPLs in the
editor.  A number of useful utilities, as well as educational programs
can be written this way.  Simple and reliable I/O primitives are
essential to this, but, alas, Vim's :echo and input() have serious
bugs each, and are even more problematic when used together.  Said
problems can be circumvented, I guess, but at the expense of ugliness
and inconvenience reproduced in every single script.  This would
continually repel especially potential new users of Vim.

I am once again describing the bugs and incosistencies I know of, in
the hope that this would help to change your mind w.r.t. them.  I am
mostly repeating my previous posts but exposing the issues a bit more
systematically.

Thank you for your attention, best regards,
   Boyko

                  ~~~~~~~~~~~~~~~~~~~~~~~~~

==1==
The documentation says that echo “… starts on a new line” but this
is broken in at least several cases:

(a) empty strings, e.g.
        for s in ['abc', '', 'def'] | echo s | endfor
    prints
        abc
        def
    rather than
        abc

        def

(b) this doesn't look like empty strings but still:
        echo "abc\n" | echo "def"
    is supposed to output
        abc

        def
    but instead prints
        abc
        def

(c) after a call of input(), e.g. in
        let x = input('') | echo 'ABC'
    the ABC string goes to the same line as the input; similarly,
        let x = input('') | echo "\nABC"
    prints ABC on the line immediately following the input(), while
    it should really leave an empty line between that of input() and
    that with the ABC.

==2==
The documentation says nothing about whether input() always starts
on a new line or not.  Simple tests such as e.g.
    echo ">>>" | let x = input('')
lead one to concluding that it does.  However, then,
    while 1 | let x = input('A') | echo "R\n" | endw
should be expected to print empty lines between each "R\n" and the
subsequent input('A') but it does not – that contradicts the
assumption that input() always moves to a new line at start.

(Besides, the echo is again erroneous as described in (c) above.)

==3==
Reducing the "R\n" in the above example to just "R":
    while 1 | let s = input('A') | echo 'R' | endw
exhibits an even stranger behaviour.  For a start, just enter several
empty lines to each input() before breaking the loop: not only is the
'R' printed on the same line as 'A' (which it shouldn't) but each new
'R' is displaced more and more to the right.

==4==
Once input() finishes, both the prompt and the entered string are
being removed from display.  Apart from this being, I believe, a
wrong behaviour in itself, it, again, is not consistently manifested.
This is easily seen by trying the last example above, this time
entering non-empty lines.  One can see that the implicitly echoed
input is fully or partially (depending on its length) retained –
which is probably a particular manifestation of some of the other
bugs I mentioned (or perhaps a remnant of a correct behaviour).

Also, the input()'s display, both the prompt and the entered text,
is not removed if a single command such as
    :let x = input('PROMPT: ')
is executed.

I believe that input() should *never* remove the entered text, as well
as the prompt, if any.  Provided that it ends without moving to a new
line, it shoild still be possible, if that is wanted, to erase the
said text by ‘echon’-ing \r or \b.  If removal is the default and
one wants to keep the input, one would have to re-echo what he just
typed in, which I think is much less natural.

-- 
You received this message from the "vim_use" 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

Reply via email to