Mercurial > vim
changeset 2590:b57f2617965f v7.3.014
updated for version 7.3.014
Problem: Ending a line in a backslash inside an ":append" or ":insert"
command in Ex mode doesn't work properly. (Ray Frush)
Solution: Halve the number of backslashes, only insert a NUL after an odd
number of backslashes.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 29 Sep 2010 15:50:30 +0200 |
parents | d5681bd2661b |
children | 88095f75d63b |
files | src/ex_getln.c src/version.c |
diffstat | 2 files changed, 26 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -2342,15 +2342,31 @@ redraw: 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] != '\\')) + /* 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') { - --line_ga.ga_len; - --pend; - *pend = NUL; - break; + 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; + } } }