On Jul 24, 8:02 am, Bram Moolenaar <[email protected]> wrote:
> Nico Raffo wrote:
> > Due to a syntax change between python 2 and python 3, there is no way
> > to insert a new line at an arbitrary line number into a buffer using
> > the python interface without using undocumented parameters in the
> > buffer.append() method.
>
> > In the existing python 2 interface, the way to insert a line according
> > to the documentation is:
>
> > :py b[n:n] = ["a new line at line number n"]
>
> > In python 3 you are no longer allowed to assign to a slice, so this
> > doesn't work anymore.
>
> > There is an undocumented second parameter to buffer.append() which
> > allows you to add a line number where the new line should be added.
> > However this diverges from the standard set of python list methods. If
> > the vim module wants to emulate a python list, it should have
> > buffer.insert(n, "new line at n"). Otherwise the extra param in
> > append() should be documented.
>
> > I'll throw in a patch for the new buffer.insert() method if people
> > think it's a good idea.
>
> Why not document the extra argument to append()?
>
>         :py vim.current.buffer.append(["foobar"], 239)
>
> Seems to work as expected.
>

Either option (add documentation for append() or implementing the
standard list method .insert()) seems fine to me. It would be nice if
the buffer object supported more of the python list methods, but that
can wait for another Vim version.

However, looking at the code this morning I realized the issue is not
in fact a syntax difference between python 2 and 3. Python 3 does
support

some_list[i:j] = replacement_list

but for some reason the piece of if_python.c that handles this syntax
for the vim module wasn't ported to python 3. This is also causing
this syntax (from :h python) to fail:

:py del b[n:m]                  # deletes a number of lines

Nico

-- 
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

Raspunde prin e-mail lui