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

Submatch newline bug?

Expand Messages
  • Clockwork Jam
    I m seeing some odd behaviour when passing a submatch to substitute() when evaluating a regexp in GVim 7.2. Say I have the following two- line file: the second
    Message 1 of 2 , Nov 2, 2009
    • 0 Attachment
      I'm seeing some odd behaviour when passing a submatch to substitute()
      when evaluating a regexp in GVim 7.2. Say I have the following two-
      line file:

      the second line
      appears below

      If I place the cursor at the start of the file and execute the
      following substitution:

      :s/\v(the\s)(\_.*)/\=submatch(1) . submatch(2)

      then it works correctly and I see:

      the second line
      appears below

      However, if I instead execute the following substitution on the same
      pattern:

      s/\v(the\s)(\_.*)/\=substitute(submatch(1),'the','no','') . submatch
      (2)

      then I see only the following line:

      no second line

      In both of these examples, the second submatch spans both lines. But
      in the second example, after calling substitute() with the first
      match, the second match retains only the text that appears on the
      first line. Is this a bug?

      --~--~---------~--~----~------------~-------~--~----~
      You received this message from the "vim_dev" maillist.
      For more information, visit http://www.vim.org/maillist.php
      -~----------~----~----~----~------~----~------~--~---
    • Bram Moolenaar
      ... Well, either a bug or an unsupported feature. What happens is that the substitute() call clears the submatches and sets new ones. I suppose the submatches
      Message 2 of 2 , Nov 3, 2009
      • 0 Attachment
        Clockwork Jam wrote:

        > I'm seeing some odd behaviour when passing a submatch to substitute()
        > when evaluating a regexp in GVim 7.2. Say I have the following two-
        > line file:
        >
        > the second line
        > appears below
        >
        > If I place the cursor at the start of the file and execute the
        > following substitution:
        >
        > :s/\v(the\s)(\_.*)/\=submatch(1) . submatch(2)
        >
        > then it works correctly and I see:
        >
        > the second line
        > appears below
        >
        > However, if I instead execute the following substitution on the same
        > pattern:
        >
        > s/\v(the\s)(\_.*)/\=substitute(submatch(1),'the','no','') . submatch
        > (2)
        >
        > then I see only the following line:
        >
        > no second line
        >
        > In both of these examples, the second submatch spans both lines. But
        > in the second example, after calling substitute() with the first
        > match, the second match retains only the text that appears on the
        > first line. Is this a bug?

        Well, either a bug or an unsupported feature.

        What happens is that the substitute() call clears the submatches and
        sets new ones.

        I suppose the submatches should be saved and restored.

        --
        I bought a book on hair loss, but the pages kept falling out.

        /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
        /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
        \\\ download, build and distribute -- http://www.A-A-P.org ///
        \\\ help me help AIDS victims -- http://ICCF-Holland.org ///

        --~--~---------~--~----~------------~-------~--~----~
        You received this message from the "vim_dev" maillist.
        For more information, visit http://www.vim.org/maillist.php
        -~----------~----~----~----~------~----~------~--~---
      Your message has been successfully submitted and would be delivered to recipients shortly.