I managed to miss this posting until now, so I'm only 45 or so days
late.   I appreciate that you kept this request in the queue and
worked on it after the release of 7.3!

I've tried this with VIM (EX) 7.3.62, and it still produces a
different result than the 6.3 version we're running on RHEL4.


To recreate the problem, perform the following:
cat - > ex.input << EOF
a
X \\
Y
.
w ex.output
EOF
cat -tvse ex.input
ex - -u NONE < ex.input
cat -tvse ex.output

When working correctly (rhel4), the output from cat of ex.output is:
$
X \$
Y$

On rhel5, the output from cat of ex.output is:
X \...@y$




On Sep 29, 6:50 am, Bram Moolenaar <[email protected]> wrote:
> Patch 7.3.014
> Problem:    Ending a line in a backslash inside an ":append" or ":insert"
>             command in Ex mode doesn't work properly. (RayFrush)
> Solution:   Halve the number of backslashes, only insert a NUL after an odd
>             number of backslashes.
> Files:      src/ex_getln.c
>
> *** ../vim-7.3.013/src/ex_getln.c       2010-09-21 16:56:29.000000000 +0200
> --- src/ex_getln.c      2010-09-29 15:47:56.000000000 +0200
> ***************
> *** 2342,2356 ****
>         windgoto(msg_row, msg_col);
>         pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
>
> !       /* we are done when a NL is entered, but not when it comes after a
> !        * backslash */
> !       if (line_ga.ga_len > 0 && pend[-1] == '\n'
> !               && (line_ga.ga_len <= 1 || pend[-2] != '\\'))
> !       {
> !           --line_ga.ga_len;
> !           --pend;
> !           *pend = NUL;
> !           break;
>         }
>       }
>
> --- 2342,2372 ----
>         windgoto(msg_row, msg_col);
>         pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
>
> !       /* We are done when a NL is entered, but not when it comes after an
> !        * odd number of backslashes, that results in a NUL. */
> !       if (line_ga.ga_len > 0 && pend[-1] == '\n')
> !       {
> !           int bcount = 0;
> !
> !           while (line_ga.ga_len - 2 >= bcount && pend[-2 - bcount] == '\\')
> !               ++bcount;
> !
> !           if (bcount > 0)
> !           {
> !               /* Halve the number of backslashes: "\NL" -> "NUL", "\\NL" ->
> !                * "\NL", etc. */
> !               line_ga.ga_len -= (bcount + 1) / 2;
> !               pend -= (bcount + 1) / 2;
> !               pend[-1] = '\n';
> !           }
> !
> !           if ((bcount & 1) == 0)
> !           {
> !               --line_ga.ga_len;
> !               --pend;
> !               *pend = NUL;
> !               break;
> !           }
>         }
>       }
>
> *** ../vim-7.3.013/src/version.c        2010-09-29 13:02:48.000000000 +0200
> --- src/version.c       2010-09-29 15:45:57.000000000 +0200
> ***************
> *** 716,717 ****
> --- 716,719 ----
>   {   /* Add new patch number below this line */
> + /**/
> +     14,
>   /**/
>
> --
> hundred-and-one symptoms of being an internet addict:
> 224. You set up your own Web page. You set up a Web page for each
>      of your kids... and your pets.
>
>  /// Bram Moolenaar -- [email protected] --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.
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