Am 04.01.2012 19:52, schrieb Christian Brabandt:
Hi Bram,
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;

regards,
Christian

What do you mean?  Example text:

  abc
  def
  ghi
  jkl

With cursor on "def", typing
    d2e
results in

  abc
  jkl

and typing
    dv2e
results in

  abc
  i
  jkl

According to the docs, it "works" for me, I think.

Would just be more useful if  dv2e  was handled inclusive (and not exclusive).

--
Andy

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