summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-06-23 20:52:40 +0200
committerBram Moolenaar <Bram@vim.org>2017-06-23 20:52:40 +0200
commitf8be461d0284110b321be748fea206d4169b98bb (patch)
treea066ff1a758151312ec2d7af5bcff2edc869be3a
parent4670490673ed98502a09b74fbabe785b47e3d289 (diff)
patch 8.0.0663: unexpected error message only when 'verbose' is setv8.0.0663
Problem: Giving an error message only when 'verbose' set is unexpected. Solution: Give a warning message instead.
-rw-r--r--runtime/doc/eval.txt39
-rw-r--r--src/message.c7
-rw-r--r--src/proto/message.pro1
-rw-r--r--src/testdir/test_vimscript.vim4
-rw-r--r--src/userfunc.c4
-rw-r--r--src/version.c2
6 files changed, 39 insertions, 18 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 04cad9dcd2..51e806b21d 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 8.0. Last change: 2017 Jun 22
+*eval.txt* For Vim version 8.0. Last change: 2017 Jun 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -5468,9 +5468,9 @@ line({expr}) The result is a Number, which is the line number of the file
This autocommand jumps to the last known position in a file
just after opening it, if the '" mark is set: >
:au BufReadPost *
- \ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
- \ | exe "normal! g`\""
- \ | endif
+ \ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
+ \ | exe "normal! g`\""
+ \ | endif
line2byte({lnum}) *line2byte()*
Return the byte count from the start of the buffer for line
@@ -5892,7 +5892,7 @@ max({expr}) Return the maximum value of all items in {expr}.
it returns the maximum of all values in the dictionary.
If {expr} is neither a list nor a dictionary, or one of the
items in {expr} cannot be used as a Number this results in
- an error. An empty |List| or |Dictionary| results in zero.
+ an error. An empty |List| or |Dictionary| results in zero.
*min()*
min({expr}) Return the minimum value of all items in {expr}.
@@ -5900,7 +5900,7 @@ min({expr}) Return the minimum value of all items in {expr}.
it returns the minimum of all values in the dictionary.
If {expr} is neither a list nor a dictionary, or one of the
items in {expr} cannot be used as a Number this results in
- an error. An empty |List| or |Dictionary| results in zero.
+ an error. An empty |List| or |Dictionary| results in zero.
*mkdir()* *E739*
mkdir({name} [, {path} [, {prot}]])
@@ -6195,8 +6195,8 @@ printf({fmt}, {expr1} ...) *printf()*
zero the decimal point is omitted. When the precision
is not specified 6 is used. A really big number
(out of range or dividing by zero) results in "inf"
- or "-inf" with %f (INF or -INF with %F).
- "0.0 / 0.0" results in "nan" with %f (NAN with %F).
+ or "-inf" with %f (INF or -INF with %F).
+ "0.0 / 0.0" results in "nan" with %f (NAN with %F).
Example: >
echo printf("%.2f", 12.115)
< 12.12
@@ -8355,8 +8355,8 @@ winwidth({nr}) *winwidth()*
:if winwidth(0) <= 50
: exe "normal 50\<C-W>|"
:endif
-< For getting the terminal or screen size, see the 'columns'
- option.
+< For getting the terminal or screen size, see the 'columns'
+ option.
wordcount() *wordcount()*
@@ -8374,11 +8374,11 @@ wordcount() *wordcount()*
cursor_words Number of words before cursor position
(not in Visual mode)
visual_bytes Number of bytes visually selected
- (only in Visual mode)
+ (only in Visual mode)
visual_chars Number of chars visually selected
- (only in Visual mode)
+ (only in Visual mode)
visual_words Number of chars visually selected
- (only in Visual mode)
+ (only in Visual mode)
*writefile()*
@@ -8722,6 +8722,9 @@ See |:verbose-cmd| for more information.
not used an error message is given. When [!] is used,
an existing function is silently replaced. Unless it
is currently being executed, that is an error.
+ NOTE: Use ! wisely. If used without care it can cause
+ an existing function to be replaced unexpectedly,
+ which is hard to debug.
For the {arguments} see |function-argument|.
@@ -8771,7 +8774,7 @@ See |:verbose-cmd| for more information.
implies that the effect of |:nohlsearch| is undone
when the function returns.
- *:endf* *:endfunction* *E126* *E193* *E946*
+ *:endf* *:endfunction* *E126* *E193* *W22*
:endf[unction] [argument]
The end of a function definition. Best is to put it
on a line by its own, without [argument].
@@ -8780,12 +8783,16 @@ See |:verbose-cmd| for more information.
| command command to execute next
\n command command to execute next
" comment always ignored
- anything else ignored, unless 'verbose' is
- non-zero
+ anything else ignored, warning given when
+ 'verbose' is non-zero
The support for a following command was added in Vim
8.0.0654, before that any argument was silently
ignored.
+ To be able to define a function inside an `:execute`
+ command, use line breaks instead of |:bar|: >
+ :exe "func Foo()\necho 'foo'\nendfunc"
+<
*:delf* *:delfunction* *E130* *E131* *E933*
:delf[unction][!] {name}
Delete function {name}.
diff --git a/src/message.c b/src/message.c
index a9a66698d2..aeceee1b43 100644
--- a/src/message.c
+++ b/src/message.c
@@ -3471,6 +3471,13 @@ give_warning(char_u *message, int hl)
--no_wait_return;
}
+ void
+give_warning2(char_u *message, char_u *a1, int hl)
+{
+ vim_snprintf((char *)IObuff, IOSIZE, (char *)message, a1);
+ give_warning(IObuff, hl);
+}
+
/*
* Advance msg cursor to column "col".
*/
diff --git a/src/proto/message.pro b/src/proto/message.pro
index 8d9ac71cce..f8b6f684c3 100644
--- a/src/proto/message.pro
+++ b/src/proto/message.pro
@@ -75,6 +75,7 @@ void verbose_leave_scroll(void);
void verbose_stop(void);
int verbose_open(void);
void give_warning(char_u *message, int hl);
+void give_warning2(char_u *message, char_u *a1, int hl);
void msg_advance(int col);
int do_dialog(int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd);
void display_confirm_msg(void);
diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim
index c0736f2baa..13b32cdd4b 100644
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -1381,10 +1381,12 @@ func Test_endfunction_trailing()
set verbose=1
exe "func Xtest()\necho 'hello'\nendfunc \" garbage"
+ call assert_notmatch('W22:', split(execute('1messages'), "\n")[0])
call assert_true(exists('*Xtest'))
delfunc Xtest
- call assert_fails("func Xtest()\necho 'hello'\nendfunc garbage", 'E946')
+ exe "func Xtest()\necho 'hello'\nendfunc garbage"
+ call assert_match('W22:', split(execute('1messages'), "\n")[0])
call assert_true(exists('*Xtest'))
delfunc Xtest
set verbose=0
diff --git a/src/userfunc.c b/src/userfunc.c
index 34da2ef4b6..dfd7fcc24a 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2137,7 +2137,9 @@ ex_function(exarg_T *eap)
/* Another command follows. */
eap->nextcmd = line_arg;
else if (*p != NUL && *p != '"' && p_verbose > 0)
- EMSG2((char_u *)_("E946: Text found after :endfunction: %s"), p);
+ give_warning2(
+ (char_u *)_("W22: Text found after :endfunction: %s"),
+ p, TRUE);
if (line_arg == NULL)
vim_free(theline);
break;
diff --git a/src/version.c b/src/version.c
index ab7a92992a..102e3880d2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 663,
+/**/
662,
/**/
661,