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

Re: Consider lines containing a tab a paragraph boundary

Expand Messages
  • Christian Brabandt
    ... Here is an updated toy patch. I also made the section and para settings global-local. Note, there is one problem and I don t know how to approach it.
    Message 1 of 18 , Apr 19 2:10 PM
    View Source
    • 0 Attachment
      On Fr, 12 Apr 2013, zappathustra@... wrote:

      > Indeed. Actually, the bar should be preceded by three backslashes, if
      > I'm not mistaken (two denote a single one, and the last escapes the
      > bar).
      >
      > In the meanwhile I've found that if you're on a paragraph line, you
      > can't jump to paragraph lines just below if you're one the first
      > character. E.g.:
      >
      > set paragraphs=foo
      >
      > with file:
      >
      > foo
      > foo
      >
      > foo
      >
      > If you're on the first "f", you'll jump to the last line; if you're on
      > the first "o", you'll jump to the second line... With file:
      >
      > foo
      > foo
      > foo
      >
      > you won't jump anywhere from the first "f". Normally, "}" with the
      > usual 'paragraphs':
      >
      > - jumps to the next blank line when on a non-blank line;
      > - jumps to the next blank line following a non-blank line when on a
      > blank line;
      > - jumps to the end of the file if there is no blank line below the
      > current one.
      >
      > (``Blank line'' here of course means a real blank lines or the nroff
      > macros.)
      >
      > With Christian's patch, I think that behavior should be mimicked by
      > simply replacing ``(non-)blank line'' with ``line (not) matching the
      > option''.

      Here is an updated toy patch. I also made the 'section' and 'para'
      settings global-local.

      Note, there is one problem and I don't know how to approach it.

      Consider this file
      ,----
      |
      | foo
      | foo
      | foo
      |
      `----

      If the cursor is on the first foo and you have set para=/foo pressing }
      will jump after the whole 'foo' block. If the cursor is on the first o
      and you press '}' it will first move to the second 'foo' line and on
      next press of '}' it will move over the whole block.

      I have no clue, how to detect, whether the cursor is on a block of
      consecutive lines matching the 'para' or 'section' pattern and in that
      case jump over the complete block. Perhaps, when using a regular
      expression for 'para' and 'sections', we shouldn't jump over consecutive
      matching lines at all?

      Apart from that inconsistency, the patch seems to work for me.

      regards,
      Christian

      --
      --
      You received this message from the "vim_use" 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

      ---
      You received this message because you are subscribed to the Google Groups "vim_use" group.
      To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    • Bram Moolenaar
      ... Thanks. I wonder if changing paragraphs and sections into a regexp that matches at what s between paragraphs is sufficient. How about this style with
      Message 2 of 18 , Apr 20 6:41 AM
      View Source
      • 0 Attachment
        Christian Brabandt wrote:

        > On Fr, 12 Apr 2013, zappathustra@... wrote:
        >
        > > Indeed. Actually, the bar should be preceded by three backslashes, if
        > > I'm not mistaken (two denote a single one, and the last escapes the
        > > bar).
        > >
        > > In the meanwhile I've found that if you're on a paragraph line, you
        > > can't jump to paragraph lines just below if you're one the first
        > > character. E.g.:
        > >
        > > set paragraphs=foo
        > >
        > > with file:
        > >
        > > foo
        > > foo
        > >
        > > foo
        > >
        > > If you're on the first "f", you'll jump to the last line; if you're on
        > > the first "o", you'll jump to the second line... With file:
        > >
        > > foo
        > > foo
        > > foo
        > >
        > > you won't jump anywhere from the first "f". Normally, "}" with the
        > > usual 'paragraphs':
        > >
        > > - jumps to the next blank line when on a non-blank line;
        > > - jumps to the next blank line following a non-blank line when on a
        > > blank line;
        > > - jumps to the end of the file if there is no blank line below the
        > > current one.
        > >
        > > (``Blank line'' here of course means a real blank lines or the nroff
        > > macros.)
        > >
        > > With Christian's patch, I think that behavior should be mimicked by
        > > simply replacing ``(non-)blank line'' with ``line (not) matching the
        > > option''.
        >
        > Here is an updated toy patch. I also made the 'section' and 'para'
        > settings global-local.
        >
        > Note, there is one problem and I don't know how to approach it.
        >
        > Consider this file
        > ,----
        > |
        > | foo
        > | foo
        > | foo
        > |
        > `----
        >
        > If the cursor is on the first foo and you have set para=/foo pressing }
        > will jump after the whole 'foo' block. If the cursor is on the first o
        > and you press '}' it will first move to the second 'foo' line and on
        > next press of '}' it will move over the whole block.
        >
        > I have no clue, how to detect, whether the cursor is on a block of
        > consecutive lines matching the 'para' or 'section' pattern and in that
        > case jump over the complete block. Perhaps, when using a regular
        > expression for 'para' and 'sections', we shouldn't jump over consecutive
        > matching lines at all?
        >
        > Apart from that inconsistency, the patch seems to work for me.

        Thanks.

        I wonder if changing 'paragraphs' and 'sections' into a regexp that
        matches at what's between paragraphs is sufficient. How about this
        style with two paragraphs:

        Blah blah blah blah blah blah blah blah blah blah blah blah blah
        blah blah blah blah blah blah blah blah blah blah blah blah blah
        blah blah blah blah blah blah blah
        Blah blah blah blah blah blah blah blah blah blah blah blah blah
        blah blah blah blah blah blah blah blah blah blah blah blah blah
        blah blah blah blah blah blah blah

        The examples with "foo" are a bit misleading, can't we use some
        real-world examples?

        --
        Some of the well known MS-Windows errors:
        ESLEEP Operator fell asleep
        ENOERR No error yet
        EDOLLAR OS too expensive
        EWINDOWS MS-Windows loaded, system in danger

        /// 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_use" 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

        ---
        You received this message because you are subscribed to the Google Groups "vim_use" group.
        To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
        For more options, visit https://groups.google.com/groups/opt_out.
      • Christian Brabandt
        Hi Bram! ... Did this and updated the example. Would this be acceptable? regards, Christian -- Jeder verheiratete Mann sollte seine Fehler vergessen - es
        Message 3 of 18 , Apr 23 1:57 PM
        View Source
        • 0 Attachment
          Hi Bram!

          On Sa, 20 Apr 2013, Bram Moolenaar wrote:

          > I wonder if changing 'paragraphs' and 'sections' into a regexp that
          > matches at what's between paragraphs is sufficient. How about this
          > style with two paragraphs:

          Did this and updated the example. Would this be acceptable?

          regards,
          Christian
          --
          Jeder verheiratete Mann sollte seine Fehler vergessen -
          es brauchen ja nicht zwei Personen das gleiche zu merken!

          --
          --
          You received this message from the "vim_use" 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

          ---
          You received this message because you are subscribed to the Google Groups "vim_use" group.
          To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
          For more options, visit https://groups.google.com/groups/opt_out.
        • Bram Moolenaar
          ... Hmm, I think what we really want is to match the text from the end of one paragraph until the start of the next one. The example with /^$ would still
          Message 4 of 18 , Apr 24 2:38 AM
          View Source
          • 0 Attachment
            Christian Brabandt wrote:

            > On Sa, 20 Apr 2013, Bram Moolenaar wrote:
            >
            > > I wonder if changing 'paragraphs' and 'sections' into a regexp that
            > > matches at what's between paragraphs is sufficient. How about this
            > > style with two paragraphs:
            >
            > Did this and updated the example. Would this be acceptable?

            Hmm, I think what we really want is to match the text from the end of
            one paragraph until the start of the next one. The example with "/^$"
            would still work to have empty-line separated paragraphs. Paragraphs
            that start with an indent would be found with "/^\s\+".

            You could then also allow more than one empty line between paragraphs
            with "/^\n*$".

            I haven't tried the code, perhaps it already works like that?


            --
            I noticed my daughter's Disney-net password on a sticky note:
            "MickeyMinnieGoofyPluto". I asked her why it was so long.
            "Because they say it has to have at least four characters."

            /// 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_use" 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

            ---
            You received this message because you are subscribed to the Google Groups "vim_use" group.
            To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
            For more options, visit https://groups.google.com/groups/opt_out.
          • Christian Brabandt
            ... matches at what s between paragraphs is sufficient. How about this ... one paragraph until the start of the next one. The example with /^$ would still
            Message 5 of 18 , Apr 24 2:57 AM
            View Source
            • 0 Attachment
              On Wed, April 24, 2013 11:38, Bram Moolenaar wrote:
              > Christian Brabandt wrote:
              >> On Sa, 20 Apr 2013, Bram Moolenaar wrote:
              >> > I wonder if changing 'paragraphs' and 'sections' into a regexp that
              matches at what's between paragraphs is sufficient. How about this
              style with two paragraphs:
              >> Did this and updated the example. Would this be acceptable?
              > Hmm, I think what we really want is to match the text from the end of
              one paragraph until the start of the next one. The example with "/^$"
              would still work to have empty-line separated paragraphs. Paragraphs
              that start with an indent would be found with "/^\s\+".

              correct.

              > You could then also allow more than one empty line between paragraphs
              with "/^\n*$".

              That would be possible, but doesn't really change the cursor motion. Take
              the example from the patch:
              ----------------------------
              1 Lorem ipsum dolor sit amet,
              2 consetetur sadipscing elitr,
              3 sed diam
              4
              5
              6 Lorem ipsum dolor sit amet,
              7 consetetur sadipscing elitr,
              8 sed diam

              If the 'para' option is set to '/^$' moving using '}' will first move to
              line 4, the next paragraph motion will move to line 5. Typing '}' again
              will then move the cursor at the end of the last line.
              --------------------------

              Even is you use the /^\n\+$ as regular expression, the cursor will still
              jump to the exact same positions, as line 4 and line 5 match
              that regular expression. We could make it jump to the end of the match
              using the SEARCH_END flag and then advance the cursor one more position,
              but this would only work on forward searches, this doesn't seem to work
              for backward searches:
              https://groups.google.com/group/vim_use/msg/d82897dd34010e93?hl=de

              regards,
              Christian

              --
              --
              You received this message from the "vim_use" 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

              ---
              You received this message because you are subscribed to the Google Groups "vim_use" group.
              To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
              For more options, visit https://groups.google.com/groups/opt_out.
            • Bram Moolenaar
              ... The } motion is a bit strange in that it stops before a paragraph. I never understood why it s like that and not jumping to the first line of the
              Message 6 of 18 , Apr 24 3:56 AM
              View Source
              • 0 Attachment
                Christian Brabandt wrote:

                > On Wed, April 24, 2013 11:38, Bram Moolenaar wrote:
                > > Christian Brabandt wrote:
                > >> On Sa, 20 Apr 2013, Bram Moolenaar wrote:
                > >> > I wonder if changing 'paragraphs' and 'sections' into a regexp
                > >> > that matches at what's between paragraphs is sufficient. How
                > >> > about this style with two paragraphs:
                > >> Did this and updated the example. Would this be acceptable?
                > > Hmm, I think what we really want is to match the text from the end
                > > of one paragraph until the start of the next one. The example with
                > > "/^$" would still work to have empty-line separated paragraphs.
                > > Paragraphs that start with an indent would be found with "/^\s\+".
                >
                > correct.
                >
                > > You could then also allow more than one empty line between paragraphs
                > with "/^\n*$".
                >
                > That would be possible, but doesn't really change the cursor motion. Take
                > the example from the patch:
                > ----------------------------
                > 1 Lorem ipsum dolor sit amet,
                > 2 consetetur sadipscing elitr,
                > 3 sed diam
                > 4
                > 5
                > 6 Lorem ipsum dolor sit amet,
                > 7 consetetur sadipscing elitr,
                > 8 sed diam
                >
                > If the 'para' option is set to '/^$' moving using '}' will first move to
                > line 4, the next paragraph motion will move to line 5. Typing '}' again
                > will then move the cursor at the end of the last line.

                The } motion is a bit strange in that it stops before a paragraph. I
                never understood why it's like that and not jumping to the first line of
                the paragraph.

                Anyway, using ]] and [[ you do jump to the start or end of a section, so
                there it's easier to see what the pattern does.

                > Even is you use the /^\n\+$ as regular expression, the cursor will still
                > jump to the exact same positions, as line 4 and line 5 match
                > that regular expression. We could make it jump to the end of the match
                > using the SEARCH_END flag and then advance the cursor one more position,
                > but this would only work on forward searches, this doesn't seem to work
                > for backward searches:
                > https://groups.google.com/group/vim_use/msg/d82897dd34010e93?hl=de

                How about using the pattern /^\n\+\zs ? The \zs marks where the cursor
                ends up. This also allows moving to the first line of the paragraph.

                Question remains how to handle {, where the cursor ends up then.
                An alternative is to use flags after // to specify where the cursor is
                positioned for { and }, e.g. /^\n\+/{s}e would mean { moves to the
                start of the match and } to the end of the match.


                --
                hundred-and-one symptoms of being an internet addict:
                217. Your sex life has drastically improved...so what if it's only cyber-sex!

                /// 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_use" 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

                ---
                You received this message because you are subscribed to the Google Groups "vim_use" group.
                To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
                For more options, visit https://groups.google.com/groups/opt_out.
              Your message has been successfully submitted and would be delivered to recipients shortly.