Hi vim-dev!

On Mi, 04 Jan 2012, Christian Brabandt wrote:

> Hi Bram!
> 
> On Mi, 04 Jan 2012, Bram Moolenaar wrote:
> 
> > 
> > Christian Brabandt wrote:
> > 
> > > I noticed a strange behaviour today when using the d command.
> > > I was deleting several lines with a motion that selected the last non
> > > blank on a line. Surprisingly, this deleted the whole line. After
> > > searching the help, I found it explained by this paragraph in the help:
> > > 
> > >     An exception for the d{motion} command: If the motion is not
> > >     linewise, the start and end of the motion are not in the same line,
> > >     and there are only blanks before the start and after the end of the
> > >     motion, the delete becomes linewise.  This means that the delete
> > >     also removes the line of blanks that you might expect to remain.
> > > 
> > > So I tried the suggestion, made at :h o_v
> > > 
> > >     When used after an operator, before the motion command: Force
> > >     the operator to work characterwise, also when the motion is
> > >     linewise.  If the motion was linewise, it will become
> > >     |exclusive|.
> > >     If the motion already was characterwise, toggle
> > >     inclusive/exclusive.  This can be used to make an exclusive
> > >     motion inclusive and an inclusive motion exclusive.
> > > 
> > > But surprisingly did not work. So I propose the following fix:
> > > 
> > > diff --git a/src/ops.c b/src/ops.c
> > > --- a/src/ops.c
> > > +++ b/src/ops.c
> > > @@ -1648,6 +1648,7 @@
> > >             && !oap->block_mode
> > >  #endif
> > >             && oap->line_count > 1
> > > +           && !oap->motion_force
> > >             && oap->op_type == OP_DELETE)
> > >      {
> > >         ptr = ml_get(oap->end.lnum) + oap->end.col;
> > 
> > Yes, this makes sense.  Thanks for the patch.
> > 
> > Would there be other places where motion_force needs to be checked?
> 
> Possibly ;)
> 
> (I don't know how to check)

When this is fixed, it should probably be mentioned in the docs. 
Something like this:

An exception for the d{motion} command: If the motion is not linewise, 
the start and end of the motion are not in the same line, and there are 
only blanks before the start and after the end of the motion, the delete 
becomes linewise. This means that the delete also removes the line of 
blanks that you might expect to remain. Use the |o_v| operator to force 
the motion to be characterwise.

regards,
Christian
-- 
Der Schnee ist eine erlogene Reinlichkeit.
                -- Goethe, Maximen und Reflektionen, Nr. 271

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