diff runtime/doc/usr_41.txt @ 29104:c58baa6d6dda

Update runtime files Commit: https://github.com/vim/vim/commit/63f32603789d1a27c559fc440325955fd0b8b500 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jun 9 20:45:54 2022 +0100 Update runtime files
author Bram Moolenaar <Bram@vim.org>
date Thu, 09 Jun 2022 22:00:06 +0200
parents f3ec3c57e070
children 2a1f9b4a5ac9
line wrap: on
line diff
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -17,8 +17,10 @@ script.  There are a lot of them, theref
 |41.6|	Using functions
 |41.7|	Defining a function
 |41.8|	Lists and Dictionaries
-|41.9|	Exceptions
-|41.10|	Various remarks
+|41.9|	White space
+|41.10|	Line continuation
+|41.11|	Comments
+|41.12|	Fileformat
 
      Next chapter: |usr_42.txt|  Add new menus
  Previous chapter: |usr_40.txt|  Make new commands
@@ -112,7 +114,7 @@ the links if you are impatient.
 TRYING OUT EXAMPLES
 
 You can easily try out most examples in these help files without saving the
-commands in a file.  For example, to try out the "for" loop above do this:
+commands to a file.  For example, to try out the "for" loop above do this:
 1. position the cursor on the "for"
 2. start Visual mode with "v"
 3. move down to the "endfor"
@@ -195,7 +197,7 @@ cannot start with a digit.  Valid variab
 	CamelCaseName
 	LENGTH
 
-Invalid names are "foo+bar" and "6var".
+Invalid names are "foo.bar" and "6var".
 
 Some variables are global.  To see a list of currently defined global
 variables type this command: >
@@ -684,8 +686,8 @@ search() function uses its first argumen
 one as flags.  The "W" flag means the search doesn't wrap around the end of
 the file.
 
-Using the  `call` command is optional in |Vim9| script.  This works the same
-way and also works in legacy script and on the command line: >
+Using the  `call` command is optional in |Vim9| script.  It is required in
+legacy script and on the command line: >
 
 	call search("Date: ", "W")
 
@@ -711,7 +713,7 @@ statements is equal to: >
 
 	:substitute/\a/*/g
 
-Using the functions becomes more interesting when you do more work before and
+Using the functions becomes interesting when you do more work before and
 after the substitute() call.
 
 
@@ -1402,8 +1404,9 @@ Let's assign the variable "smaller" the 
 	  smaller = num2
 	endif
 
-The variable "smaller" is a local variable.  Variables used inside a function
-are local unless prefixed by something like "g:", "w:", or "s:".
+The variable "smaller" is a local variable.  It is declared to be a number,
+that way Vim can warn you for any mistakes.  Variables used inside a function
+are local unless prefixed by something like "g:", "w:", or "b:".
 
 	Note:
 	To access a global variable from inside a function you must prepend
@@ -1469,6 +1472,10 @@ For a function that does not return anyt
 	  echo text
 	enddef
 
+If you want to return any kind of value, you can use the "any" return type: >
+	def GetValue(): any
+This disables type checking for the return value, use only when needed.
+
 It is also possible to define a legacy function with `function` and
 `endfunction`.  These do not have types and are not compiled.  Therefore they
 execute much slower.
@@ -1485,47 +1492,12 @@ once for every line in the range, with t
 
 If you call this function with: >
 
-	:10,15call Number()
+	:10,15Number()
 
 The function will be called six times, starting on line 10 and ending on line
 15.
 
 
-VARIABLE NUMBER OF ARGUMENTS
-
-Vim enables you to define functions that have a variable number of arguments.
-The following command, for instance, defines a function that must have 1
-argument (start) and can have up to 20 additional arguments: >
-
-	def Show(start: string, ...items: list<string>)
-
-The variable "items" will be a list in the function containing the extra
-arguments.  You can use it like any list, for example: >
-
-	def Show(start: string, ...items: list<string>)
-	  echohl Title
-	  echo "start is " .. start
-	  echohl None
-	  for index in range(len(items))
-	    echon $"  Arg {index} is {items[index]}"
-	  endfor
-	  echo
-	enddef
-
-You can call it like this: >
-
-	Show('Title', 'one', 'two', 'three')
-<	start is Title  Arg 0 is one  Arg 1 is two  Arg 2 is three ~
-	
-This uses the `echohl` command to specify the highlighting used for the
-following `echo` command.  `echohl None` stops it again.  The `echon` command
-works like `echo`, but doesn't output a line break.
-
-If you call it with one argument the "items" list will be empty.
-`range(len(items))` returns a list with the indexes, what `for` loops over,
-we'll explain that further down.
-
-
 LISTING FUNCTIONS
 
 The `function` command lists the names and arguments of all user-defined
@@ -1606,6 +1578,11 @@ Note that the name of a variable that ho
 with a capital.  Otherwise it could be confused with the name of a builtin
 function.
 
+
+FURTHER READING
+
+Using a variable number of arguments is introduced in section |50.2|.
+
 More information about defining your own functions here: |user-functions|.
 
 ==============================================================================
@@ -1766,95 +1743,16 @@ need to use a List, it stores items in a
 For further reading see |Dictionaries|.
 
 ==============================================================================
-*41.9*	Exceptions
-
-Let's start with an example: >
-
-	try
-	   read ~/templates/pascal.tmpl
-	catch /E484:/
-	   echo "Sorry, the Pascal template file cannot be found."
-	endtry
-
-The `read` command will fail if the file does not exist.  Instead of
-generating an error message, this code catches the error and gives the user a
-message with more information.
-
-For the commands in between `try` and `endtry` errors are turned into
-exceptions.  An exception is a string.  In the case of an error the string
-contains the error message.  And every error message has a number.  In this
-case, the error we catch contains "E484:".  This number is guaranteed to stay
-the same (the text may change, e.g., it may be translated).
-
-Besides being able to give a nice error message, Vim will also continue
-executing commands after the `:endtry`.  Otherwise, once an uncaught error is
-encountered, execution of the script/function/mapping will be aborted.
-
-When the `read` command causes another error, the pattern "E484:" will not
-match in it.  Thus this exception will not be caught and result in the usual
-error message and execution is aborted.
-
-You might be tempted to do this: >
-
-	try
-	   read ~/templates/pascal.tmpl
-	catch
-	   echo "Sorry, the Pascal template file cannot be found."
-	endtry
-
-This means all errors are caught.  But then you will not see an error that
-would indicate a completely different problem, such as "E21: Cannot make
-changes, 'modifiable' is off".  Think twice before you catch any error!
-
-Another useful mechanism is the `finally` command: >
-
-	var tmp = tempname()
-	try
-	   exe ":.,$write " .. tmp
-	   exe "!filter " .. tmp
-	   :.,$delete
-	   exe ":$read " .. tmp
-	finally
-	   delete(tmp)
-	endtry
-
-This filters the lines from the cursor until the end of the file through the
-"filter" command, which takes a file name argument.  No matter if the
-filtering works, if something goes wrong in between `try` and `finally` or the
-user cancels the filtering by pressing CTRL-C, the `delete(tmp)` call is
-always executed.  This makes sure you don't leave the temporary file behind.
-
-The `finally` does not catch the exception, the error will still abort
-further execution.
-
-More information about exception handling can be found in the reference
-manual: |exception-handling|.
-
-==============================================================================
-*41.10*	Various remarks
-
-Here are a few items that are useful to know when writing Vim scripts.
-
-
-FILEFORMAT
-
-The end-of-line character depends on the system.  For Vim scripts it is
-recommended to always use the Unix fileformat.  This also works on any other
-system.  That way you can copy your Vim scripts from MS-Windows to Unix and
-they still work.  See |:source_crnl|.  To be sure it is set right, do this
-before writing the file: >
-
-	:setlocal fileformat=unix
-
-
-WHITE SPACE
+*41.9*	White space
 
 Blank lines are allowed and ignored.
 
 Leading whitespace characters (blanks and TABs) are always ignored.
 
 Trailing whitespace is often ignored, but not always.  One command that
-includes it is `map`.
+includes it is `map`.  You have to watch out for that, it can cause hard to
+understand mistakes.  A generic solution is to never use trailing white space,
+unless you really need it.
 
 To include a whitespace character in the value of an option, it must be
 escaped by a "\" (backslash)  as in the following example: >
@@ -1876,8 +1774,39 @@ intentionally to make sure scripts are e
 If you use white space sensibly it will just work.  When not you will get an
 error message telling you where white space is missing or should be removed.
 
+==============================================================================
+*41.10*	Line continuation
 
-COMMENTS
+In legacy Vim script line continuation is done by preceding a continuation
+line with a backslash: >
+	let mylist = [
+			\ 'one',
+			\ 'two',
+			\ ]
+
+This requires the 'cpo' option to exclude the "C" flag.  Normally this is done
+by putting this at the start of the script: >
+	let s:save_cpo = &cpo
+	set cpo&vim
+
+And restore the option at the end of the script: >
+	let &cpo = s:save_cpo
+	unlet s:save_cpo
+
+A few more details can be found here: |line-continuation|.
+
+In |Vim9| script the backslash can still be used, but in most places it is not
+needed: >
+	var mylist = [
+			'one',
+			'two',
+			]
+
+Also, the 'cpo' option does not need to be changed.  See
+|vim9-line-continuation| for details.
+
+==============================================================================
+*41.11*	Comments
 
 In |Vim9| script the character # starts a comment.  That character and
 everything after it until the end-of-line is considered a comment and
@@ -1933,11 +1862,21 @@ script executable, and it also works in 
 	echo "this is a Vim script"
 	quit
 
+==============================================================================
+*41.12*	Fileformat
+
+The end-of-line character depends on the system.  For Vim scripts it is
+recommended to always use the Unix fileformat.  This also works on any other
+system.  That way you can copy your Vim scripts from MS-Windows to Unix and
+they still work.  See |:source_crnl|.  To be sure it is set right, do this
+before writing the file: >
+
+	:setlocal fileformat=unix
+
+==============================================================================
 
 Advance information about writing Vim script is in |usr_50.txt|.
 
-==============================================================================
-
 Next chapter: |usr_42.txt|  Add new menus
 
 Copyright: see |manual-copyright|  vim:tw=78:ts=8:noet:ft=help:norl: