Patch 8.1.0369
Problem:    Continuation lines cannot contain comments.
Solution:   Support using "\ .
Files:      src/ex_cmds2.c, src/testdir/test_eval_stuff.vim,
            runtime/indent/vim.vim, runtime/doc/repeat.txt


*** ../vim-8.1.0368/src/ex_cmds2.c      2018-09-10 21:04:09.868392665 +0200
--- src/ex_cmds2.c      2018-09-11 22:04:18.810842128 +0200
***************
*** 4864,4880 ****
        /* compensate for the one line read-ahead */
        --sourcing_lnum;
  
!       /* Get the next line and concatenate it when it starts with a
!        * backslash. We always need to read the next line, keep it in
!        * sp->nextline. */
        sp->nextline = get_one_sourceline(sp);
!       if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
        {
            garray_T    ga;
  
            ga_init2(&ga, (int)sizeof(char_u), 400);
            ga_concat(&ga, line);
!           ga_concat(&ga, p + 1);
            for (;;)
            {
                vim_free(sp->nextline);
--- 4864,4884 ----
        /* compensate for the one line read-ahead */
        --sourcing_lnum;
  
!       // Get the next line and concatenate it when it starts with a
!       // backslash. We always need to read the next line, keep it in
!       // sp->nextline.
!       /* Also check for a comment in between continuation lines: "\ */
        sp->nextline = get_one_sourceline(sp);
!       if (sp->nextline != NULL
!               && (*(p = skipwhite(sp->nextline)) == '\\'
!                             || (p[0] == '"' && p[1] == '\\' && p[2] == ' ')))
        {
            garray_T    ga;
  
            ga_init2(&ga, (int)sizeof(char_u), 400);
            ga_concat(&ga, line);
!           if (*p == '\\')
!               ga_concat(&ga, p + 1);
            for (;;)
            {
                vim_free(sp->nextline);
***************
*** 4882,4899 ****
                if (sp->nextline == NULL)
                    break;
                p = skipwhite(sp->nextline);
!               if (*p != '\\')
!                   break;
!               /* Adjust the growsize to the current length to speed up
!                * concatenating many lines. */
!               if (ga.ga_len > 400)
                {
!                   if (ga.ga_len > 8000)
!                       ga.ga_growsize = 8000;
!                   else
!                       ga.ga_growsize = ga.ga_len;
                }
!               ga_concat(&ga, p + 1);
            }
            ga_append(&ga, NUL);
            vim_free(line);
--- 4886,4906 ----
                if (sp->nextline == NULL)
                    break;
                p = skipwhite(sp->nextline);
!               if (*p == '\\')
                {
!                   // Adjust the growsize to the current length to speed up
!                   // concatenating many lines.
!                   if (ga.ga_len > 400)
!                   {
!                       if (ga.ga_len > 8000)
!                           ga.ga_growsize = 8000;
!                       else
!                           ga.ga_growsize = ga.ga_len;
!                   }
!                   ga_concat(&ga, p + 1);
                }
!               else if (p[0] != '"' || p[1] != '\\' || p[2] != ' ')
!                   break;
            }
            ga_append(&ga, NUL);
            vim_free(line);
*** ../vim-8.1.0368/src/testdir/test_eval_stuff.vim     2018-04-14 
13:36:34.000000000 +0200
--- src/testdir/test_eval_stuff.vim     2018-09-11 22:16:11.397628697 +0200
***************
*** 42,44 ****
--- 42,55 ----
    call delete('Xfile')
    call delete('Xmkdir', 'rf')
  endfunc
+ 
+ func Test_line_continuation()
+   let array = [5,
+       "\ ignore this
+       \ 6,
+       "\ more to ignore
+       "\ more moreto ignore
+       \ ]
+       "\ and some more
+   call assert_equal([5, 6], array)
+ endfunc
*** ../vim-8.1.0368/runtime/indent/vim.vim      2016-06-27 20:39:41.000000000 
+0200
--- runtime/indent/vim.vim      2018-09-11 22:19:48.151294837 +0200
***************
*** 10,16 ****
  let b:did_indent = 1
  
  setlocal indentexpr=GetVimIndent()
! setlocal indentkeys+==end,=else,=cat,=fina,=END,0\\
  
  let b:undo_indent = "setl indentkeys< indentexpr<"
  
--- 10,16 ----
  let b:did_indent = 1
  
  setlocal indentexpr=GetVimIndent()
! setlocal indentkeys+==end,=else,=cat,=fina,=END,0\\,0=\"\\\ 
  
  let b:undo_indent = "setl indentkeys< indentexpr<"
  
***************
*** 31,45 ****
    endtry
  endfunc
  
  function GetVimIndentIntern()
    " Find a non-blank line above the current line.
    let lnum = prevnonblank(v:lnum - 1)
  
!   " If the current line doesn't start with '\' and below a line that starts
!   " with '\', use the indent of the line above it.
    let cur_text = getline(v:lnum)
!   if cur_text !~ '^\s*\\'
!     while lnum > 0 && getline(lnum) =~ '^\s*\\'
        let lnum = lnum - 1
      endwhile
    endif
--- 31,47 ----
    endtry
  endfunc
  
+ let s:lineContPat = '^\s*\(\\\|"\\ \)'
+ 
  function GetVimIndentIntern()
    " Find a non-blank line above the current line.
    let lnum = prevnonblank(v:lnum - 1)
  
!   " If the current line doesn't start with '\' or '"\ ' and below a line that
!   " starts with '\' or '"\ ', use the indent of the line above it.
    let cur_text = getline(v:lnum)
!   if cur_text !~ s:lineContPat
!     while lnum > 0 && getline(lnum) =~ s:lineContPat
        let lnum = lnum - 1
      endwhile
    endif
***************
*** 51,60 ****
    let prev_text = getline(lnum)
  
    " Add a 'shiftwidth' after :if, :while, :try, :catch, :finally, :function
!   " and :else.  Add it three times for a line that starts with '\' after
!   " a line that doesn't (or g:vim_indent_cont if it exists).
    let ind = indent(lnum)
!   if cur_text =~ '^\s*\\' && v:lnum > 1 && prev_text !~ '^\s*\\'
      if exists("g:vim_indent_cont")
        let ind = ind + g:vim_indent_cont
      else
--- 53,62 ----
    let prev_text = getline(lnum)
  
    " Add a 'shiftwidth' after :if, :while, :try, :catch, :finally, :function
!   " and :else.  Add it three times for a line that starts with '\' or '"\ '
!   " after a line that doesn't (or g:vim_indent_cont if it exists).
    let ind = indent(lnum)
!   if cur_text =~ s:lineContPat && v:lnum > 1 && prev_text !~ s:lineContPat
      if exists("g:vim_indent_cont")
        let ind = ind + g:vim_indent_cont
      else
*** ../vim-8.1.0368/runtime/doc/repeat.txt      2018-05-17 13:42:02.000000000 
+0200
--- runtime/doc/repeat.txt      2018-09-11 22:34:47.266339513 +0200
***************
*** 265,271 ****
                        loaded during initialization, see |load-plugins|.
  
                        Also see |pack-add|.
!                       {only available when compiled with +eval}
  
                                                *:packl* *:packloadall*
  :packl[oadall][!]     Load all packages in the "start" directory under each
--- 265,271 ----
                        loaded during initialization, see |load-plugins|.
  
                        Also see |pack-add|.
!                       {only available when compiled with |+eval|}
  
                                                *:packl* *:packloadall*
  :packl[oadall][!]     Load all packages in the "start" directory under each
***************
*** 289,295 ****
                        An error only causes sourcing the script where it
                        happens to be aborted, further plugins will be loaded.
                        See |packages|.
!                       {only available when compiled with +eval}
  
  :scripte[ncoding] [encoding]          *:scripte* *:scriptencoding* *E167*
                        Specify the character encoding used in the script.
--- 289,295 ----
                        An error only causes sourcing the script where it
                        happens to be aborted, further plugins will be loaded.
                        See |packages|.
!                       {only available when compiled with |+eval|}
  
  :scripte[ncoding] [encoding]          *:scripte* *:scriptencoding* *E167*
                        Specify the character encoding used in the script.
***************
*** 465,470 ****
--- 465,480 ----
     .
     :endfunction
     :set cpo-=C
+ <
+                                       *line-continuation-comment*
+ To add a comment in between the lines start with '\" '.  Notice the space
+ after the double quote.  Example: >
+       let array = [
+               "\ first entry comment
+               \ 'first',
+               "\ second entry comment
+               \ 'second',
+               \ ]
  
  Rationale:
        Most programs work with a trailing backslash to indicate line
***************
*** 473,478 ****
--- 483,496 ----
                :map xx  asdf\
  <     Therefore the unusual leading backslash is used.
  
+       Starting a comment in a continuation line results in all following
+       continuation lines to be part of the comment.  Since it was like this
+       for a long time, when making it possible to add a comment halfway a
+       sequence of continuation lines, it was not possible to use \", since
+       that was a valid continuation line.  Using '"\ ' comes closest, even
+       though it may look a bit weird.  Requiring the space after the
+       backslash is to make it very unlikely this is a normal comment line.
+ 
  ==============================================================================
  5. Using Vim packages                                 *packages*
  
***************
*** 1010,1013 ****
  - The "self" time is wrong when a function is used recursively.
  
  
!  vim:tw=78:ts=8:ft=help:norl:
--- 1028,1031 ----
  - The "self" time is wrong when a function is used recursively.
  
  
!  vim:tw=78:ts=8:noet:ft=help:norl:
*** ../vim-8.1.0368/src/version.c       2018-09-11 21:30:05.253070476 +0200
--- src/version.c       2018-09-11 22:03:43.867404925 +0200
***************
*** 796,797 ****
--- 796,799 ----
  {   /* Add new patch number below this line */
+ /**/
+     369,
  /**/

-- 
He who laughs last, thinks slowest.

 /// Bram Moolenaar -- b...@moolenaar.net -- 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

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui