Loading ...
Sorry, an error occurred while loading the content.

Re: behaviour of d_

Expand Messages
  • Bram Moolenaar
    ... Thanks. It s probably not difficult to add a test for this... -- hundred-and-one symptoms of being an internet addict: 124. You begin conversations with,
    Message 1 of 6 , Dec 8, 2012
    • 0 Attachment
      Christian Brabandt wrote:

      > On Sa, 08 Dez 2012, Christian Brabandt wrote:
      >
      > > > Given a file with the following lines (cursor position at '|')
      > > >
      > > > First line
      > > > Second line beginning |with whitespace
      > > > Third line
      > > >
      > > > the following commands produce the indicated results:
      > > > 1) _ goes to first non-blank character in the same line ('S')
      > > > 2) v_ visually select region between 'S' and cursor position
      > > > 3) d_ deletes the *whole* second line (even characters after the current cursor position)
      > > >
      > > > 1 and 2 work as I'd expect. I don't understand the behaviour of d_ though.
      > > > According to :he d
      > > >
      > > > "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."
      > > >
      > > > However this doesn't cover my example since the condition 'start and end of the motion are not in the same line' doesn't apply. I wasn't able to find another documented exception.
      > > >
      > > > Is this a bug or am I missing something?
      > >
      > > _ is a linewise motion, so you are deleting the complete line.
      > > You should however be able to use the o_v operator to force the motion
      > > to be characterwise, however, for some reason, this does not seem to
      > > work with d
      >
      > Bram,
      > strangely enough, dv_ only works when 'startofline' is set, but
      > does not, when 'sol' is unset.
      >
      > This patch fixes it, by making sure, if motion_type_force is set to 'v'
      > or Ctrl_V 'startofline' option does not apply (as stated by :h 'sol')
      >
      > (motion_type hasn't been set to MCHAR yet).
      >
      > diff --git a/src/normal.c b/src/normal.c
      > --- a/src/normal.c
      > +++ b/src/normal.c
      > @@ -8628,7 +8628,9 @@
      > cap->oap->motion_type = MLINE;
      > if (cursor_down(cap->count1 - 1L, cap->oap->op_type == OP_NOP) == FAIL)
      > clearopbeep(cap->oap);
      > - else if ( cap->oap->op_type == OP_DELETE
      > + else if ( ( cap->oap->op_type == OP_DELETE /* only with linwise motions */
      > + && cap->oap->motion_force != 'v'
      > + && cap->oap->motion_force != Ctrl_V)
      > || cap->oap->op_type == OP_LSHIFT
      > || cap->oap->op_type == OP_RSHIFT)
      > beginline(BL_SOL | BL_FIX);

      Thanks. It's probably not difficult to add a test for this...

      --
      hundred-and-one symptoms of being an internet addict:
      124. You begin conversations with, "Who is your internet service provider?"

      /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
      /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
      \\\ an exciting new programming language -- http://www.Zimbu.org ///
      \\\ help me help AIDS victims -- http://ICCF-Holland.org ///

      --
      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
    • Christian Brabandt
      Hi Bram! ... Yeah, I thought about this, after I sent the mail. Anyways, here is the patch including a test. regards, Christian -- Schöpferische Gemüter
      Message 2 of 6 , Dec 9, 2012
      • 0 Attachment
        Hi Bram!

        On Sa, 08 Dez 2012, Bram Moolenaar wrote:

        > Thanks. It's probably not difficult to add a test for this...

        Yeah, I thought about this, after I sent the mail. Anyways, here is the
        patch including a test.

        regards,
        Christian
        --
        Schöpferische Gemüter haben immer gewußt,
        wie sie jede Art von schlechter Erziehung überleben.
        -- Anna Freud

        --
        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
      • Christian Brabandt
        ... Sorry, small error in the testfile. Here is the correct patch. regards, Christian -- Demokratie ist eine Form der Regierung bei der durch die Wahl einer
        Message 3 of 6 , Dec 9, 2012
        • 0 Attachment
          On So, 09 Dez 2012, Christian Brabandt wrote:
          > On Sa, 08 Dez 2012, Bram Moolenaar wrote:
          > > Thanks. It's probably not difficult to add a test for this...
          >
          > Yeah, I thought about this, after I sent the mail. Anyways, here is the
          > patch including a test.

          Sorry, small error in the testfile. Here is the correct patch.


          regards,
          Christian
          --
          Demokratie ist eine Form der Regierung bei der durch die Wahl einer
          inkompetenten Masse eine korrupte Minderheit ernannt wird.
          -- George Bernard Shaw

          --
          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
        • Bram Moolenaar
          ... Thanks! I think it s a good habit to add a test if we fix something. It might break again. -- I m writing a book. I ve got the page numbers done. ///
          Message 4 of 6 , Dec 9, 2012
          • 0 Attachment
            Christian Brabandt wrote:

            > Hi Bram!
            >
            > On Sa, 08 Dez 2012, Bram Moolenaar wrote:
            >
            > > Thanks. It's probably not difficult to add a test for this...
            >
            > Yeah, I thought about this, after I sent the mail. Anyways, here is the
            > patch including a test.

            Thanks! I think it's a good habit to add a test if we fix something.
            It might break again.


            --
            I'm writing a book. I've got the page numbers done.

            /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
            /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
            \\\ an exciting new programming language -- http://www.Zimbu.org ///
            \\\ help me help AIDS victims -- http://ICCF-Holland.org ///

            --
            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
          • Ben Fritz
            ... There is value in the _ motion, which goes to the first non-blank character in a line. It is like ^, but also takes a count to go to a different line than
            Message 5 of 6 , Dec 10, 2012
            • 0 Attachment
              On Sunday, December 9, 2012 6:43:23 PM UTC-6, ping wrote:
              >
              > any, overall, if d_ is same as dd, why bother the complexity? or are
              >
              > there any extra value of using d_ that I missed?

              There is value in the _ motion, which goes to the first non-blank character in a line. It is like ^, but also takes a count to go to a different line than the current in one motion. It is also easier to reach than ^ on a Dvorak keyboard.

              There is value in the d command combining with any arbitrary motion command.

              dd is provided for an easy way to delete one or more entire lines. The fact that this convenience command does the same thing as combining the d command with certain motions is irrelevant to the usefulness of those motions, and also irrelevant to whether the d command should combine with that motion (it should combine with all motions).

              --
              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
            Your message has been successfully submitted and would be delivered to recipients shortly.