summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-07-21 16:42:00 +0200
committerBram Moolenaar <Bram@vim.org>2019-07-21 16:42:00 +0200
commited997adaa1e9bd057ce732a73d933b739e9d0c30 (patch)
treeb4db35e6f94ff6470627fdf5f55b4ccd357e36f4
parent663bbc09babea1ff8dfa7ccd58801ac9219fc2b2 (diff)
downloadvim-git-ed997adaa1e9bd057ce732a73d933b739e9d0c30.tar.gz
patch 8.1.1726: the eval.txt help file is too bigv8.1.1726
Problem: The eval.txt help file is too big. Solution: Split off testing support to testing.txt. Move function details to where the functionality is explained.
-rw-r--r--runtime/doc/Makefile2
-rw-r--r--runtime/doc/channel.txt385
-rw-r--r--runtime/doc/eval.txt1178
-rw-r--r--runtime/doc/help.txt3
-rw-r--r--runtime/doc/sign.txt356
-rw-r--r--runtime/doc/tags183
-rw-r--r--runtime/doc/testing.txt317
-rw-r--r--runtime/doc/textprop.txt198
-rw-r--r--src/version.c2
9 files changed, 1357 insertions, 1267 deletions
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index 3db1190a0..4a1ea03fd 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -103,6 +103,7 @@ DOCS = \
tagsrch.txt \
term.txt \
terminal.txt \
+ testing.txt \
textprop.txt \
tips.txt \
todo.txt \
@@ -241,6 +242,7 @@ HTMLS = \
tagsrch.html \
term.html \
terminal.html \
+ testing.html \
textprop.html \
tips.html \
todo.html \
diff --git a/runtime/doc/channel.txt b/runtime/doc/channel.txt
index 632628a87..a8e585772 100644
--- a/runtime/doc/channel.txt
+++ b/runtime/doc/channel.txt
@@ -1,4 +1,4 @@
-*channel.txt* For Vim version 8.1. Last change: 2019 May 12
+*channel.txt* For Vim version 8.1. Last change: 2019 Jul 21
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -18,11 +18,13 @@ The Netbeans interface also uses a channel. |netbeans|
5. Channel commands |channel-commands|
6. Using a RAW or NL channel |channel-raw|
7. More channel functions |channel-more|
-8. Starting a job with a channel |job-start|
-9. Starting a job without a channel |job-start-nochannel|
-10. Job options |job-options|
-11. Controlling a job |job-control|
-12. Using a prompt buffer |prompt-buffer|
+8. channel functions details |channel-functions-details|
+9. Starting a job with a channel |job-start|
+10. Starting a job without a channel |job-start-nochannel|
+11. Job functions |job-functions-details|
+12. Job options |job-options|
+13. Controlling a job |job-control|
+14. Using a prompt buffer |prompt-buffer|
{only when compiled with the |+channel| feature for channel stuff}
You can check this with: `has('channel')`
@@ -460,7 +462,211 @@ For a JS or JSON channel this returns one decoded message.
This includes any sequence number.
==============================================================================
-8. Starting a job with a channel *job-start* *job*
+8. channel functions details *channel-functions-details*
+
+ch_canread({handle}) *ch_canread()*
+ Return non-zero when there is something to read from {handle}.
+ {handle} can be a Channel or a Job that has a Channel.
+
+ This is useful to read from a channel at a convenient time,
+ e.g. from a timer.
+
+ Note that messages are dropped when the channel does not have
+ a callback. Add a close callback to avoid that.
+
+
+ch_close({handle}) *ch_close()*
+ Close {handle}. See |channel-close|.
+ {handle} can be a Channel or a Job that has a Channel.
+ A close callback is not invoked.
+
+
+ch_close_in({handle}) *ch_close_in()*
+ Close the "in" part of {handle}. See |channel-close-in|.
+ {handle} can be a Channel or a Job that has a Channel.
+ A close callback is not invoked.
+
+
+ch_evalexpr({handle}, {expr} [, {options}]) *ch_evalexpr()*
+ Send {expr} over {handle}. The {expr} is encoded
+ according to the type of channel. The function cannot be used
+ with a raw channel. See |channel-use|.
+ {handle} can be a Channel or a Job that has a Channel.
+ *E917*
+ {options} must be a Dictionary. It must not have a "callback"
+ entry. It can have a "timeout" entry to specify the timeout
+ for this specific request.
+
+ ch_evalexpr() waits for a response and returns the decoded
+ expression. When there is an error or timeout it returns an
+ empty string.
+
+
+ch_evalraw({handle}, {string} [, {options}]) *ch_evalraw()*
+ Send {string} over {handle}.
+ {handle} can be a Channel or a Job that has a Channel.
+
+ Works like |ch_evalexpr()|, but does not encode the request or
+ decode the response. The caller is responsible for the
+ correct contents. Also does not add a newline for a channel
+ in NL mode, the caller must do that. The NL in the response
+ is removed.
+ Note that Vim does not know when the text received on a raw
+ channel is complete, it may only return the first part and you
+ need to use |ch_readraw()| to fetch the rest.
+ See |channel-use|.
+
+
+ch_getbufnr({handle}, {what}) *ch_getbufnr()*
+ Get the buffer number that {handle} is using for {what}.
+ {handle} can be a Channel or a Job that has a Channel.
+ {what} can be "err" for stderr, "out" for stdout or empty for
+ socket output.
+ Returns -1 when there is no buffer.
+
+
+ch_getjob({channel}) *ch_getjob()*
+ Get the Job associated with {channel}.
+ If there is no job calling |job_status()| on the returned Job
+ will result in "fail".
+
+
+ch_info({handle}) *ch_info()*
+ Returns a Dictionary with information about {handle}. The
+ items are:
+ "id" number of the channel
+ "status" "open", "buffered" or "closed", like
+ ch_status()
+ When opened with ch_open():
+ "hostname" the hostname of the address
+ "port" the port of the address
+ "sock_status" "open" or "closed"
+ "sock_mode" "NL", "RAW", "JSON" or "JS"
+ "sock_io" "socket"
+ "sock_timeout" timeout in msec
+ When opened with job_start():
+ "out_status" "open", "buffered" or "closed"
+ "out_mode" "NL", "RAW", "JSON" or "JS"
+ "out_io" "null", "pipe", "file" or "buffer"
+ "out_timeout" timeout in msec
+ "err_status" "open", "buffered" or "closed"
+ "err_mode" "NL", "RAW", "JSON" or "JS"
+ "err_io" "out", "null", "pipe", "file" or "buffer"
+ "err_timeout" timeout in msec
+ "in_status" "open" or "closed"
+ "in_mode" "NL", "RAW", "JSON" or "JS"
+ "in_io" "null", "pipe", "file" or "buffer"
+ "in_timeout" timeout in msec
+
+
+ch_log({msg} [, {handle}]) *ch_log()*
+ Write {msg} in the channel log file, if it was opened with
+ |ch_logfile()|.
+ When {handle} is passed the channel number is used for the
+ message.
+ {handle} can be a Channel or a Job that has a Channel. The
+ Channel must be open for the channel number to be used.
+
+
+ch_logfile({fname} [, {mode}]) *ch_logfile()*
+ Start logging channel activity to {fname}.
+ When {fname} is an empty string: stop logging.
+
+ When {mode} is omitted or "a" append to the file.
+ When {mode} is "w" start with an empty file.
+
+ Use |ch_log()| to write log messages. The file is flushed
+ after every message, on Unix you can use "tail -f" to see what
+ is going on in real time.
+
+ This function is not available in the |sandbox|.
+ NOTE: the channel communication is stored in the file, be
+ aware that this may contain confidential and privacy sensitive
+ information, e.g. a password you type in a terminal window.
+
+
+ch_open({address} [, {options}]) *ch_open()*
+ Open a channel to {address}. See |channel|.
+ Returns a Channel. Use |ch_status()| to check for failure.
+
+ {address} has the form "hostname:port", e.g.,
+ "localhost:8765".
+
+ If {options} is given it must be a |Dictionary|.
+ See |channel-open-options|.
+
+
+ch_read({handle} [, {options}]) *ch_read()*
+ Read from {handle} and return the received message.
+ {handle} can be a Channel or a Job that has a Channel.
+ For a NL channel this waits for a NL to arrive, except when
+ there is nothing more to read (channel was closed).
+ See |channel-more|.
+
+
+ch_readblob({handle} [, {options}]) *ch_readblob()*
+ Like ch_read() but reads binary data and returns a |Blob|.
+ See |channel-more|.
+
+
+ch_readraw({handle} [, {options}]) *ch_readraw()*
+ Like ch_read() but for a JS and JSON channel does not decode
+ the message. For a NL channel it does not block waiting for
+ the NL to arrive, but otherwise works like ch_read().
+ See |channel-more|.
+
+
+ch_sendexpr({handle}, {expr} [, {options}]) *ch_sendexpr()*
+ Send {expr} over {handle}. The {expr} is encoded
+ according to the type of channel. The function cannot be used
+ with a raw channel.
+ See |channel-use|. *E912*
+ {handle} can be a Channel or a Job that has a Channel.
+
+
+ch_sendraw({handle}, {expr} [, {options}]) *ch_sendraw()*
+ Send |String| or |Blob| {expr} over {handle}.
+ Works like |ch_sendexpr()|, but does not encode the request or
+ decode the response. The caller is responsible for the
+ correct contents. Also does not add a newline for a channel
+ in NL mode, the caller must do that. The NL in the response
+ is removed.
+ See |channel-use|.
+
+
+ch_setoptions({handle}, {options}) *ch_setoptions()*
+ Set options on {handle}:
+ "callback" the channel callback
+ "timeout" default read timeout in msec
+ "mode" mode for the whole channel
+ See |ch_open()| for more explanation.
+ {handle} can be a Channel or a Job that has a Channel.
+
+ Note that changing the mode may cause queued messages to be
+ lost.
+
+ These options cannot be changed:
+ "waittime" only applies to |ch_open()|
+
+
+ch_status({handle} [, {options}]) *ch_status()*
+ Return the status of {handle}:
+ "fail" failed to open the channel
+ "open" channel can be used
+ "buffered" channel can be read, not written to
+ "closed" channel can not be used
+ {handle} can be a Channel or a Job that has a Channel.
+ "buffered" is used when the channel was closed but there is
+ still data that can be obtained with |ch_read()|.
+
+ If {options} is given it can contain a "part" entry to specify
+ the part of the channel to return the status for: "out" or
+ "err". For example, to get the error status: >
+ ch_status(job, {"part": "err"})
+<
+
+==============================================================================
+9. Starting a job with a channel *job-start* *job*
To start a job and open a channel for stdin/stdout/stderr: >
let job = job_start(command, {options})
@@ -552,7 +758,7 @@ add a close callback and read the output there: >
You will want to do something more useful than "echomsg".
==============================================================================
-9. Starting a job without a channel *job-start-nochannel*
+10. Starting a job without a channel *job-start-nochannel*
To start another process without creating a channel: >
let job = job_start(command,
@@ -579,7 +785,164 @@ Note that the waittime for ch_open() gives the job one second to make the port
available.
==============================================================================
-10. Job options *job-options*
+11. Job functions *job-functions-details*
+
+job_getchannel({job}) *job_getchannel()*
+ Get the channel handle that {job} is using.
+ To check if the job has no channel: >
+ if string(job_getchannel()) == 'channel fail'
+<
+
+job_info([{job}]) *job_info()*
+ Returns a Dictionary with information about {job}:
+ "status" what |job_status()| returns
+ "channel" what |job_getchannel()| returns
+ "cmd" List of command arguments used to start the job
+ "process" process ID
+ "tty_in" terminal input name, empty when none
+ "tty_out" terminal output name, empty when none
+ "exitval" only valid when "status" is "dead"
+ "exit_cb" function to be called on exit
+ "stoponexit" |job-stoponexit|
+
+ Only in Unix:
+ "termsig" the signal which terminated the process
+ (See |job_stop()| for the values)
+ only valid when "status" is "dead"
+
+ Only in MS-Windows:
+ "tty_type" Type of virtual console in use.
+ Values are "winpty" or "conpty".
+ See 'termwintype'.
+
+ Without any arguments, returns a List with all Job objects.
+
+
+job_setoptions({job}, {options}) *job_setoptions()*
+ Change options for {job}. Supported are:
+ "stoponexit" |job-stoponexit|
+ "exit_cb" |job-exit_cb|
+
+
+job_start({command} [, {options}]) *job_start()*
+ Start a job and return a Job object. Unlike |system()| and
+ |:!cmd| this does not wait for the job to finish.
+ To start a job in a terminal window see |term_start()|.
+
+ If the job fails to start then |job_status()| on the returned
+ Job object results in "fail" and none of the callbacks will be
+ invoked.
+
+ {command} can be a String. This works best on MS-Windows. On
+ Unix it is split up in white-separated parts to be passed to
+ execvp(). Arguments in double quotes can contain white space.
+
+ {command} can be a List, where the first item is the executable
+ and further items are the arguments. All items are converted
+ to String. This works best on Unix.
+
+ On MS-Windows, job_start() makes a GUI application hidden. If
+ want to show it, Use |:!start| instead.
+
+ The command is executed directly, not through a shell, the
+ 'shell' option is not used. To use the shell: >
+ let job = job_start(["/bin/sh", "-c", "echo hello"])
+< Or: >
+ let job = job_start('/bin/sh -c "echo hello"')
+< Note that this will start two processes, the shell and the
+ command it executes. If you don't want this use the "exec"
+ shell command.
+
+ On Unix $PATH is used to search for the executable only when
+ the command does not contain a slash.
+
+ The job will use the same terminal as Vim. If it reads from
+ stdin the job and Vim will be fighting over input, that
+ doesn't work. Redirect stdin and stdout to avoid problems: >
+ let job = job_start(['sh', '-c', "myserver </dev/null >/dev/null"])
+<
+ The returned Job object can be used to get the status with
+ |job_status()| and stop the job with |job_stop()|.
+
+ Note that the job object will be deleted if there are no
+ references to it. This closes the stdin and stderr, which may
+ cause the job to fail with an error. To avoid this keep a
+ reference to the job. Thus instead of: >
+ call job_start('my-command')
+< use: >
+ let myjob = job_start('my-command')
+< and unlet "myjob" once the job is not needed or is past the
+ point where it would fail (e.g. when it prints a message on
+ startup). Keep in mind that variables local to a function
+ will cease to exist if the function returns. Use a
+ script-local variable if needed: >
+ let s:myjob = job_start('my-command')
+<
+ {options} must be a Dictionary. It can contain many optional
+ items, see |job-options|.
+
+
+job_status({job}) *job_status()* *E916*
+ Returns a String with the status of {job}:
+ "run" job is running
+ "fail" job failed to start
+ "dead" job died or was stopped after running
+
+ On Unix a non-existing command results in "dead" instead of
+ "fail", because a fork happens before the failure can be
+ detected.
+
+ If an exit callback was set with the "exit_cb" option and the
+ job is now detected to be "dead" the callback will be invoked.
+
+ For more information see |job_info()|.
+
+
+job_stop({job} [, {how}]) *job_stop()*
+ Stop the {job}. This can also be used to signal the job.
+
+ When {how} is omitted or is "term" the job will be terminated.
+ For Unix SIGTERM is sent. On MS-Windows the job will be
+ terminated forcedly (there is no "gentle" way).
+ This goes to the process group, thus children may also be
+ affected.
+
+ Effect for Unix:
+ "term" SIGTERM (default)
+ "hup" SIGHUP
+ "quit" SIGQUIT
+ "int" SIGINT
+ "kill" SIGKILL (strongest way to stop)
+ number signal with that number
+
+ Effect for MS-Windows:
+ "term" terminate process forcedly (default)
+ "hup" CTRL_BREAK
+ "quit" CTRL_BREAK
+ "int" CTRL_C
+ "kill" terminate process forcedly
+ Others CTRL_BREAK
+
+ On Unix the signal is sent to the process group. This means
+ that when the job is "sh -c command" it affects both the shell
+ and the command.
+
+ The result is a Number: 1 if the operation could be executed,
+ 0 if "how" is not supported on the system.
+ Note that even when the operation was executed, whether the
+ job was actually stopped needs to be checked with
+ |job_status()|.
+
+ If the status of the job is "dead", the signal will not be
+ sent. This is to avoid to stop the wrong job (esp. on Unix,
+ where process numbers are recycled).
+
+ When using "kill" Vim will assume the job will die and close
+ the channel.
+
+
+==============================================================================
+12. Job options *job-options*
The {options} argument in job_start() is a dictionary. All entries are
optional. Some options can be used after the job has started, using
@@ -773,7 +1136,7 @@ accessible for others). Use |setfperm()| to change this.
If the file already exists it is truncated.
==============================================================================
-11. Controlling a job *job-control*
+13. Controlling a job *job-control*
To get the status of a job: >
echo job_status(job)
@@ -789,7 +1152,7 @@ signals. E.g. to force a job to stop, "kill it": >
For more options see |job_stop()|.
==============================================================================
-12. Using a prompt buffer *prompt-buffer*
+14. Using a prompt buffer *prompt-buffer*
If you want to type input for the job in a Vim window you have a few options:
- Use a normal buffer and handle all possible commands yourself.
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 6a44c9f3a..79c5409c5 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 8.1. Last change: 2019 Jul 19
+*eval.txt* For Vim version 8.1. Last change: 2019 Jul 21
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -31,7 +31,9 @@ done, the features in this document are not available. See |+eval| and
11. No +eval feature |no-eval-feature|
12. The sandbox |eval-sandbox|
13. Textlock |textlock|
-14. Testing |testing|
+
+Testing support is documented in |testing.txt|.
+Profiling is documented at |profiling|.
==============================================================================
1. Variables *variables*
@@ -2952,117 +2954,9 @@ argv([{nr} [, {winid}])
The {winid} argument specifies the window ID, see |argc()|.
-assert_beeps({cmd}) *assert_beeps()*
- Run {cmd} and add an error message to |v:errors| if it does
- NOT produce a beep or visual bell.
- Also see |assert_fails()| and |assert-return|.
-
- *assert_equal()*
-assert_equal({expected}, {actual} [, {msg}])
- When {expected} and {actual} are not equal an error message is
- added to |v:errors| and 1 is returned. Otherwise zero is
- returned |assert-return|.
- There is no automatic conversion, the String "4" is different
- from the Number 4. And the number 4 is different from the
- Float 4.0. The value of 'ignorecase' is not used here, case
- always matters.
- When {msg} is omitted an error in the form "Expected
- {expected} but got {actual}" is produced.
- Example: >
- assert_equal('foo', 'bar')
-< Will result in a string to be added to |v:errors|:
- test.vim line 12: Expected 'foo' but got 'bar' ~
- *assert_equalfile()*
-assert_equalfile({fname-one}, {fname-two})
- When the files {fname-one} and {fname-two} do not contain
- exactly the same text an error message is added to |v:errors|.
- Also see |assert-return|.
- When {fname-one} or {fname-two} does not exist the error will
- mention that.
- Mainly useful with |terminal-diff|.
-
-assert_exception({error} [, {msg}]) *assert_exception()*
- When v:exception does not contain the string {error} an error
- message is added to |v:errors|. Also see |assert-return|.
- This can be used to assert that a command throws an exception.
- Using the error number, followed by a colon, avoids problems
- with translations: >
- try
- commandthatfails
- call assert_false(1, 'command should have failed')
- catch
- call assert_exception('E492:')
- endtry
-
-assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()*
- Run {cmd} and add an error message to |v:errors| if it does
- NOT produce an error. Also see |assert-return|.
- When {error} is given it must match in |v:errmsg|.
- Note that beeping is not considered an error, and some failing
- commands only beep. Use |assert_beeps()| for those.
-
-assert_false({actual} [, {msg}]) *assert_false()*
- When {actual} is not false an error message is added to
- |v:errors|, like with |assert_equal()|.
- Also see |assert-return|.
- A value is false when it is zero. When {actual} is not a
- number the assert fails.
- When {msg} is omitted an error in the form
- "Expected False but got {actual}" is produced.
-
-assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()*
- This asserts number and |Float| values. When {actual} is lower
- than {lower} or higher than {upper} an error message is added
- to |v:errors|. Also see |assert-return|.
- When {msg} is omitted an error in the form
- "Expected range {lower} - {upper}, but got {actual}" is
- produced.
-
- *assert_match()*
-assert_match({pattern}, {actual} [, {msg}])
- When {pattern} does not match {actual} an error message is
- added to |v:errors|. Also see |assert-return|.
-
- {pattern} is used as with |=~|: The matching is always done
- like 'magic' was set and 'cpoptions' is empty, no matter what
- the actual value of 'magic' or 'cpoptions' is.
-
- {actual} is used as a string, automatic conversion applies.
- Use "^" and "$" to match with the start and end of the text.
- Use both to match the whole text.
-
- When {msg} is omitted an error in the form
- "Pattern {pattern} does not match {actual}" is produced.
- Example: >
- assert_match('^f.*o$', 'foobar')
-< Will result in a string to be added to |v:errors|:
- test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~
-
- *assert_notequal()*
-assert_notequal({expected}, {actual} [, {msg}])
- The opposite of `assert_equal()`: add an error message to
- |v:errors| when {expected} and {actual} are equal.
- Also see |assert-return|.
-
- *assert_notmatch()*
-assert_notmatch({pattern}, {actual} [, {msg}])
- The opposite of `assert_match()`: add an error message to
- |v:errors| when {pattern} matches {actual}.
- Also see |assert-return|.
-
-assert_report({msg}) *assert_report()*
- Report a test failure directly, using {msg}.
- Always returns one.
-
-assert_true({actual} [, {msg}]) *assert_true()*
- When {actual} is not true an error message is added to
- |v:errors|, like with |assert_equal()|.
- Also see |assert-return|.
- A value is TRUE when it is a non-zero number. When {actual}
- is not a number the assert fails.
- When {msg} is omitted an error in the form "Expected True but
- got {actual}" is produced.
+assert_ functions are documented here: |assert-functions|
+
asin({expr}) *asin()*
Return the arc sine of {expr} measured in radians, as a |Float|
@@ -3358,213 +3252,10 @@ ceil({expr}) *ceil()*
< 4.0
{only available when compiled with the |+float| feature}
-ch_canread({handle}) *ch_canread()*
- Return non-zero when there is something to read from {handle}.
- {handle} can be a Channel or a Job that has a Channel.
-
- This is useful to read from a channel at a convenient time,
- e.g. from a timer.
-
- Note that messages are dropped when the channel does not have
- a callback. Add a close callback to avoid that.
-
- {only available when compiled with the |+channel| feature}
-ch_close({handle}) *ch_close()*
- Close {handle}. See |channel-close|.
- {handle} can be a Channel or a Job that has a Channel.
- A close callback is not invoked.
+ch_ functions are documented here: |channel-functions-details|
- {only available when compiled with the |+channel| feature}
-ch_close_in({handle}) *ch_close_in()*
- Close the "in" part of {handle}. See |channel-close-in|.
- {handle} can be a Channel or a Job that has a Channel.
- A close callback is not invoked.
-
- {only available when compiled with the |+channel| feature}
-
-ch_evalexpr({handle}, {expr} [, {options}]) *ch_evalexpr()*
- Send {expr} over {handle}. The {expr} is encoded
- according to the type of channel. The function cannot be used
- with a raw channel. See |channel-use|.
- {handle} can be a Channel or a Job that has a Channel.
- *E917*
- {options} must be a Dictionary. It must not have a "callback"
- entry. It can have a "timeout" entry to specify the timeout
- for this specific request.
-
- ch_evalexpr() waits for a response and returns the decoded
- expression. When there is an error or timeout it returns an
- empty string.
-
- {only available when compiled with the |+channel| feature}
-
-ch_evalraw({handle}, {string} [, {options}]) *ch_evalraw()*
- Send {string} over {handle}.
- {handle} can be a Channel or a Job that has a Channel.
-
- Works like |ch_evalexpr()|, but does not encode the request or
- decode the response. The caller is responsible for the
- correct contents. Also does not add a newline for a channel
- in NL mode, the caller must do that. The NL in the response
- is removed.
- Note that Vim does not know when the text received on a raw
- channel is complete, it may only return the first part and you
- need to use |ch_readraw()| to fetch the rest.
- See |channel-use|.
-
- {only available when compiled with the |+channel| feature}
-
-ch_getbufnr({handle}, {what}) *ch_getbufnr()*
- Get the buffer number that {handle} is using for {what}.
- {handle} can be a Channel or a Job that has a Channel.
- {what} can be "err" for stderr, "out" for stdout or empty for
- socket output.
- Returns -1 when there is no buffer.
- {only available when compiled with the |+channel| feature}
-
-ch_getjob({channel}) *ch_getjob()*
- Get the Job associated with {channel}.
- If there is no job calling |job_status()| on the returned Job
- will result in "fail".
-
- {only available when compiled with the |+channel| and
- |+job| features}
-
-ch_info({handle}) *ch_info()*
- Returns a Dictionary with information about {handle}. The
- items are:
- "id" number of the channel
- "status" "open", "buffered" or "closed", like
- ch_status()
- When opened with ch_open():
- "hostname" the hostname of the address
- "port" the port of the address
- "sock_status" "open" or "closed"
- "sock_mode" "NL", "RAW", "JSON" or "JS"
- "sock_io" "socket"
- "sock_timeout" timeout in msec
- When opened with job_start():
- "out_status" "open", "buffered" or "closed"
- "out_mode" "NL", "RAW", "JSON" or "JS"
- "out_io" "null", "pipe", "file" or "buffer"
- "out_timeout" timeout in msec
- "err_status" "open", "buffered" or "closed"
- "err_mode" "NL", "RAW", "JSON" or "JS"
- "err_io" "out", "null", "pipe", "file" or "buffer"
- "err_timeout" timeout in msec
- "in_status" "open" or "closed"
- "in_mode" "NL", "RAW", "JSON" or "JS"
- "in_io" "null", "pipe", "file" or "buffer"
- "in_timeout" timeout in msec
-
-ch_log({msg} [, {handle}]) *ch_log()*
- Write {msg} in the channel log file, if it was opened with
- |ch_logfile()|.
- When {handle} is passed the channel number is used for the
- message.
- {handle} can be a Channel or a Job that has a Channel. The
- Channel must be open for the channel number to be used.
-
-ch_logfile({fname} [, {mode}]) *ch_logfile()*
- Start logging channel activity to {fname}.
- When {fname} is an empty string: stop logging.
-
- When {mode} is omitted or "a" append to the file.
- When {mode} is "w" start with an empty file.
-
- Use |ch_log()| to write log messages. The file is flushed
- after every message, on Unix you can use "tail -f" to see what
- is going on in real time.
-
- This function is not available in the |sandbox|.
- NOTE: the channel communication is stored in the file, be
- aware that this may contain confidential and privacy sensitive
- information, e.g. a password you type in a terminal window.
-
-
-ch_open({address} [, {options}]) *ch_open()*
- Open a channel to {address}. See |channel|.
- Returns a Channel. Use |ch_status()| to check for failure.
-
- {address} has the form "hostname:port", e.g.,
- "localhost:8765".
-
- If {options} is given it must be a |Dictionary|.
- See |channel-open-options|.
-
- {only available when compiled with the |+channel| feature}
-
-ch_read({handle} [, {options}]) *ch_read()*
- Read from {handle} and return the received message.
- {handle} can be a Channel or a Job that has a Channel.
- For a NL channel this waits for a NL to arrive, except when
- there is nothing more to read (channel was closed).
- See |channel-more|.
- {only available when compiled with the |+channel| feature}
-
-ch_readblob({handle} [, {options}]) *ch_readblob()*
- Like ch_read() but reads binary data and returns a |Blob|.
- See |channel-more|.
- {only available when compiled with the |+channel| feature}
-
-ch_readraw({handle} [, {options}]) *ch_readraw()*
- Like ch_read() but for a JS and JSON channel does not decode
- the message. For a NL channel it does not block waiting for
- the NL to arrive, but otherwise works like ch_read().
- See |channel-more|.
- {only available when compiled with the |+channel| feature}
-
-ch_sendexpr({handle}, {expr} [, {options}]) *ch_sendexpr()*
- Send {expr} over {handle}. The {expr} is encoded
- according to the type of channel. The function cannot be used
- with a raw channel.
- See |channel-use|. *E912*
- {handle} can be a Channel or a Job that has a Channel.
-
- {only available when compiled with the |+channel| feature}
-
-ch_sendraw({handle}, {expr} [, {options}]) *ch_sendraw()*
- Send |String| or |Blob| {expr} over {handle}.
- Works like |ch_sendexpr()|, but does not encode the request or
- decode the response. The caller is responsible for the
- correct contents. Also does not add a newline for a channel
- in NL mode, the caller must do that. The NL in the response
- is removed.
- See |channel-use|.
-
- {only available when compiled with the |+channel| feature}
-
-ch_setoptions({handle}, {options}) *ch_setoptions()*
- Set options on {handle}:
- "callback" the channel callback
- "timeout" default read timeout in msec
- "mode" mode for the whole channel
- See |ch_open()| for more explanation.
- {handle} can be a Channel or a Job that has a Channel.
-
- Note that changing the mode may cause queued messages to be
- lost.
-
- These options cannot be changed:
- "waittime" only applies to |ch_open()|
-
-ch_status({handle} [, {options}]) *ch_status()*
- Return the status of {handle}:
- "fail" failed to open the channel
- "open" channel can be used
- "buffered" channel can be read, not written to
- "closed" channel can not be used
- {handle} can be a Channel or a Job that has a Channel.
- "buffered" is used when the channel was closed but there is
- still data that can be obtained with |ch_read()|.
-
- If {options} is given it can contain a "part" entry to specify
- the part of the channel to return the status for: "out" or
- "err". For example, to get the error status: >
- ch_status(job, {"part": "err"})
-<
changenr() *changenr()*
Return the number of the most recent change. This is the same
number as what is displayed with |:undolist| and can be used
@@ -6044,161 +5735,9 @@ items({dict}) *items()*
echo key . ': ' . value
endfor
-job_getchannel({job}) *job_getchannel()*
- Get the channel handle that {job} is using.
- To check if the job has no channel: >
- if string(job_getchannel()) == 'channel fail'
-<
- {only available when compiled with the |+job| feature}
-
-job_info([{job}]) *job_info()*
- Returns a Dictionary with information about {job}:
- "status" what |job_status()| returns
- "channel" what |job_getchannel()| returns
- "cmd" List of command arguments used to start the job
- "process" process ID
- "tty_in" terminal input name, empty when none
- "tty_out" terminal output name, empty when none
- "exitval" only valid when "status" is "dead"
- "exit_cb" function to be called on exit
- "stoponexit" |job-stoponexit|
-
- Only in Unix:
- "termsig" the signal which terminated the process
- (See |job_stop()| for the values)
- only valid when "status" is "dead"
-
- Only in MS-Windows:
- "tty_type" Type of virtual console in use.
- Values are "winpty" or "conpty".
- See 'termwintype'.
-
- Without any arguments, returns a List with all Job objects.
-
-job_setoptions({job}, {options}) *job_setoptions()*
- Change options for {job}. Supported are:
- "stoponexit" |job-stoponexit|
- "exit_cb" |job-exit_cb|
-
-job_start({command} [, {options}]) *job_start()*
- Start a job and return a Job object. Unlike |system()| and
- |:!cmd| this does not wait for the job to finish.
- To start a job in a terminal window see |term_start()|.
-
- If the job fails to start then |job_status()| on the returned
- Job object results in "fail" and none of the callbacks will be
- invoked.
-
- {command} can be a String. This works best on MS-Windows. On
- Unix it is split up in white-separated parts to be passed to
- execvp(). Arguments in double quotes can contain white space.
-
- {command} can be a List, where the first item is the executable
- and further items are the arguments. All items are converted
- to String. This works best on Unix.
-
- On MS-Windows, job_start() makes a GUI application hidden. If
- want to show it, Use |:!start| instead.
-
- The command is executed directly, not through a shell, the
- 'shell' option is not used. To use the shell: >
- let job = job_start(["/bin/sh", "-c", "echo hello"])
-< Or: >
- let job = job_start('/bin/sh -c "echo hello"')
-< Note that this will start two processes, the shell and the
- command it executes. If you don't want this use the "exec"
- shell command.
-
- On Unix $PATH is used to search for the executable only when
- the command does not contain a slash.
-
- The job will use the same terminal as Vim. If it reads from
- stdin the job and Vim will be fighting over input, that
- doesn't work. Redirect stdin and stdout to avoid problems: >
- let job = job_start(['sh', '-c', "myserver </dev/null >/dev/null"])
-<
- The returned Job object can be used to get the status with
- |job_status()| and stop the job with |job_stop()|.
-
- Note that the job object will be deleted if there are no
- references to it. This closes the stdin and stderr, which may
- cause the job to fail with an error. To avoid this keep a
- reference to the job. Thus instead of: >
- call job_start('my-command')
-< use: >
- let myjob = job_start('my-command')
-< and unlet "myjob" once the job is not needed or is past the
- point where it would fail (e.g. when it prints a message on
- startup). Keep in mind that variables local to a function
- will cease to exist if the function returns. Use a
- script-local variable if needed: >
- let s:myjob = job_start('my-command')
-<
- {options} must be a Dictionary. It can contain many optional
- items, see |job-options|.
-
- {only available when compiled with the |+job| feature}
-
-job_status({job}) *job_status()* *E916*
- Returns a String with the status of {job}:
- "run" job is running
- "fail" job failed to start
- "dead" job died or was stopped after running
-
- On Unix a non-existing command results in "dead" instead of
- "fail", because a fork happens before the failure can be
- detected.
-
- If an exit callback was set with the "exit_cb" option and the
- job is now detected to be "dead" the callback will be invoked.
-
- For more information see |job_info()|.
-
- {only available when compiled with the |+job| feature}
-
-job_stop({job} [, {how}]) *job_stop()*
- Stop the {job}. This can also be used to signal the job.
-
- When {how} is omitted or is "term" the job will be terminated.
- For Unix SIGTERM is sent. On MS-Windows the job will be
- terminated forcedly (there is no "gentle" way).
- This goes to the process group, thus children may also be
- affected.
-
- Effect for Unix:
- "term" SIGTERM (default)
- "hup" SIGHUP
- "quit" SIGQUIT
- "int" SIGINT
- "kill" SIGKILL (strongest way to stop)
- number signal with that number
-
- Effect for MS-Windows:
- "term" terminate process forcedly (default)
- "hup" CTRL_BREAK
- "quit" CTRL_BREAK
- "int" CTRL_C
- "kill" terminate process forcedly
- Others CTRL_BREAK
-
- On Unix the signal is sent to the process group. This means
- that when the job is "sh -c command" it affects both the shell
- and the command.
-
- The result is a Number: 1 if the operation could be executed,
- 0 if "how" is not supported on the system.
- Note that even when the operation was executed, whether the
- job was actually stopped needs to be checked with
- |job_status()|.
-
- If the status of the job is "dead", the signal will not be
- sent. This is to avoid to stop the wrong job (esp. on Unix,
- where process numbers are recycled).
- When using "kill" Vim will assume the job will die and close
- the channel.
+job_ functions are documented here: |job-functions-details|
- {only available when compiled with the |+job| feature}
join({list} [, {sep}]) *join()*
Join the items in {list} together into one String.
@@ -7333,201 +6872,7 @@ prompt_setprompt({buf}, {text}) *prompt_setprompt()*
"prompt". Example: >
call prompt_setprompt(bufnr(''), 'command: ')
<
- *prop_add()* *E965*
-prop_add({lnum}, {col}, {props})
- Attach a text property at position {lnum}, {col}. {col} is
- counted in bytes, use one for the first column.
- If {lnum} is invalid an error is given. *E966*
- If {col} is invalid an error is given. *E964*
-
- {props} is a dictionary with these fields:
- length length of text in bytes, can only be used
- for a property that does not continue in
- another line; can be zero
- end_lnum line number for the end of text
- end_col column just after the text; not used when
- "length" is present; when {col} and "end_col"
- are equal, and "end_lnum" is omitted or equal
- to {lnum}, this is a zero-width text property
- bufnr buffer to add the property to; when omitted
- the current buffer is used
- id user defined ID for the property; when omitted
- zero is used
- type name of the text property type
- All fields except "type" are optional.
-
- It is an error when both "length" and "end_lnum" or "end_col"
- are given. Either use "length" or "end_col" for a property
- within one line, or use "end_lnum" and "end_col" for a
- property that spans more than one line.
- When neither "length" nor "end_col" are given the property
- will be zero-width. That means it will not be highlighted but
- will move with the text, as a kind of mark.
- The property can end exactly at the last character of the
- text, or just after it. In the last case, if text is appended
- to the line, the text property size will increase, also when
- the property type does not have "end_incl" set.
-
- "type" will first be looked up in the buffer the property is
- added to. When not found, the global property types are used.
- If not found an error is given.
-
- See |text-properties| for information about text properties.
-
-
-prop_clear({lnum} [, {lnum-end} [, {props}]]) *prop_clear()*
- Remove all text properties from line {lnum}.
- When {lnum-end} is given, remove all text properties from line
- {lnum} to {lnum-end} (inclusive).
-
- When {props} contains a "bufnr" item use this buffer,
- otherwise use the current buffer.
-
- See |text-properties| for information about text properties.
-
- *prop_find()*
-prop_find({props} [, {direction}])
- NOT IMPLEMENTED YET
- Search for a text property as specified with {props}:
- id property with this ID
- type property with this type name
- bufnr buffer to search in; when present a
- start position with "lnum" and "col"
- must be given; when omitted the
- current buffer is used
- lnum start in this line (when omitted start
- at the cursor)
- col start at this column (when omitted
- and "lnum" is given: use column 1,
- otherwise start at the cursor)
- skipstart do not look for a match at the start
- position
-
- {direction} can be "f" for forward and "b" for backward. When
- omitted forward search is performed.
-
- If a match is found then a Dict is returned with the entries
- as with prop_list(), and additionally an "lnum" entry.
- If no match is found then an empty Dict is returned.
-
- See |text-properties| for information about text properties.
-
-
-prop_list({lnum} [, {props}]) *prop_list()*
- Return a List with all text properties in line {lnum}.
-
- When {props} contains a "bufnr" item, use this buffer instead
- of the current buffer.
-
- The properties are ordered by starting column and priority.
- Each property is a Dict with these entries:
- col starting column
- length length in bytes, one more if line break is
- included
- id property ID
- type name of the property type, omitted if
- the type was deleted
- start when TRUE property starts in this line
- end when TRUE property ends in this line
-
- When "start" is zero the property started in a previous line,
- the current one is a continuation.
- When "end" is zero the property continues in the next line.
- The line break after this line is included.
-
- See |text-properties| for information about text properties.
-
-
- *prop_remove()* *E968*
-prop_remove({props} [, {lnum} [, {lnum-end}]])
- Remove a matching text property from line {lnum}. When
- {lnum-end} is given, remove matching text properties from line
- {lnum} to {lnum-end} (inclusive).
- When {lnum} is omitted remove matching text properties from
- all lines.
-
- {props} is a dictionary with these fields:
- id remove text properties with this ID
- type remove text properties with this type name
- bufnr use this buffer instead of the current one
- all when TRUE remove all matching text properties,
- not just the first one
- A property matches when either "id" or "type" matches.
- If buffer "bufnr" does not exist you get an error message.
- If buffer "bufnr" is not loaded then nothing happens.
-
- Returns the number of properties that were removed.
-
- See |text-properties| for information about text properties.
-
-
-prop_type_add({name}, {props}) *prop_type_add()* *E969* *E970*
- Add a text property type {name}. If a property type with this
- name already exists an error is given.
- {props} is a dictionary with these optional fields:
- bufnr define the property only for this buffer; this
- avoids name collisions and automatically
- clears the property types when the buffer is
- deleted.
- highlight name of highlight group to use
- priority when a character has multiple text
- properties the one with the highest priority
- will be used; negative values can be used, the
- default priority is zero
- combine when TRUE combine the highlight with any
- syntax highlight; when omitted or FALSE syntax
- highlight will not be used
- start_incl when TRUE inserts at the start position will
- be included in the text property
- end_incl when TRUE inserts at the end position will be
- included in the text property
-
- See |text-properties| for information about text properties.
-
-
-prop_type_change({name}, {props}) *prop_type_change()*
- Change properties of an existing text property type. If a
- property with this name does not exist an error is given.
- The {props} argument is just like |prop_type_add()|.
-
- See |text-properties| for information about text properties.
-
-
-prop_type_delete({name} [, {props}]) *prop_type_delete()*
- Remove the text property type {name}. When text properties
- using the type {name} are still in place, they will not have
- an effect and can no longer be removed by name.
-
- {props} can contain a "bufnr" item. When it is given, delete
- a property type from this buffer instead of from the global
- property types.
-
- When text property type {name} is not found there is no error.
-
- See |text-properties| for information about text properties.
-
-
-prop_type_get([{name} [, {props}]) *prop_type_get()*
- Returns the properties of property type {name}. This is a
- dictionary with the same fields as was given to
- prop_type_add().
- When the property type {name} does not exist, an empty
- dictionary is returned.
-
- {props} can contain a "bufnr" item. When it is given, use
- this buffer instead of the global property types.
-
- See |text-properties| for information about text properties.
-
-
-prop_type_list([{props}]) *prop_type_list()*
- Returns a list with all property type names.
-
- {props} can contain a "bufnr" item. When it is given, use
- this buffer instead of the global property types.
-
- See |text-properties| for information about text properties.
-
+prop_ functions are documented here: |text-prop-functions|.
pumvisible() *pumvisible()*
Returns non-zero when the popup menu is visible, zero
@@ -8637,351 +7982,9 @@ shiftwidth([{col}]) *shiftwidth()*
'vartabstop' feature. If the 'vartabstop' setting is enabled and
no {col} argument is given, column 1 will be assumed.
-sign_define({name} [, {dict}]) *sign_define()*
-sign_define({list})
- Define a new sign named {name} or modify the attributes of an
- existing sign. This is similar to the |:sign-define| command.
-
- Prefix {name} with a unique text to avoid name collisions.
- There is no {group} like with placing signs.
-
- The {name} can be a String or a Number. The optional {dict}
- argument specifies the sign attributes. The following values
- are supported:
- icon full path to the bitmap file for the sign.
- linehl highlight group used for the whole line the
- sign is placed in.
- text text that is displayed when there is no icon
- or the GUI is not being used.
- texthl highlight group used for the text item
-
- If the sign named {name} already exists, then the attributes
- of the sign are updated.
-
- The one argument {list} can be used to define a list of signs.
- Each list item is a dictionary with the above items in {dict}
- and a 'name' item for the sign name.
-
- Returns 0 on success and -1 on failure. When the one argument
- {list} is used, then returns a List of values one for each
- defined sign.
-
- Examples: >
- call sign_define("mySign", {
- \ "text" : "=>",
- \ "texthl" : "Error",
- \ "linehl" : "Search"})
- call sign_define([
- \ {'name' : 'sign1',
- \ 'text' : '=>'},
- \ {'name' : 'sign2',
- \ 'text' : '!!'}
- \ ])
-<
-sign_getdefined([{name}]) *sign_getdefined()*
- Get a list of defined signs and their attributes.
- This is similar to the |:sign-list| command.
-
- If the {name} is not supplied, then a list of all the defined
- signs is returned. Otherwise the attribute of the specified
- sign is returned.
-
- Each list item in the returned value is a dictionary with the
- following entries:
- icon full path to the bitmap file of the sign
- linehl highlight group used for the whole line the
- sign is placed in.
- name name of the sign
- text text that is displayed when there is no icon
- or the GUI is not being used.
- texthl highlight group used for the text item
-
- Returns an empty List if there are no signs and when {name} is
- not found.
-
- Examples: >
- " Get a list of all the defined signs
- echo sign_getdefined()
-
- " Get the attribute of the sign named mySign
- echo sign_getdefined("mySign")
-<
-sign_getplaced([{expr} [, {dict}]]) *sign_getplaced()*
- Return a list of signs placed in a buffer or all the buffers.
- This is similar to the |:sign-place-list| command.
-
- If the optional buffer name {expr} is specified, then only the
- list of signs placed in that buffer is returned. For the use
- of {expr}, see |bufname()|. The optional {dict} can contain
- the following entries:
- group select only signs in this group
- id select sign with this identifier
- lnum select signs placed in this line. For the use
- of {lnum}, see |line()|.
- If {group} is '*', then signs in all the groups including the
- global group are returned. If {group} is not supplied or is an
- empty string, then only signs in the global group are
- returned. If no arguments are supplied, then signs in the
- global group placed in all the buffers are returned.
- See |sign-group|.
-
- Each list item in the returned value is a dictionary with the
- following entries:
- bufnr number of the buffer with the sign
- signs list of signs placed in {bufnr}. Each list
- item is a dictionary with the below listed
- entries
-
- The dictionary for each sign contains the following entries:
- group sign group. Set to '' for the global group.
- id identifier of the sign
- lnum line number where the sign is placed
- name name of the defined sign
- priority sign priority
-
- The returned signs in a buffer are ordered by their line
- number and priority.
-
- Returns an empty list on failure or if there are no placed
- signs.
-
- Examples: >
- " Get a List of signs placed in eval.c in the
- " global group
- echo sign_getplaced("eval.c")
-
- " Get a List of signs in group 'g1' placed in eval.c
- echo sign_getplaced("eval.c", {'group' : 'g1'})
-
- " Get a List of signs placed at line 10 in eval.c
- echo sign_getplaced("eval.c", {'lnum' : 10})
-
- " Get sign with identifier 10 placed in a.py
- echo sign_getplaced("a.py", {'id' : 10})
-
- " Get sign with id 20 in group 'g1' placed in a.py
- echo sign_getplaced("a.py", {'group' : 'g1',
- \ 'id' : 20})
-
- " Get a List of all the placed signs
- echo sign_getplaced()
-<
- *sign_jump()*
-sign_jump({id}, {group}, {expr})
- Open the buffer {expr} or jump to the window that contains
- {expr} and position the cursor at sign {id} in group {group}.
- This is similar to the |:sign-jump| command.
-
- For the use of {expr}, see |bufname()|.
-
- Returns the line number of the sign. Returns -1 if the
- arguments are invalid.
-
- Example: >
- " Jump to sign 10 in the current buffer
- call sign_jump(10, '', '')
-<
- *sign_place()*
-sign_place({id}, {group}, {name}, {expr} [, {dict}])
- Place the sign defined as {name} at line {lnum} in file or
- buffer {expr} and assign {id} and {group} to sign. This is
- similar to the |:sign-place| command.
-
- If the sign identifier {id} is zero, then a new identifier is
- allocated. Otherwise the specified number is used. {group} is
- the sign group name. To use the global sign group, use an
- empty string. {group} functions as a namespace for {id}, thus
- two groups can use the same IDs. Refer to |sign-identifier|
- and |sign-group| for more information.
-
- {name} refers to a defined sign.
- {expr} refers to a buffer name or number. For the accepted
- values, see |bufname()|.
-
- The optional {dict} argument supports the following entries:
- lnum line number in the file or buffer
- {expr} where the sign is to be placed.
- For the accepted values, see |line()|.
- priority priority of the sign. See
- |sign-priority| for more information.
-
- If the optional {dict} is not specified, then it modifies the
- placed sign {id} in group {group} to use the defined sign
- {name}.
-
- Returns the sign identifier on success and -1 on failure.
-
- Examples: >
- " Place a sign named sign1 with id 5 at line 20 in
- " buffer json.c
- call sign_place(5, '', 'sign1', 'json.c',
- \ {'lnum' : 20})
-
- " Updates sign 5 in buffer json.c to use sign2
- call sign_place(5, '', 'sign2', 'json.c')
-
- " Place a sign named sign3 at line 30 in
- " buffer json.c with a new identifier
- let id = sign_place(0, '', 'sign3', 'json.c',
- \ {'lnum' : 30})
-
- " Place a sign named sign4 with id 10 in group 'g3'
- " at line 40 in buffer json.c with priority 90
- call sign_place(10, 'g3', 'sign4', 'json.c',
- \ {'lnum' : 40, 'priority' : 90})
-<
- *sign_placelist()*
-sign_placelist({list})
- Place one or more signs. This is similar to the
- |sign_place()| function. The {list} argument specifies the
- List of signs to place. Each list item is a dict with the
- following sign attributes:
- buffer buffer name or number. For the accepted
- values, see |bufname()|.
- group sign group. {group} functions as a namespace
- for {id}, thus two groups can use the same
- IDs. If not specified or set to an empty
- string, then the global group is used. See
- |sign-group| for more information.
- id sign identifier. If not specified or zero,
- then a new unique identifier is allocated.
- Otherwise the specified number is used. See
- |sign-identifier| for more information.
- lnum line number in the buffer {expr} where the
- sign is to be placed. For the accepted values,
- see |line()|.
- name name of the sign to place. See |sign_define()|
- for more information.
- priority priority of the sign. When multiple signs are
- placed on a line, the sign with the highest
- priority is used. If not specified, the
- default value of 10 is used. See
- |sign-priority| for more information.
-
- If {id} refers to an existing sign, then the existing sign is
- modified to use the specified {name} and/or {priority}.
-
- Returns a List of sign identifiers. If failed to place a
- sign, the corresponding list item is set to -1.
-
- Examples: >
- " Place sign s1 with id 5 at line 20 and id 10 at line
- " 30 in buffer a.c
- let [n1, n2] = sign_placelist([
- \ {'id' : 5,
- \ 'name' : 's1',
- \ 'buffer' : 'a.c',
- \ 'lnum' : 20},
- \ {'id' : 10,
- \ 'name' : 's1',
- \ 'buffer' : 'a.c',
- \ 'lnum' : 30}
- \ ])
-
- " Place sign s1 in buffer a.c at line 40 and 50
- " with auto-generated identifiers
- let [n1, n2] = sign_placelist([
- \ {'name' : 's1',
- \ 'buffer' : 'a.c',
- \ 'lnum' : 40},
- \ {'name' : 's1',
- \ 'buffer' : 'a.c',
- \ 'lnum' : 50}
- \ ])
-<
-sign_undefine([{name}]) *sign_undefine()*
-sign_undefine({list})
- Deletes a previously defined sign {name}. This is similar to
- the |:sign-undefine| command. If {name} is not supplied, then
- deletes all the defined signs.
+sign_ functions are documented here: |sign-functions-details|
- The one argument {list} can be used to undefine a list of
- signs. Each list item is the name of a sign.
- Returns 0 on success and -1 on failure. For the one argument
- {list} call, returns a list of values one for each undefined
- sign.
-
- Examples: >
- " Delete a sign named mySign
- call sign_undefine("mySign")
-
- " Delete signs 'sign1' and 'sign2'
- call sign_undefine(["sign1", "sign2"])
-
- " Delete all the signs
- call sign_undefine()
-<
-sign_unplace({group} [, {dict}]) *sign_unplace()*
- Remove a previously placed sign in one or more buffers. This
- is similar to the |:sign-unplace| command.
-
- {group} is the sign group name. To use the global sign group,
- use an empty string. If {group} is set to '*', then all the
- groups including the global group are used.
- The signs in {group} are selected based on the entries in
- {dict}. The following optional entries in {dict} are
- supported:
- buffer buffer name or number. See |bufname()|.
- id sign identifier
- If {dict} is not supplied, then all the signs in {group} are
- removed.
-
- Returns 0 on success and -1 on failure.
-
- Examples: >
- " Remove sign 10 from buffer a.vim
- call sign_unplace('', {'buffer' : "a.vim", 'id' : 10})
-
- " Remove sign 20 in group 'g1' from buffer 3
- call sign_unplace('g1', {'buffer' : 3, 'id' : 20})
-
- " Remove all the signs in group 'g2' from buffer 10
- call sign_unplace('g2', {'buffer' : 10})
-
- " Remove sign 30 in group 'g3' from all the buffers
- call sign_unplace('g3', {'id' : 30})
-
- " Remove all the signs placed in buffer 5
- call sign_unplace('*', {'buffer' : 5})
-
- " Remove the signs in group 'g4' from all the buffers
- call sign_unplace('g4')
-
- " Remove sign 40 from all the buffers
- call sign_unplace('*', {'id' : 40})
-
- " Remove all the placed signs from all the buffers
- call sign_unplace('*')
-<
-sign_unplacelist({list}) *sign_unplacelist()*
- Remove previously placed signs from one or more buffers. This
- is similar to the |sign_unplace()| function.
-
- The {list} argument specifies the List of signs to remove.
- Each list item is a dict with the following sign attributes:
- buffer buffer name or number. For the accepted
- values, see |bufname()|. If not specified,
- then the specified sign is removed from all
- the buffers.
- group sign group name. If not specified or set to an
- empty string, then the global sign group is
- used. If set to '*', then all the groups
- including the global group are used.
- id sign identifier. If not specified, then all
- the signs in the specified group are removed.
-
- Returns a List where an entry is set to 0 if the corresponding
- sign was successfully removed or -1 on failure.
-
- Example: >
- " Remove sign with id 10 from buffer a.vim and sign
- " with id 20 from buffer b.vim
- call sign_unplacelist([
- \ {'id' : 10, 'buffer' : "a.vim"},
- \ {'id' : 20, 'buffer' : 'b.vim'},
- \ ])
-<
simplify({filename}) *simplify()*
Simplify the file name as much as possible without changing
the meaning. Shortcuts (on MS-Windows) or symbolic links (on
@@ -9822,147 +8825,11 @@ tempname() *tempname()* *temp-file-name*
For MS-Windows forward slashes are used when the 'shellslash'
option is set or when 'shellcmdflag' starts with '-'.
+
term_ functions are documented here: |terminal-function-details|
-test_alloc_fail({id}, {countdown}, {repeat}) *test_alloc_fail()*
- This is for testing: If the memory allocation with {id} is
- called, then decrement {countdown}, and when it reaches zero
- let memory allocation fail {repeat} times. When {repeat} is
- smaller than one it fails one time.
+test_ functions are documented here: |test-functions|
-test_autochdir() *test_autochdir()*
- Set a flag to enable the effect of 'autochdir' before Vim
- startup has finished.
-
-test_feedinput({string}) *test_feedinput()*
- Characters in {string} are queued for processing as if they
- were typed by the user. This uses a low level input buffer.
- This function works only when with |+unix| or GUI is running.
-
-test_garbagecollect_now() *test_garbagecollect_now()*
- Like garbagecollect(), but executed right away. This must
- only be called directly to avoid any structure to exist
- internally, and |v:testing| must have been set before calling
- any function.
-
-test_garbagecollect_soon() *test_garbagecollect_soon()*
- Set the flag to call the garbagecollector as if in the main
- loop. Only to be used in tests.
-
-test_getvalue({name}) *test_getvalue()*
- Get the value of an internal variable. These values for
- {name} are supported:
- need_fileinfo
-
-test_ignore_error({expr}) *test_ignore_error()*
- Ignore any error containing {expr}. A normal message is given
- instead.
- This is only meant to be used in tests, where catching the
- error with try/catch cannot be used (because it skips over
- following code).
- {expr} is used literally, not as a pattern.
- When the {expr} is the string "RESET" then the list of ignored
- errors is made empty.
-
-test_null_blob() *test_null_blob()*
- Return a |Blob| that is null. Only useful for testing.
-
-test_null_channel() *test_null_channel()*
- Return a |Channel| that is null. Only useful for testing.
- {only available when compiled with the +channel feature}
-
-test_null_dict() *test_null_dict()*
- Return a |Dict| that is null. Only useful for testing.
-
-test_null_job() *test_null_job()*
- Return a |Job| that is null. Only useful for testing.
- {only available when compiled with the +job feature}
-
-test_null_list() *test_null_list()*
- Return a |List| that is null. Only useful for testing.
-
-test_null_partial() *test_null_partial()*
- Return a |Partial| that is null. Only useful for testing.
-
-test_null_string() *test_null_string()*
- Return a |String| that is null. Only useful for testing.
-
-test_option_not_set({name}) *test_option_not_set()*
- Reset the flag that indicates option {name} was set. Thus it
- looks like it still has the default value. Use like this: >
- set ambiwidth=double
- call test_option_not_set('ambiwidth')
-< Now the 'ambiwidth' option behaves like it was never changed,
- even though the value is "double".
- Only to be used for testing!
-
-test_override({name}, {val}) *test_override()*
- Overrides certain parts of Vim's internal processing to be able
- to run tests. Only to be used for testing Vim!
- The override is enabled when {val} is non-zero and removed
- when {val} is zero.
- Current supported values for name are:
-
- name effect when {val} is non-zero ~
- redraw disable the redrawing() function
- redraw_flag ignore the RedrawingDisabled flag
- char_avail disable the char_avail() function
- starting reset the "starting" variable, see below
- nfa_fail makes the NFA regexp engine fail to force a
- fallback to the old engine
- no_query_mouse do not query the mouse position for "dec"
- terminals
- no_wait_return set the "no_wait_return" flag. Not restored
- with "ALL".
- ALL clear all overrides ({val} is not used)
-
- "starting" is to be used when a test should behave like
- startup was done. Since the tests are run by sourcing a
- script the "starting" variable is non-zero. This is usually a
- good thing (tests run faster), but sometimes changes behavior
- in a way that the test doesn't work properly.
- When using: >
- call test_override('starting', 1)
-< The value of "starting" is saved. It is restored by: >
- call test_override('starting', 0)
-
-test_refcount({expr}) *test_refcount()*
- Return the reference count of {expr}. When {expr} is of a
- type that does not have a reference count, returns -1. Only
- to be used for testing.
-
-test_scrollbar({which}, {value}, {dragging}) *test_scrollbar()*
- Pretend using scrollbar {which} to move it to position
- {value}. {which} can be:
- left Left scrollbar of the current window
- right Right scrollbar of the current window
- hor Horizontal scrollbar
-
- For the vertical scrollbars {value} can be 1 to the
- line-count of the buffer. For the horizontal scrollbar the
- {value} can be between 1 and the maximum line length, assuming
- 'wrap' is not set.
-
- When {dragging} is non-zero it's like dragging the scrollbar,
- otherwise it's like clicking in the scrollbar.
- Only works when the {which} scrollbar actually exists,
- obviously only when using the GUI.
-
-test_setmouse({row}, {col}) *test_setmouse()*
- Set the mouse position to be used for the next mouse action.
- {row} and {col} are one based.
- For example: >
- call test_setmouse(4, 20)
- call feedkeys("\<LeftMouse>", "xt")
-
-test_settime({expr}) *test_settime()*
- Set the time Vim uses internally. Currently only used for
- timestamps in the history, as they are used in viminfo, and
- for undo.
- Using a value of 1 makes Vim not sleep after a warning or
- error message.
- {expr} must evaluate to a number. When the value is zero the
- normal behavior is restored.
*timer_info()*
timer_info([{id}])
@@ -13121,26 +11988,5 @@ This is not allowed when the textlock is active:
- closing a window or quitting Vim
- etc.
-==============================================================================
-14. Testing *testing*
-
-Vim can be tested after building it, usually with "make test".
-The tests are located in the directory "src/testdir".
-
-There are several types of tests added over time:
- test33.in oldest, don't add any more
- test_something.in old style tests
- test_something.vim new style tests
-
- *new-style-testing*
-New tests should be added as new style tests. These use functions such as
-|assert_equal()| to keep the test commands and the expected result in one
-place.
- *old-style-testing*
-In some cases an old style test needs to be used. E.g. when testing Vim
-without the |+eval| feature.
-
-Find more information in the file src/testdir/README.txt.
-
vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt
index ef5394d70..4550a5c94 100644
--- a/runtime/doc/help.txt
+++ b/runtime/doc/help.txt
@@ -1,4 +1,4 @@
-*help.txt* For Vim version 8.1. Last change: 2019 May 12
+*help.txt* For Vim version 8.1. Last change: 2019 Jul 21
VIM - main help file
k
@@ -139,6 +139,7 @@ Advanced editing ~
|fold.txt| hide (fold) ranges of lines
Special issues ~
+|testing.txt| testing Vim and Vim scripts
|print.txt| printing
|remote.txt| using Vim as a server or client
|term.txt| using different terminals and mice
diff --git a/runtime/doc/sign.txt b/runtime/doc/sign.txt
index 519a3d3b8..0e858d654 100644
--- a/runtime/doc/sign.txt
+++ b/runtime/doc/sign.txt
@@ -1,4 +1,4 @@
-*sign.txt* For Vim version 8.1. Last change: 2019 Jun 04
+*sign.txt* For Vim version 8.1. Last change: 2019 Jul 21
VIM REFERENCE MANUAL by Gordon Prieur
@@ -9,6 +9,7 @@ Sign Support Features *sign-support*
1. Introduction |sign-intro|
2. Commands |sign-commands|
+3. Functions |sign-functions-details|
{only available when compiled with the |+signs| feature}
@@ -344,4 +345,357 @@ See |sign_jump()| for the equivalent Vim script function.
Same but jump to the sign in group {group}
+==============================================================================
+3. Functions *sign-functions-details*
+
+sign_define({name} [, {dict}]) *sign_define()*
+sign_define({list})
+ Define a new sign named {name} or modify the attributes of an
+ existing sign. This is similar to the |:sign-define| command.
+
+ Prefix {name} with a unique text to avoid name collisions.
+ There is no {group} like with placing signs.
+
+ The {name} can be a String or a Number. The optional {dict}
+ argument specifies the sign attributes. The following values
+ are supported:
+ icon full path to the bitmap file for the sign.
+ linehl highlight group used for the whole line the
+ sign is placed in.
+ text text that is displayed when there is no icon
+ or the GUI is not being used.
+ texthl highlight group used for the text item
+
+ If the sign named {name} already exists, then the attributes
+ of the sign are updated.
+
+ The one argument {list} can be used to define a list of signs.
+ Each list item is a dictionary with the above items in {dict}
+ and a 'name' item for the sign name.
+
+ Returns 0 on success and -1 on failure. When the one argument
+ {list} is used, then returns a List of values one for each
+ defined sign.
+
+ Examples: >
+ call sign_define("mySign", {
+ \ "text" : "=>",
+ \ "texthl" : "Error",
+ \ "linehl" : "Search"})
+ call sign_define([
+ \ {'name' : 'sign1',
+ \ 'text' : '=>'},
+ \ {'name' : 'sign2',
+ \ 'text' : '!!'}
+ \ ])
+<
+sign_getdefined([{name}]) *sign_getdefined()*
+ Get a list of defined signs and their attributes.
+ This is similar to the |:sign-list| command.
+
+ If the {name} is not supplied, then a list of all the defined
+ signs is returned. Otherwise the attribute of the specified
+ sign is returned.
+
+ Each list item in the returned value is a dictionary with the
+ following entries:
+ icon full path to the bitmap file of the sign
+ linehl highlight group used for the whole line the
+ sign is placed in.
+ name name of the sign
+ text text that is displayed when there is no icon
+ or the GUI is not being used.
+ texthl highlight group used for the text item
+
+ Returns an empty List if there are no signs and when {name} is
+ not found.
+
+ Examples: >
+ " Get a list of all the defined signs
+ echo sign_getdefined()
+
+ " Get the attribute of the sign named mySign
+ echo sign_getdefined("mySign")
+<
+sign_getplaced([{expr} [, {dict}]]) *sign_getplaced()*
+ Return a list of signs placed in a buffer or all the buffers.
+ This is similar to the |:sign-place-list| command.
+
+ If the optional buffer name {expr} is specified, then only the
+ list of signs placed in that buffer is returned. For the use
+ of {expr}, see |bufname()|. The optional {dict} can contain
+ the following entries:
+ group select only signs in this group
+ id select sign with this identifier
+ lnum select signs placed in this line. For the use
+ of {lnum}, see |line()|.
+ If {group} is '*', then signs in all the groups including the
+ global group are returned. If {group} is not supplied or is an
+ empty string, then only signs in the global group are
+ returned. If no arguments are supplied, then signs in the
+ global group placed in all the buffers are returned.
+ See |sign-group|.
+
+ Each list item in the returned value is a dictionary with the
+ following entries:
+ bufnr number of the buffer with the sign
+ signs list of signs placed in {bufnr}. Each list
+ item is a dictionary with the below listed
+ entries
+
+ The dictionary for each sign contains the following entries:
+ group sign group. Set to '' for the global group.
+ id identifier of the sign
+ lnum line number where the sign is placed
+ name name of the defined sign
+ priority sign priority
+
+ The returned signs in a buffer are ordered by their line
+ number and priority.
+
+ Returns an empty list on failure or if there are no placed
+ signs.
+
+ Examples: >
+ " Get a List of signs placed in eval.c in the
+ " global group
+ echo sign_getplaced("eval.c")
+
+ " Get a List of signs in group 'g1' placed in eval.c
+ echo sign_getplaced("eval.c", {'group' : 'g1'})
+
+ " Get a List of signs placed at line 10 in eval.c
+ echo sign_getplaced("eval.c", {'lnum' : 10})
+
+ " Get sign with identifier 10 placed in a.py
+ echo sign_getplaced("a.py", {'id' : 10})
+
+ " Get sign with id 20 in group 'g1' placed in a.py
+ echo sign_getplaced("a.py", {'group' : 'g1',
+ \ 'id' : 20})
+
+ " Get a List of all the placed signs
+ echo sign_getplaced()
+<
+ *sign_jump()*
+sign_jump({id}, {group}, {expr})
+ Open the buffer {expr} or jump to the window that contains
+ {expr} and position the cursor at sign {id} in group {group}.
+ This is similar to the |:sign-jump| command.
+
+ For the use of {expr}, see |bufname()|.
+
+ Returns the line number of the sign. Returns -1 if the
+ arguments are invalid.
+
+ Example: >
+ " Jump to sign 10 in the current buffer
+ call sign_jump(10, '', '')
+<
+
+ *sign_place()*
+sign_place({id}, {group}, {name}, {expr} [, {dict}])
+ Place the sign defined as {name} at line {lnum} in file or
+ buffer {expr} and assign {id} and {group} to sign. This is
+ similar to the |:sign-place| command.
+
+ If the sign identifier {id} is zero, then a new identifier is
+ allocated. Otherwise the specified number is used. {group} is
+ the sign group name. To use the global sign group, use an
+ empty string. {group} functions as a namespace for {id}, thus
+ two groups can use the same IDs. Refer to |sign-identifier|
+ and |sign-group| for more information.
+
+ {name} refers to a defined sign.
+ {expr} refers to a buffer name or number. For the accepted
+ values, see |bufname()|.
+
+ The optional {dict} argument supports the following entries:
+ lnum line number in the file or buffer
+ {expr} where the sign is to be placed.
+ For the accepted values, see |line()|.
+ priority priority of the sign. See
+ |sign-priority| for more information.
+
+ If the optional {dict} is not specified, then it modifies the
+ placed sign {id} in group {group} to use the defined sign
+ {name}.
+
+ Returns the sign identifier on success and -1 on failure.
+
+ Examples: >
+ " Place a sign named sign1 with id 5 at line 20 in
+ " buffer json.c
+ call sign_place(5, '', 'sign1', 'json.c',
+ \ {'lnum' : 20})
+
+ " Updates sign 5 in buffer json.c to use sign2
+ call sign_place(5, '', 'sign2', 'json.c')
+
+ " Place a sign named sign3 at line 30 in
+ " buffer json.c with a new identifier
+ let id = sign_place(0, '', 'sign3', 'json.c',
+ \ {'lnum' : 30})
+
+ " Place a sign named sign4 with id 10 in group 'g3'
+ " at line 40 in buffer json.c with priority 90
+ call sign_place(10, 'g3', 'sign4', 'json.c',
+ \ {'lnum' : 40, 'priority' : 90})
+<
+
+ *sign_placelist()*
+sign_placelist({list})
+ Place one or more signs. This is similar to the
+ |sign_place()| function. The {list} argument specifies the
+ List of signs to place. Each list item is a dict with the
+ following sign attributes:
+ buffer buffer name or number. For the accepted
+ values, see |bufname()|.
+ group sign group. {group} functions as a namespace
+ for {id}, thus two groups can use the same
+ IDs. If not specified or set to an empty
+ string, then the global group is used. See
+ |sign-group| for more information.
+ id sign identifier. If not specified or zero,
+ then a new unique identifier is allocated.
+ Otherwise the specified number is used. See
+ |sign-identifier| for more information.
+ lnum line number in the buffer {expr} where the
+ sign is to be placed. For the accepted values,
+ see |line()|.
+ name name of the sign to place. See |sign_define()|
+ for more information.
+ priority priority of the sign. When multiple signs are
+ placed on a line, the sign with the highest
+ priority is used. If not specified, the
+ default value of 10 is used. See
+ |sign-priority| for more information.
+
+ If {id} refers to an existing sign, then the existing sign is
+ modified to use the specified {name} and/or {priority}.
+
+ Returns a List of sign identifiers. If failed to place a
+ sign, the corresponding list item is set to -1.
+
+ Examples: >
+ " Place sign s1 with id 5 at line 20 and id 10 at line
+ " 30 in buffer a.c
+ let [n1, n2] = sign_placelist([
+ \ {'id' : 5,
+ \ 'name' : 's1',
+ \ 'buffer' : 'a.c',
+ \ 'lnum' : 20},
+ \ {'id' : 10,
+ \ 'name' : 's1',
+ \ 'buffer' : 'a.c',
+ \ 'lnum' : 30}
+ \ ])
+
+ " Place sign s1 in buffer a.c at line 40 and 50
+ " with auto-generated identifiers
+ let [n1, n2] = sign_placelist([
+ \ {'name' : 's1',
+ \ 'buffer' : 'a.c',
+ \ 'lnum' : 40},
+ \ {'name' : 's1',
+ \ 'buffer' : 'a.c',
+ \ 'lnum' : 50}
+ \ ])
+<
+
+sign_undefine([{name}]) *sign_undefine()*
+sign_undefine({list})
+ Deletes a previously defined sign {name}. This is similar to
+ the |:sign-undefine| command. If {name} is not supplied, then
+ deletes all the defined signs.
+
+ The one argument {list} can be used to undefine a list of
+ signs. Each list item is the name of a sign.
+
+ Returns 0 on success and -1 on failure. For the one argument
+ {list} call, returns a list of values one for each undefined
+ sign.
+
+ Examples: >
+ " Delete a sign named mySign
+ call sign_undefine("mySign")
+
+ " Delete signs 'sign1' and 'sign2'
+ call sign_undefine(["sign1", "sign2"])
+
+ " Delete all the signs
+ call sign_undefine()
+<
+
+sign_unplace({group} [, {dict}]) *sign_unplace()*
+ Remove a previously placed sign in one or more buffers. This
+ is similar to the |:sign-unplace| command.
+
+ {group} is the sign group name. To use the global sign group,
+ use an empty string. If {group} is set to '*', then all the
+ groups including the global group are used.
+ The signs in {group} are selected based on the entries in
+ {dict}. The following optional entries in {dict} are
+ supported:
+ buffer buffer name or number. See |bufname()|.
+ id sign identifier
+ If {dict} is not supplied, then all the signs in {group} are
+ removed.
+
+ Returns 0 on success and -1 on failure.
+
+ Examples: >
+ " Remove sign 10 from buffer a.vim
+ call sign_unplace('', {'buffer' : "a.vim", 'id' : 10})
+
+ " Remove sign 20 in group 'g1' from buffer 3
+ call sign_unplace('g1', {'buffer' : 3, 'id' : 20})
+
+ " Remove all the signs in group 'g2' from buffer 10
+ call sign_unplace('g2', {'buffer' : 10})
+
+ " Remove sign 30 in group 'g3' from all the buffers
+ call sign_unplace('g3', {'id' : 30})
+
+ " Remove all the signs placed in buffer 5
+ call sign_unplace('*', {'buffer' : 5})
+
+ " Remove the signs in group 'g4' from all the buffers
+ call sign_unplace('g4')
+
+ " Remove sign 40 from all the buffers
+ call sign_unplace('*', {'id' : 40})
+
+ " Remove all the placed signs from all the buffers
+ call sign_unplace('*')
+<
+sign_unplacelist({list}) *sign_unplacelist()*
+ Remove previously placed signs from one or more buffers. This
+ is similar to the |sign_unplace()| function.
+
+ The {list} argument specifies the List of signs to remove.
+ Each list item is a dict with the following sign attributes:
+ buffer buffer name or number. For the accepted
+ values, see |bufname()|. If not specified,
+ then the specified sign is removed from all
+ the buffers.
+ group sign group name. If not specified or set to an
+ empty string, then the global sign group is
+ used. If set to '*', then all the groups
+ including the global group are used.
+ id sign identifier. If not specified, then all
+ the signs in the specified group are removed.
+
+ Returns a List where an entry is set to 0 if the corresponding
+ sign was successfully removed or -1 on failure.
+
+ Example: >
+ " Remove sign with id 10 from buffer a.vim and sign
+ " with id 20 from buffer b.vim
+ call sign_unplacelist([
+ \ {'id' : 10, 'buffer' : "a.vim"},
+ \ {'id' : 20, 'buffer' : 'b.vim'},
+ \ ])
+<
+
vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 40cd008f7..75071e67c 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -3914,6 +3914,7 @@ E169 message.txt /*E169*
E17 message.txt /*E17*
E170 eval.txt /*E170*
E171 eval.txt /*E171*
+E172 eval.txt /*E172*
E173 message.txt /*E173*
E174 map.txt /*E174*
E175 map.txt /*E175*
@@ -3967,6 +3968,7 @@ E218 autocmd.txt /*E218*
E219 message.txt /*E219*
E22 message.txt /*E22*
E220 message.txt /*E220*
+E221 eval.txt /*E221*
E222 message.txt /*E222*
E223 options.txt /*E223*
E224 map.txt /*E224*
@@ -4683,12 +4685,12 @@ E909 eval.txt /*E909*
E91 options.txt /*E91*
E910 eval.txt /*E910*
E911 eval.txt /*E911*
-E912 eval.txt /*E912*
+E912 channel.txt /*E912*
E913 eval.txt /*E913*
E914 eval.txt /*E914*
E915 channel.txt /*E915*
-E916 eval.txt /*E916*
-E917 eval.txt /*E917*
+E916 channel.txt /*E916*
+E917 channel.txt /*E917*
E918 channel.txt /*E918*
E919 repeat.txt /*E919*
E92 message.txt /*E92*
@@ -4739,14 +4741,14 @@ E960 options.txt /*E960*
E961 cmdline.txt /*E961*
E962 eval.txt /*E962*
E963 eval.txt /*E963*
-E964 eval.txt /*E964*
-E965 eval.txt /*E965*
-E966 eval.txt /*E966*
+E964 textprop.txt /*E964*
+E965 textprop.txt /*E965*
+E966 textprop.txt /*E966*
E967 textprop.txt /*E967*
-E968 eval.txt /*E968*
-E969 eval.txt /*E969*
+E968 textprop.txt /*E968*
+E969 textprop.txt /*E969*
E97 diff.txt /*E97*
-E970 eval.txt /*E970*
+E970 textprop.txt /*E970*
E971 textprop.txt /*E971*
E972 eval.txt /*E972*
E973 eval.txt /*E973*
@@ -5291,19 +5293,20 @@ asin() eval.txt /*asin()*
asm.vim syntax.txt /*asm.vim*
asm68k syntax.txt /*asm68k*
asmh8300.vim syntax.txt /*asmh8300.vim*
+assert-functions testing.txt /*assert-functions*
assert-return eval.txt /*assert-return*
-assert_beeps() eval.txt /*assert_beeps()*
-assert_equal() eval.txt /*assert_equal()*
-assert_equalfile() eval.txt /*assert_equalfile()*
-assert_exception() eval.txt /*assert_exception()*
-assert_fails() eval.txt /*assert_fails()*
-assert_false() eval.txt /*assert_false()*
-assert_inrange() eval.txt /*assert_inrange()*
-assert_match() eval.txt /*assert_match()*
-assert_notequal() eval.txt /*assert_notequal()*
-assert_notmatch() eval.txt /*assert_notmatch()*
-assert_report() eval.txt /*assert_report()*
-assert_true() eval.txt /*assert_true()*
+assert_beeps() testing.txt /*assert_beeps()*
+assert_equal() testing.txt /*assert_equal()*
+assert_equalfile() testing.txt /*assert_equalfile()*
+assert_exception() testing.txt /*assert_exception()*
+assert_fails() testing.txt /*assert_fails()*
+assert_false() testing.txt /*assert_false()*
+assert_inrange() testing.txt /*assert_inrange()*
+assert_match() testing.txt /*assert_match()*
+assert_notequal() testing.txt /*assert_notequal()*
+assert_notmatch() testing.txt /*assert_notmatch()*
+assert_report() testing.txt /*assert_report()*
+assert_true() testing.txt /*assert_true()*
at motion.txt /*at*
atan() eval.txt /*atan()*
atan2() eval.txt /*atan2()*
@@ -5574,24 +5577,24 @@ cc change.txt /*cc*
ceil() eval.txt /*ceil()*
cfilter-plugin quickfix.txt /*cfilter-plugin*
ch.vim syntax.txt /*ch.vim*
-ch_canread() eval.txt /*ch_canread()*
-ch_close() eval.txt /*ch_close()*
-ch_close_in() eval.txt /*ch_close_in()*
-ch_evalexpr() eval.txt /*ch_evalexpr()*
-ch_evalraw() eval.txt /*ch_evalraw()*
-ch_getbufnr() eval.txt /*ch_getbufnr()*
-ch_getjob() eval.txt /*ch_getjob()*
-ch_info() eval.txt /*ch_info()*
-ch_log() eval.txt /*ch_log()*
-ch_logfile() eval.txt /*ch_logfile()*
-ch_open() eval.txt /*ch_open()*
-ch_read() eval.txt /*ch_read()*
-ch_readblob() eval.txt /*ch_readblob()*
-ch_readraw() eval.txt /*ch_readraw()*
-ch_sendexpr() eval.txt /*ch_sendexpr()*
-ch_sendraw() eval.txt /*ch_sendraw()*
-ch_setoptions() eval.txt /*ch_setoptions()*
-ch_status() eval.txt /*ch_status()*
+ch_canread() channel.txt /*ch_canread()*
+ch_close() channel.txt /*ch_close()*
+ch_close_in() channel.txt /*ch_close_in()*
+ch_evalexpr() channel.txt /*ch_evalexpr()*
+ch_evalraw() channel.txt /*ch_evalraw()*
+ch_getbufnr() channel.txt /*ch_getbufnr()*
+ch_getjob() channel.txt /*ch_getjob()*
+ch_info() channel.txt /*ch_info()*
+ch_log() channel.txt /*ch_log()*
+ch_logfile() channel.txt /*ch_logfile()*
+ch_open() channel.txt /*ch_open()*
+ch_read() channel.txt /*ch_read()*
+ch_readblob() channel.txt /*ch_readblob()*
+ch_readraw() channel.txt /*ch_readraw()*
+ch_sendexpr() channel.txt /*ch_sendexpr()*
+ch_sendraw() channel.txt /*ch_sendraw()*
+ch_setoptions() channel.txt /*ch_setoptions()*
+ch_status() channel.txt /*ch_status()*
change-list-jumps motion.txt /*change-list-jumps*
change-name tips.txt /*change-name*
change-tabs change.txt /*change-tabs*
@@ -5626,6 +5629,7 @@ channel-commands channel.txt /*channel-commands*
channel-demo channel.txt /*channel-demo*
channel-drop channel.txt /*channel-drop*
channel-functions usr_41.txt /*channel-functions*
+channel-functions-details channel.txt /*channel-functions-details*
channel-mode channel.txt /*channel-mode*
channel-more channel.txt /*channel-more*
channel-noblock channel.txt /*channel-noblock*
@@ -7363,6 +7367,7 @@ job-err_cb channel.txt /*job-err_cb*
job-err_io channel.txt /*job-err_io*
job-exit_cb channel.txt /*job-exit_cb*
job-functions usr_41.txt /*job-functions*
+job-functions-details channel.txt /*job-functions-details*
job-in_io channel.txt /*job-in_io*
job-noblock channel.txt /*job-noblock*
job-options channel.txt /*job-options*
@@ -7374,12 +7379,12 @@ job-start-nochannel channel.txt /*job-start-nochannel*
job-stoponexit channel.txt /*job-stoponexit*
job-term channel.txt /*job-term*
job-timeout channel.txt /*job-timeout*
-job_getchannel() eval.txt /*job_getchannel()*
-job_info() eval.txt /*job_info()*
-job_setoptions() eval.txt /*job_setoptions()*
-job_start() eval.txt /*job_start()*
-job_status() eval.txt /*job_status()*
-job_stop() eval.txt /*job_stop()*
+job_getchannel() channel.txt /*job_getchannel()*
+job_info() channel.txt /*job_info()*
+job_setoptions() channel.txt /*job_setoptions()*
+job_start() channel.txt /*job_start()*
+job_status() channel.txt /*job_status()*
+job_stop() channel.txt /*job_stop()*
join() eval.txt /*join()*
js_decode() eval.txt /*js_decode()*
js_encode() eval.txt /*js_encode()*
@@ -8036,7 +8041,7 @@ new-search-path version6.txt /*new-search-path*
new-searchpat version6.txt /*new-searchpat*
new-session-files version5.txt /*new-session-files*
new-spell version7.txt /*new-spell*
-new-style-testing eval.txt /*new-style-testing*
+new-style-testing testing.txt /*new-style-testing*
new-tab-pages version7.txt /*new-tab-pages*
new-terminal-window version8.txt /*new-terminal-window*
new-undo-branches version7.txt /*new-undo-branches*
@@ -8084,7 +8089,7 @@ ocaml.vim syntax.txt /*ocaml.vim*
octal eval.txt /*octal*
octal-nrformats options.txt /*octal-nrformats*
octal-number eval.txt /*octal-number*
-old-style-testing eval.txt /*old-style-testing*
+old-style-testing testing.txt /*old-style-testing*
oldfiles-variable eval.txt /*oldfiles-variable*
ole-activation if_ole.txt /*ole-activation*
ole-eval if_ole.txt /*ole-eval*
@@ -8321,16 +8326,16 @@ prompt_setinterrupt() eval.txt /*prompt_setinterrupt()*
prompt_setprompt() eval.txt /*prompt_setprompt()*
promptbuffer-functions usr_41.txt /*promptbuffer-functions*
pronounce intro.txt /*pronounce*
-prop_add() eval.txt /*prop_add()*
-prop_clear() eval.txt /*prop_clear()*
-prop_find() eval.txt /*prop_find()*
-prop_list() eval.txt /*prop_list()*
-prop_remove() eval.txt /*prop_remove()*
-prop_type_add() eval.txt /*prop_type_add()*
-prop_type_change() eval.txt /*prop_type_change()*
-prop_type_delete() eval.txt /*prop_type_delete()*
-prop_type_get() eval.txt /*prop_type_get()*
-prop_type_list() eval.txt /*prop_type_list()*
+prop_add() textprop.txt /*prop_add()*
+prop_clear() textprop.txt /*prop_clear()*
+prop_find() textprop.txt /*prop_find()*
+prop_list() textprop.txt /*prop_list()*
+prop_remove() textprop.txt /*prop_remove()*
+prop_type_add() textprop.txt /*prop_type_add()*
+prop_type_change() textprop.txt /*prop_type_change()*
+prop_type_delete() textprop.txt /*prop_type_delete()*
+prop_type_get() textprop.txt /*prop_type_get()*
+prop_type_list() textprop.txt /*prop_type_list()*
psql ft_sql.txt /*psql*
ptcap.vim syntax.txt /*ptcap.vim*
pterm-mouse options.txt /*pterm-mouse*
@@ -8692,21 +8697,22 @@ showing-menus gui.txt /*showing-menus*
sign-column sign.txt /*sign-column*
sign-commands sign.txt /*sign-commands*
sign-functions usr_41.txt /*sign-functions*
+sign-functions-details sign.txt /*sign-functions-details*
sign-group sign.txt /*sign-group*
sign-identifier sign.txt /*sign-identifier*
sign-intro sign.txt /*sign-intro*
sign-priority sign.txt /*sign-priority*
sign-support sign.txt /*sign-support*
sign.txt sign.txt /*sign.txt*
-sign_define() eval.txt /*sign_define()*
-sign_getdefined() eval.txt /*sign_getdefined()*
-sign_getplaced() eval.txt /*sign_getplaced()*
-sign_jump() eval.txt /*sign_jump()*
-sign_place() eval.txt /*sign_place()*
-sign_placelist() eval.txt /*sign_placelist()*
-sign_undefine() eval.txt /*sign_undefine()*
-sign_unplace() eval.txt /*sign_unplace()*
-sign_unplacelist() eval.txt /*sign_unplacelist()*
+sign_define() sign.txt /*sign_define()*
+sign_getdefined() sign.txt /*sign_getdefined()*
+sign_getplaced() sign.txt /*sign_getplaced()*
+sign_jump() sign.txt /*sign_jump()*
+sign_place() sign.txt /*sign_place()*
+sign_placelist() sign.txt /*sign_placelist()*
+sign_undefine() sign.txt /*sign_undefine()*
+sign_unplace() sign.txt /*sign_unplace()*
+sign_unplacelist() sign.txt /*sign_unplacelist()*
signs sign.txt /*signs*
simple-change change.txt /*simple-change*
simplify() eval.txt /*simplify()*
@@ -9357,29 +9363,32 @@ terminal-window terminal.txt /*terminal-window*
terminal.txt terminal.txt /*terminal.txt*
terminfo term.txt /*terminfo*
termresponse-variable eval.txt /*termresponse-variable*
+test-functions testing.txt /*test-functions*
test-functions usr_41.txt /*test-functions*
-test_alloc_fail() eval.txt /*test_alloc_fail()*
-test_autochdir() eval.txt /*test_autochdir()*
-test_feedinput() eval.txt /*test_feedinput()*
-test_garbagecollect_now() eval.txt /*test_garbagecollect_now()*
-test_garbagecollect_soon() eval.txt /*test_garbagecollect_soon()*
-test_getvalue() eval.txt /*test_getvalue()*
-test_ignore_error() eval.txt /*test_ignore_error()*
-test_null_blob() eval.txt /*test_null_blob()*
-test_null_channel() eval.txt /*test_null_channel()*
-test_null_dict() eval.txt /*test_null_dict()*
-test_null_job() eval.txt /*test_null_job()*
-test_null_list() eval.txt /*test_null_list()*
-test_null_partial() eval.txt /*test_null_partial()*
-test_null_string() eval.txt /*test_null_string()*
-test_option_not_set() eval.txt /*test_option_not_set()*
-test_override() eval.txt /*test_override()*
-test_refcount() eval.txt /*test_refcount()*
-test_scrollbar() eval.txt /*test_scrollbar()*
-test_setmouse() eval.txt /*test_setmouse()*
-test_settime() eval.txt /*test_settime()*
-testing eval.txt /*testing*
+test_alloc_fail() testing.txt /*test_alloc_fail()*
+test_autochdir() testing.txt /*test_autochdir()*
+test_feedinput() testing.txt /*test_feedinput()*
+test_garbagecollect_now() testing.txt /*test_garbagecollect_now()*
+test_garbagecollect_soon() testing.txt /*test_garbagecollect_soon()*
+test_getvalue() testing.txt /*test_getvalue()*
+test_ignore_error() testing.txt /*test_ignore_error()*
+test_null_blob() testing.txt /*test_null_blob()*
+test_null_channel() testing.txt /*test_null_channel()*
+test_null_dict() testing.txt /*test_null_dict()*
+test_null_job() testing.txt /*test_null_job()*
+test_null_list() testing.txt /*test_null_list()*
+test_null_partial() testing.txt /*test_null_partial()*
+test_null_string() testing.txt /*test_null_string()*
+test_option_not_set() testing.txt /*test_option_not_set()*
+test_override() testing.txt /*test_override()*
+test_refcount() testing.txt /*test_refcount()*
+test_scrollbar() testing.txt /*test_scrollbar()*
+test_setmouse() testing.txt /*test_setmouse()*
+test_settime() testing.txt /*test_settime()*
+testing testing.txt /*testing*
+testing-support testing.txt /*testing-support*
testing-variable eval.txt /*testing-variable*
+testing.txt testing.txt /*testing.txt*
tex-cchar syntax.txt /*tex-cchar*
tex-cole syntax.txt /*tex-cole*
tex-conceal syntax.txt /*tex-conceal*
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
new file mode 100644
index 000000000..7692d804c
--- /dev/null
+++ b/runtime/doc/testing.txt
@@ -0,0 +1,317 @@
+*testing.txt* For Vim version 8.1. Last change: 2019 Jul 21
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Testing Vim and Vim script *testing-support*
+
+Expression evaluation is explained in |eval.txt|. This file goes into details
+about writing tests in Vim script. This can be used for testing Vim itself
+and for testing plugins.
+
+1. Testing Vim |testing|
+2. Test functions |test-functions|
+3. Assert funtions |assert-functions|
+
+==============================================================================
+1. Testing Vim *testing*
+
+Vim can be tested after building it, usually with "make test".
+The tests are located in the directory "src/testdir".
+
+There are several types of tests added over time:
+ test33.in oldest, don't add any of these
+ test_something.in old style tests
+ test_something.vim new style tests
+
+ *new-style-testing*
+New tests should be added as new style tests. These use functions such as
+|assert_equal()| to keep the test commands and the expected result in one
+place.
+ *old-style-testing*
+In some cases an old style test needs to be used. E.g. when testing Vim
+without the |+eval| feature.
+
+Find more information in the file src/testdir/README.txt.
+
+==============================================================================
+2. Test functions *test-functions*
+
+test_alloc_fail({id}, {countdown}, {repeat}) *test_alloc_fail()*
+ This is for testing: If the memory allocation with {id} is
+ called, then decrement {countdown}, and when it reaches zero
+ let memory allocation fail {repeat} times. When {repeat} is
+ smaller than one it fails one time.
+
+
+test_autochdir() *test_autochdir()*
+ Set a flag to enable the effect of 'autochdir' before Vim
+ startup has finished.
+
+
+test_feedinput({string}) *test_feedinput()*
+ Characters in {string} are queued for processing as if they
+ were typed by the user. This uses a low level input buffer.
+ This function works only when with |+unix| or GUI is running.
+
+
+test_garbagecollect_now() *test_garbagecollect_now()*
+ Like garbagecollect(), but executed right away. This must
+ only be called directly to avoid any structure to exist
+ internally, and |v:testing| must have been set before calling
+ any function.
+
+
+test_garbagecollect_soon() *test_garbagecollect_soon()*
+ Set the flag to call the garbagecollector as if in the main
+ loop. Only to be used in tests.
+
+
+test_getvalue({name}) *test_getvalue()*
+ Get the value of an internal variable. These values for
+ {name} are supported:
+ need_fileinfo
+
+
+test_ignore_error({expr}) *test_ignore_error()*
+ Ignore any error containing {expr}. A normal message is given
+ instead.
+ This is only meant to be used in tests, where catching the
+ error with try/catch cannot be used (because it skips over
+ following code).
+ {expr} is used literally, not as a pattern.
+ When the {expr} is the string "RESET" then the list of ignored
+ errors is made empty.
+
+
+test_null_blob() *test_null_blob()*
+ Return a |Blob| that is null. Only useful for testing.
+
+
+test_null_channel() *test_null_channel()*
+ Return a |Channel| that is null. Only useful for testing.
+ {only available when compiled with the +channel feature}
+
+
+test_null_dict() *test_null_dict()*
+ Return a |Dict| that is null. Only useful for testing.
+
+
+test_null_job() *test_null_job()*
+ Return a |Job| that is null. Only useful for testing.
+ {only available when compiled with the +job feature}
+
+
+test_null_list() *test_null_list()*
+ Return a |List| that is null. Only useful for testing.
+
+
+test_null_partial() *test_null_partial()*
+ Return a |Partial| that is null. Only useful for testing.
+
+
+test_null_string() *test_null_string()*
+ Return a |String| that is null. Only useful for testing.
+
+
+test_option_not_set({name}) *test_option_not_set()*
+ Reset the flag that indicates option {name} was set. Thus it
+ looks like it still has the default value. Use like this: >
+ set ambiwidth=double
+ call test_option_not_set('ambiwidth')
+< Now the 'ambiwidth' option behaves like it was never changed,
+ even though the value is "double".
+ Only to be used for testing!
+
+
+test_override({name}, {val}) *test_override()*
+ Overrides certain parts of Vim's internal processing to be able
+ to run tests. Only to be used for testing Vim!
+ The override is enabled when {val} is non-zero and removed
+ when {val} is zero.
+ Current supported values for name are:
+
+ name effect when {val} is non-zero ~
+ redraw disable the redrawing() function
+ redraw_flag ignore the RedrawingDisabled flag
+ char_avail disable the char_avail() function
+ starting reset the "starting" variable, see below
+ nfa_fail makes the NFA regexp engine fail to force a
+ fallback to the old engine
+ no_query_mouse do not query the mouse position for "dec"
+ terminals
+ no_wait_return set the "no_wait_return" flag. Not restored
+ with "ALL".
+ ALL clear all overrides ({val} is not used)
+
+ "starting" is to be used when a test should behave like
+ startup was done. Since the tests are run by sourcing a
+ script the "starting" variable is non-zero. This is usually a
+ good thing (tests run faster), but sometimes changes behavior
+ in a way that the test doesn't work properly.
+ When using: >
+ call test_override('starting', 1)
+< The value of "starting" is saved. It is restored by: >
+ call test_override('starting', 0)
+
+
+test_refcount({expr}) *test_refcount()*
+ Return the reference count of {expr}. When {expr} is of a
+ type that does not have a reference count, returns -1. Only
+ to be used for testing.
+
+
+test_scrollbar({which}, {value}, {dragging}) *test_scrollbar()*
+ Pretend using scrollbar {which} to move it to position
+ {value}. {which} can be:
+ left Left scrollbar of the current window
+ right Right scrollbar of the current window
+ hor Horizontal scrollbar
+
+ For the vertical scrollbars {value} can be 1 to the
+ line-count of the buffer. For the horizontal scrollbar the
+ {value} can be between 1 and the maximum line length, assuming
+ 'wrap' is not set.
+
+ When {dragging} is non-zero it's like dragging the scrollbar,
+ otherwise it's like clicking in the scrollbar.
+ Only works when the {which} scrollbar actually exists,
+ obviously only when using the GUI.
+
+
+test_setmouse({row}, {col}) *test_setmouse()*
+ Set the mouse position to be used for the next mouse action.
+ {row} and {col} are one based.
+ For example: >
+ call test_setmouse(4, 20)
+ call feedkeys("\<LeftMouse>", "xt")
+
+
+test_settime({expr}) *test_settime()*
+ Set the time Vim uses internally. Currently only used for
+ timestamps in the history, as they are used in viminfo, and
+ for undo.
+ Using a value of 1 makes Vim not sleep after a warning or
+ error message.
+ {expr} must evaluate to a number. When the value is zero the
+ normal behavior is restored.
+
+==============================================================================
+3. Assert functions *assert-functions*
+
+
+assert_beeps({cmd}) *assert_beeps()*
+ Run {cmd} and add an error message to |v:errors| if it does
+ NOT produce a beep or visual bell.
+ Also see |assert_fails()| and |assert-return|.
+
+ *assert_equal()*
+assert_equal({expected}, {actual} [, {msg}])
+ When {expected} and {actual} are not equal an error message is
+ added to |v:errors| and 1 is returned. Otherwise zero is
+ returned |assert-return|.
+ There is no automatic conversion, the String "4" is different
+ from the Number 4. And the number 4 is different from the
+ Float 4.0. The value of 'ignorecase' is not used here, case
+ always matters.
+ When {msg} is omitted an error in the form "Expected
+ {expected} but got {actual}" is produced.
+ Example: >
+ assert_equal('foo', 'bar')
+< Will result in a string to be added to |v:errors|:
+ test.vim line 12: Expected 'foo' but got 'bar' ~
+
+ *assert_equalfile()*
+assert_equalfile({fname-one}, {fname-two})
+ When the files {fname-one} and {fname-two} do not contain
+ exactly the same text an error message is added to |v:errors|.
+ Also see |assert-return|.
+ When {fname-one} or {fname-two} does not exist the error will
+ mention that.
+ Mainly useful with |terminal-diff|.
+
+assert_exception({error} [, {msg}]) *assert_exception()*
+ When v:exception does not contain the string {error} an error
+ message is added to |v:errors|. Also see |assert-return|.
+ This can be used to assert that a command throws an exception.
+ Using the error number, followed by a colon, avoids problems
+ with translations: >
+ try
+ commandthatfails
+ call assert_false(1, 'command should have failed')
+ catch
+ call assert_exception('E492:')
+ endtry
+
+assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()*
+ Run {cmd} and add an error message to |v:errors| if it does
+ NOT produce an error. Also see |assert-return|.
+ When {error} is given it must match in |v:errmsg|.
+ Note that beeping is not considered an error, and some failing
+ commands only beep. Use |assert_beeps()| for those.
+
+assert_false({actual} [, {msg}]) *assert_false()*
+ When {actual} is not false an error message is added to
+ |v:errors|, like with |assert_equal()|.
+ Also see |assert-return|.
+ A value is false when it is zero. When {actual} is not a
+ number the assert fails.
+ When {msg} is omitted an error in the form
+ "Expected False but got {actual}" is produced.
+
+assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()*
+ This asserts number and |Float| values. When {actual} is lower
+ than {lower} or higher than {upper} an error message is added
+ to |v:errors|. Also see |assert-return|.
+ When {msg} is omitted an error in the form
+ "Expected range {lower} - {upper}, but got {actual}" is
+ produced.
+
+ *assert_match()*
+assert_match({pattern}, {actual} [, {msg}])
+ When {pattern} does not match {actual} an error message is
+ added to |v:errors|. Also see |assert-return|.
+
+ {pattern} is used as with |=~|: The matching is always done
+ like 'magic' was set and 'cpoptions' is empty, no matter what
+ the actual value of 'magic' or 'cpoptions' is.
+
+ {actual} is used as a string, automatic conversion applies.
+ Use "^" and "$" to match with the start and end of the text.
+ Use both to match the whole text.
+
+ When {msg} is omitted an error in the form
+ "Pattern {pattern} does not match {actual}" is produced.
+ Example: >
+ assert_match('^f.*o$', 'foobar')
+< Will result in a string to be added to |v:errors|:
+ test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~
+
+ *assert_notequal()*
+assert_notequal({expected}, {actual} [, {msg}])
+ The opposite of `assert_equal()`: add an error message to
+ |v:errors| when {expected} and {actual} are equal.
+ Also see |assert-return|.
+
+ *assert_notmatch()*
+assert_notmatch({pattern}, {actual} [, {msg}])
+ The opposite of `assert_match()`: add an error message to
+ |v:errors| when {pattern} matches {actual}.
+ Also see |assert-return|.
+
+assert_report({msg}) *assert_report()*
+ Report a test failure directly, using {msg}.
+ Always returns one.
+
+assert_true({actual} [, {msg}]) *assert_true()*
+ When {actual} is not true an error message is added to
+ |v:errors|, like with |assert_equal()|.
+ Also see |assert-return|.
+ A value is TRUE when it is a non-zero number. When {actual}
+ is not a number the assert fails.
+ When {msg} is omitted an error in the form "Expected True but
+ got {actual}" is produced.
+
+
+ vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/textprop.txt b/runtime/doc/textprop.txt
index 8beae9355..185a60b2b 100644
--- a/runtime/doc/textprop.txt
+++ b/runtime/doc/textprop.txt
@@ -1,4 +1,4 @@
-*textprop.txt* For Vim version 8.1. Last change: 2019 Jun 13
+*textprop.txt* For Vim version 8.1. Last change: 2019 Jul 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -116,6 +116,202 @@ prop_list({lnum} [, {props}) text properties in {lnum}
prop_remove({props} [, {lnum} [, {lnum-end}]])
remove a text property
+ *prop_add()* *E965*
+prop_add({lnum}, {col}, {props})
+ Attach a text property at position {lnum}, {col}. {col} is
+ counted in bytes, use one for the first column.
+ If {lnum} is invalid an error is given. *E966*
+ If {col} is invalid an error is given. *E964*
+
+ {props} is a dictionary with these fields:
+ length length of text in bytes, can only be used
+ for a property that does not continue in
+ another line; can be zero
+ end_lnum line number for the end of text
+ end_col column just after the text; not used when
+ "length" is present; when {col} and "end_col"
+ are equal, and "end_lnum" is omitted or equal
+ to {lnum}, this is a zero-width text property
+ bufnr buffer to add the property to; when omitted
+ the current buffer is used
+ id user defined ID for the property; when omitted
+ zero is used
+ type name of the text property type
+ All fields except "type" are optional.
+
+ It is an error when both "length" and "end_lnum" or "end_col"
+ are given. Either use "length" or "end_col" for a property
+ within one line, or use "end_lnum" and "end_col" for a
+ property that spans more than one line.
+ When neither "length" nor "end_col" are given the property
+ will be zero-width. That means it will not be highlighted but
+ will move with the text, as a kind of mark.
+ The property can end exactly at the last character of the
+ text, or just after it. In the last case, if text is appended
+ to the line, the text property size will increase, also when
+ the property type does not have "end_incl" set.
+
+ "type" will first be looked up in the buffer the property is
+ added to. When not found, the global property types are used.
+ If not found an error is given.
+
+ See |text-properties| for information about text properties.
+
+
+prop_clear({lnum} [, {lnum-end} [, {props}]]) *prop_clear()*
+ Remove all text properties from line {lnum}.
+ When {lnum-end} is given, remove all text properties from line
+ {lnum} to {lnum-end} (inclusive).
+
+ When {props} contains a "bufnr" item use this buffer,
+ otherwise use the current buffer.
+
+ See |text-properties| for information about text properties.
+
+ *prop_find()*
+prop_find({props} [, {direction}])
+ NOT IMPLEMENTED YET
+ Search for a text property as specified with {props}:
+ id property with this ID
+ type property with this type name
+ bufnr buffer to search in; when present a
+ start position with "lnum" and "col"
+ must be given; when omitted the
+ current buffer is used
+ lnum start in this line (when omitted start
+ at the cursor)
+ col start at this column (when omitted
+ and "lnum" is given: use column 1,
+ otherwise start at the cursor)
+ skipstart do not look for a match at the start
+ position
+
+ {direction} can be "f" for forward and "b" for backward. When
+ omitted forward search is performed.
+
+ If a match is found then a Dict is returned with the entries
+ as with prop_list(), and additionally an "lnum" entry.
+ If no match is found then an empty Dict is returned.
+
+ See |text-properties| for information about text properties.
+
+
+prop_list({lnum} [, {props}]) *prop_list()*
+ Return a List with all text properties in line {lnum}.
+
+ When {props} contains a "bufnr" item, use this buffer instead
+ of the current buffer.
+
+ The properties are ordered by starting column and priority.
+ Each property is a Dict with these entries:
+ col starting column
+ length length in bytes, one more if line break is
+ included
+ id property ID
+ type name of the property type, omitted if
+ the type was deleted
+ start when TRUE property starts in this line
+ end when TRUE property ends in this line
+
+ When "start" is zero the property started in a previous line,
+ the current one is a continuation.
+ When "end" is zero the property continues in the next line.
+ The line break after this line is included.
+
+ See |text-properties| for information about text properties.
+
+
+ *prop_remove()* *E968*
+prop_remove({props} [, {lnum} [, {lnum-end}]])
+ Remove a matching text property from line {lnum}. When
+ {lnum-end} is given, remove matching text properties from line
+ {lnum} to {lnum-end} (inclusive).
+ When {lnum} is omitted remove matching text properties from
+ all lines.
+
+ {props} is a dictionary with these fields:
+ id remove text properties with this ID
+ type remove text properties with this type name
+ bufnr use this buffer instead of the current one
+ all when TRUE remove all matching text properties,
+ not just the first one
+ A property matches when either "id" or "type" matches.
+ If buffer "bufnr" does not exist you get an error message.
+ If buffer "bufnr" is not loaded then nothing happens.
+
+ Returns the number of properties that were removed.
+
+ See |text-properties| for information about text properties.
+
+
+prop_type_add({name}, {props}) *prop_type_add()* *E969* *E970*
+ Add a text property type {name}. If a property type with this
+ name already exists an error is given.
+ {props} is a dictionary with these optional fields:
+ bufnr define the property only for this buffer; this
+ avoids name collisions and automatically
+ clears the property types when the buffer is
+ deleted.
+ highlight name of highlight group to use
+ priority when a character has multiple text
+ properties the one with the highest priority
+ will be used; negative values can be used, the
+ default priority is zero
+ combine when TRUE combine the highlight with any
+ syntax highlight; when omitted or FALSE syntax
+ highlight will not be used
+ start_incl when TRUE inserts at the start position will
+ be included in the text property
+ end_incl when TRUE inserts at the end position will be
+ included in the text property
+
+ See |text-properties| for information about text properties.
+
+
+prop_type_change({name}, {props}) *prop_type_change()*
+ Change properties of an existing text property type. If a
+ property with this name does not exist an error is given.
+ The {props} argument is just like |prop_type_add()|.
+
+ See |text-properties| for information about text properties.
+
+
+prop_type_delete({name} [, {props}]) *prop_type_delete()*
+ Remove the text property type {name}. When text properties
+ using the type {name} are still in place, they will not have
+ an effect and can no longer be removed by name.
+
+ {props} can contain a "bufnr" item. When it is given, delete
+ a property type from this buffer instead of from the global
+ property types.
+
+ When text property type {name} is not found there is no error.
+
+ See |text-properties| for information about text properties.
+
+
+prop_type_get([{name} [, {props}]) *prop_type_get()*
+ Returns the properties of property type {name}. This is a
+ dictionary with the same fields as was given to
+ prop_type_add().
+ When the property type {name} does not exist, an empty
+ dictionary is returned.
+
+ {props} can contain a "bufnr" item. When it is given, use
+ this buffer instead of the global property types.
+
+ See |text-properties| for information about text properties.
+
+
+prop_type_list([{props}]) *prop_type_list()*
+ Returns a list with all property type names.
+
+ {props} can contain a "bufnr" item. When it is given, use
+ this buffer instead of the global property types.
+
+ See |text-properties| for information about text properties.
+
+
==============================================================================
3. When text changes *text-prop-changes*
diff --git a/src/version.c b/src/version.c
index afdefb270..a1d68d8b1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -778,6 +778,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1726,
+/**/
1725,
/**/
1724,