Hari Krishna Dara wrote:
I just want to thank Bram specially for all the scripting related
improvements that were done in Vim7. After converting most of my plugins
to use Lists instead of multvals plugin, other than having a cleaner and
more compact code, my productivity has improved significantly (and using
multvals itself was very productive over using simple
curly-braces-names, which means for those not using multvals before, it
will be a tremendous change). If you just compare my 4.0 version of
perforce plugin with that of previous, you would see what I am talking
about. Also, I have been making a few additional changes today and got
some features done very easily, and previously I kept pushing them
because it would have been very complex/time-consuming. E.g., as part of
one feature, I had to determine what files need their status refreshed
after updating a changelist, and I could do it in just 3 lines (to
determine the outersection of prior and new filelist that the changelist
contained).
The Lists, Hashes (and their constructs such as :for, map(), filter()),
and a few other changes such as, <buffer> autocommands and <expr>
maps/abbreviations etc. avoided a lot of complexity in my plugins.
These features will go a long way in bringing more value to Vim, as
more complex plugins can be written with less effort and more people
will be willing to contribute plugins.
I recently observed (from a Tony's post, I think) that you can now use
+= and -=, and this is a very nice addition to avoid some repetition.
I think I noticed it in one of Bram's posts, but I'm not sure.
I still miss pre and post increment and decrement operators (avoids a
separate :let command by itself), and indexed for loops.
I'm not sure what you call indexed for loops, but Vim 7 now has two
looping structures. In addition to the time-honored "while": incremental
let i=initial
while i <= final
" do something
i = i + 1
endwhile
or yes/no on a criterion set inside the (potentially infinite) loop
let done = 0
while ! done
" do something; set done to nonzero if finished
endwhile
there is now also
for i in List
" do something
endfor
where List can be the result of the range() function, so that now the
first-type "while" can be replaced by a "for" if compatibility with
earlier versions is not important. (I noticed this ":for" command in
Bram's example in the help about the 'tabline' option.)
For the later,
I get around using the below construct:
let loop_index = <initial value>
while <condition>
try
<body>
finally
let loop_index = <new value>
endtry
endwhile
This takes care of any :continue that you use inside, but this is
clumsy.
Best regards,
Tony.