aboutsummaryrefslogtreecommitdiff
path: root/runtime/doc
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2018-03-28 21:52:06 -0400
committerJames McCoy <jamessan@jamessan.com>2018-03-28 21:54:39 -0400
commit79f9c2d9c650ceab27cdc6707fd6d7fa1de29fc1 (patch)
tree4e0589d75801f3ff6a9678f84f5009102766661e /runtime/doc
parent4403864da3c48412595d439f36458d1e6ccfc49f (diff)
parent3f3de9b1a95d273463a87516365510dbffcaf3d2 (diff)
downloadrneovim-79f9c2d9c650ceab27cdc6707fd6d7fa1de29fc1.tar.gz
rneovim-79f9c2d9c650ceab27cdc6707fd6d7fa1de29fc1.tar.bz2
rneovim-79f9c2d9c650ceab27cdc6707fd6d7fa1de29fc1.zip
Merge branch 'master' into yagebu/option-fixes
Diffstat (limited to 'runtime/doc')
-rw-r--r--runtime/doc/api.txt297
-rw-r--r--runtime/doc/arabic.txt26
-rw-r--r--runtime/doc/autocmd.txt79
-rw-r--r--runtime/doc/change.txt6
-rw-r--r--runtime/doc/channel.txt172
-rw-r--r--runtime/doc/cmdline.txt20
-rw-r--r--runtime/doc/debug.txt2
-rw-r--r--runtime/doc/deprecated.txt14
-rw-r--r--runtime/doc/develop.txt76
-rw-r--r--runtime/doc/diff.txt10
-rw-r--r--runtime/doc/digraph.txt5
-rw-r--r--runtime/doc/editing.txt35
-rw-r--r--runtime/doc/eval.txt1077
-rw-r--r--runtime/doc/filetype.txt22
-rw-r--r--runtime/doc/fold.txt10
-rw-r--r--runtime/doc/ft_ada.txt2
-rw-r--r--runtime/doc/ft_rust.txt237
-rw-r--r--runtime/doc/gui.txt29
-rw-r--r--runtime/doc/help.txt8
-rw-r--r--runtime/doc/helphelp.txt9
-rw-r--r--runtime/doc/howto.txt96
-rw-r--r--runtime/doc/if_cscop.txt214
-rw-r--r--runtime/doc/if_lua.txt126
-rw-r--r--runtime/doc/if_pyth.txt2
-rw-r--r--runtime/doc/if_ruby.txt4
-rw-r--r--runtime/doc/indent.txt19
-rw-r--r--runtime/doc/index.txt42
-rw-r--r--runtime/doc/insert.txt23
-rw-r--r--runtime/doc/intro.txt41
-rw-r--r--runtime/doc/job_control.txt175
-rw-r--r--runtime/doc/map.txt74
-rw-r--r--runtime/doc/mbyte.txt2
-rw-r--r--runtime/doc/message.txt18
-rw-r--r--runtime/doc/mlang.txt3
-rw-r--r--runtime/doc/motion.txt5
-rw-r--r--runtime/doc/msgpack_rpc.txt234
-rw-r--r--runtime/doc/nvim.txt4
-rw-r--r--runtime/doc/nvim_terminal_emulator.txt46
-rw-r--r--runtime/doc/options.txt285
-rw-r--r--runtime/doc/os_win32.txt179
-rw-r--r--runtime/doc/pattern.txt19
-rw-r--r--runtime/doc/pi_health.txt104
-rw-r--r--runtime/doc/pi_matchit.txt7
-rw-r--r--runtime/doc/print.txt66
-rw-r--r--runtime/doc/provider.txt55
-rw-r--r--runtime/doc/quickfix.txt65
-rw-r--r--runtime/doc/quickref.txt7
-rw-r--r--runtime/doc/recover.txt2
-rw-r--r--runtime/doc/remote.txt5
-rw-r--r--runtime/doc/remote_plugin.txt2
-rw-r--r--runtime/doc/repeat.txt2
-rw-r--r--runtime/doc/russian.txt2
-rw-r--r--runtime/doc/scroll.txt4
-rw-r--r--runtime/doc/sign.txt2
-rw-r--r--runtime/doc/spell.txt8
-rw-r--r--runtime/doc/starting.txt107
-rw-r--r--runtime/doc/syntax.txt78
-rw-r--r--runtime/doc/tabpage.txt2
-rw-r--r--runtime/doc/tagsrch.txt3
-rw-r--r--runtime/doc/term.txt258
-rw-r--r--runtime/doc/tips.txt12
-rw-r--r--runtime/doc/ui.txt343
-rw-r--r--runtime/doc/undo.txt2
-rw-r--r--runtime/doc/usr_02.txt4
-rw-r--r--runtime/doc/usr_03.txt4
-rw-r--r--runtime/doc/usr_07.txt8
-rw-r--r--runtime/doc/usr_08.txt2
-rw-r--r--runtime/doc/usr_09.txt18
-rw-r--r--runtime/doc/usr_12.txt2
-rw-r--r--runtime/doc/usr_41.txt11
-rw-r--r--runtime/doc/usr_44.txt2
-rw-r--r--runtime/doc/various.txt57
-rw-r--r--runtime/doc/vi_diff.txt2
-rw-r--r--runtime/doc/vim_diff.txt138
-rw-r--r--runtime/doc/visual.txt11
-rw-r--r--runtime/doc/windows.txt37
76 files changed, 3181 insertions, 1998 deletions
diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt
index ebc2a40561..f828f2cdc1 100644
--- a/runtime/doc/api.txt
+++ b/runtime/doc/api.txt
@@ -7,11 +7,11 @@
Nvim API *API* *api*
Nvim exposes a powerful API that can be used by plugins and external processes
-via |msgpack-rpc|, Lua and VimL (|eval-api|).
+via |RPC|, |Lua| and VimL (|eval-api|).
Applications can also embed libnvim to work with the C API directly.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
API Types *api-types*
@@ -48,7 +48,8 @@ version.api_compatible API is backwards-compatible with this level
version.api_prerelease Declares the current API level as unstable >
(version.api_prerelease && fn.since == version.api_level)
functions API function signatures
-ui_events UI event signatures |rpc-remote-ui|
+ui_events UI event signatures |ui|
+ui_options Supported |ui-options|
{fn}.since API level where function {fn} was introduced
{fn}.deprecated_since API level where function {fn} was deprecated
types Custom handle types defined by Nvim
@@ -60,8 +61,7 @@ External programs ("clients") can use the metadata to discover the |rpc-api|.
API contract *api-contract*
The API is made of functions and events. Clients call functions like those
-described at |api-global|, and may "attach" in order to receive rich events,
-described at |rpc-remote-ui|.
+described at |api-global|, and may "attach" to receive rich |ui-events|.
As Nvim develops, its API may change only according the following "contract":
@@ -135,6 +135,26 @@ nvim_command({command}) *nvim_command()*
Parameters:~
{command} Ex-command string
+nvim_get_hl_by_name({name}, {rgb}) *nvim_get_hl_by_name()*
+ Gets a highlight definition by name.
+
+ Parameters:~
+ {name} Highlight group name
+ {rgb} Export RGB colors
+
+ Return:~
+ Highlight definition map
+
+nvim_get_hl_by_id({hl_id}, {rgb}) *nvim_get_hl_by_id()*
+ Gets a highlight definition by id. |hlID()|
+
+ Parameters:~
+ {hl_id} Highlight id as returned by |hlID()|
+ {rgb} Export RGB colors
+
+ Return:~
+ Highlight definition map
+
nvim_feedkeys({keys}, {mode}, {escape_csi}) *nvim_feedkeys()*
Passes input keys to Nvim. On VimL error: Does not fail, but
updates v:errmsg.
@@ -151,7 +171,11 @@ nvim_input({keys}) *nvim_input()*
Unlike `nvim_feedkeys`, this uses a lower-level input buffer
and the call is not deferred. This is the most reliable way to
- emulate real user input.
+ send real user input.
+
+ Note:
+ |keycodes| like <CR> are translated, so "<" is special. To
+ input a literal "<", send <LT>.
Attributes:~
{async}
@@ -165,7 +189,16 @@ nvim_input({keys}) *nvim_input()*
*nvim_replace_termcodes()*
nvim_replace_termcodes({str}, {from_part}, {do_lt}, {special})
- Replaces any terminal codes with the internal representation
+ Replaces terminal codes and |keycodes| (<CR>, <Esc>, ...) in a
+ string with the internal representation.
+
+ Parameters:~
+ {str} String to be converted.
+ {from_part} Legacy Vim parameter. Usually true.
+ {do_lt} Also translate <lt>. Ignored if `special` is
+ false.
+ {special} Replace |keycodes|, e.g. <CR> becomes a "\n"
+ char.
nvim_command_output({str}) *nvim_command_output()*
TODO: Documentation
@@ -182,8 +215,10 @@ nvim_eval({expr}) *nvim_eval()*
Evaluation result or expanded object
nvim_call_function({fname}, {args}) *nvim_call_function()*
- Calls a VimL function with the given arguments. On VimL error:
- Returns a generic error; v:errmsg is not updated.
+ Calls a VimL function with the given arguments
+
+ On VimL error: Returns a generic error; v:errmsg is not
+ updated.
Parameters:~
{fname} Function to call
@@ -192,7 +227,21 @@ nvim_call_function({fname}, {args}) *nvim_call_function()*
Return:~
Result of the function call
-nvim_strwidth({str}) *nvim_strwidth()*
+nvim_execute_lua({code}, {args}) *nvim_execute_lua()*
+ Execute lua code. Parameters (if any) are available as `...`
+ inside the chunk. The chunk can return a value.
+
+ Only statements are executed. To evaluate an expression,
+ prefix it with `return`: return my_function(...)
+
+ Parameters:~
+ {code} lua code to execute
+ {args} Arguments to the code
+
+ Return:~
+ Return value of lua code if present or NIL.
+
+nvim_strwidth({text}) *nvim_strwidth()*
Calculates the number of display cells occupied by `text`.
<Tab> counts as one cell.
@@ -281,20 +330,24 @@ nvim_set_option({name}, {value}) *nvim_set_option()*
{value} New option value
nvim_out_write({str}) *nvim_out_write()*
- Writes a message to vim output buffer
+ Writes a message to the Vim output buffer. Does not append
+ "\n", the message is buffered (won't display) until a linefeed
+ is written.
Parameters:~
{str} Message
nvim_err_write({str}) *nvim_err_write()*
- Writes a message to vim error buffer
+ Writes a message to the Vim error buffer. Does not append
+ "\n", the message is buffered (won't display) until a linefeed
+ is written.
Parameters:~
{str} Message
nvim_err_writeln({str}) *nvim_err_writeln()*
- Writes a message to vim error buffer. Appends a linefeed to
- ensure all contents are written.
+ Writes a message to the Vim error buffer. Appends "\n", so the
+ buffer is flushed (and displayed).
Parameters:~
{str} Message
@@ -315,7 +368,7 @@ nvim_set_current_buf({buffer}) *nvim_set_current_buf()*
Sets the current buffer
Parameters:~
- {id} Buffer handle
+ {buffer} Buffer handle
nvim_list_wins() *nvim_list_wins()*
Gets the current list of window handles
@@ -333,7 +386,7 @@ nvim_set_current_win({window}) *nvim_set_current_win()*
Sets the current window
Parameters:~
- {handle} Window handle
+ {window} Window handle
nvim_list_tabpages() *nvim_list_tabpages()*
Gets the current list of tabpage handles
@@ -351,7 +404,7 @@ nvim_set_current_tabpage({tabpage}) *nvim_set_current_tabpage()*
Sets the current tabpage
Parameters:~
- {handle} Tabpage handle
+ {tabpage} Tabpage handle
nvim_subscribe({event}) *nvim_subscribe()*
Subscribes to event broadcasts
@@ -372,18 +425,32 @@ nvim_get_color_map() *nvim_get_color_map()*
TODO: Documentation
nvim_get_mode() *nvim_get_mode()*
- Gets the current mode.
- mode: Mode string. |mode()|
- blocking: true if Nvim is waiting for input.
+ Gets the current mode. |mode()| "blocking" is true if Nvim is
+ waiting for input.
+
+ Return:~
+ Dictionary { "mode": String, "blocking": Boolean }
Attributes:~
{async}
+nvim_get_keymap({mode}) *nvim_get_keymap()*
+ Gets a list of dictionaries describing global (non-buffer)
+ mappings. The "buffer" key in the returned dictionary is
+ always zero.
+
+ Parameters:~
+ {mode} Mode short-name ("n", "i", "v", ...)
+
Return:~
- Dictionary { "mode": String, "blocking": Boolean }
+ Array of maparg()-like dictionaries describing mappings
nvim_get_api_info() *nvim_get_api_info()*
- TODO: Documentation
+ Returns a 2-tuple (Array), where item 0 is the current channel
+ id and item 1 is the |api-metadata| map (Dictionary).
+
+ Return:~
+ 2-tuple [{channel-id}, {api-metadata}]
Attributes:~
{async}
@@ -414,6 +481,132 @@ nvim_call_atomic({calls}) *nvim_call_atomic()*
error ocurred, the values from all preceding calls will
still be returned.
+ *nvim_parse_expression()*
+nvim_parse_expression({expr}, {flags}, {highlight})
+ Parse a VimL expression
+
+ Attributes:~
+ {async}
+
+ Parameters:~
+ {expr} Expression to parse. Is always treated as a
+ single line.
+ {flags} Flags: - "m" if multiple expressions in a
+ row are allowed (only the first one will be
+ parsed), - "E" if EOC tokens are not allowed
+ (determines whether they will stop parsing
+ process or be recognized as an
+ operator/space, though also yielding an
+ error). - "l" when needing to start parsing
+ with lvalues for ":let" or ":for". Common
+ flag sets: - "m" to parse like for ":echo". -
+ "E" to parse like for "<C-r>=". - empty
+ string for ":call". - "lm" to parse for
+ ":let".
+ {highlight} If true, return value will also include
+ "highlight" key containing array of 4-tuples
+ (arrays) (Integer, Integer, Integer, String),
+ where first three numbers define the
+ highlighted region and represent line,
+ starting column and ending column (latter
+ exclusive: one should highlight region
+ [start_col, end_col)).
+
+ Return:~
+ AST: top-level dictionary with these keys: "error":
+ Dictionary with error, present only if parser saw some
+ error. Contains the following keys: "message": String,
+ error message in printf format, translated. Must contain
+ exactly one "%.*s". "arg": String, error message argument.
+ "len": Amount of bytes successfully parsed. With flags
+ equal to "" that should be equal to the length of expr
+ string. @note: “Sucessfully parsed” here means
+ “participated in AST creation”, not “till the first
+ error”. "ast": AST, either nil or a dictionary with these
+ keys: "type": node type, one of the value names from
+ ExprASTNodeType stringified without "kExprNode" prefix.
+ "start": a pair [line, column] describing where node is
+ “started” where "line" is always 0 (will not be 0 if you
+ will be using nvim_parse_viml() on e.g. ":let", but that
+ is not present yet). Both elements are Integers. "len":
+ “length” of the node. This and "start" are there for
+ debugging purposes primary (debugging parser and providing
+ debug information). "children": a list of nodes described
+ in top/"ast". There always is zero, one or two children,
+ key will not be present if node has no children. Maximum
+ number of children may be found in node_maxchildren array.
+ Local values (present only for certain nodes): "scope": a
+ single Integer, specifies scope for "Option" and
+ "PlainIdentifier" nodes. For "Option" it is one of
+ ExprOptScope values, for "PlainIdentifier" it is one of
+ ExprVarScope values. "ident": identifier (without scope,
+ if any), present for "Option", "PlainIdentifier",
+ "PlainKey" and "Environment" nodes. "name": Integer,
+ register name (one character) or -1. Only present for
+ "Register" nodes. "cmp_type": String, comparison type, one
+ of the value names from ExprComparisonType, stringified
+ without "kExprCmp" prefix. Only present for "Comparison"
+ nodes. "ccs_strategy": String, case comparison strategy,
+ one of the value names from ExprCaseCompareStrategy,
+ stringified without "kCCStrategy" prefix. Only present for
+ "Comparison" nodes. "augmentation": String, augmentation
+ type for "Assignment" nodes. Is either an empty string,
+ "Add", "Subtract" or "Concat" for "=", "+=", "-=" or ".="
+ respectively. "invert": Boolean, true if result of
+ comparison needs to be inverted. Only present for
+ "Comparison" nodes. "ivalue": Integer, integer value for
+ "Integer" nodes. "fvalue": Float, floating-point value for
+ "Float" nodes. "svalue": String, value for
+ "SingleQuotedString" and "DoubleQuotedString" nodes.
+
+nvim__id({obj}) *nvim__id()*
+ Returns object given as argument
+
+ This API function is used for testing. One should not rely on
+ its presence in plugins.
+
+ Parameters:~
+ {obj} Object to return.
+
+ Return:~
+ its argument.
+
+nvim__id_array({arr}) *nvim__id_array()*
+ Returns array given as argument
+
+ This API function is used for testing. One should not rely on
+ its presence in plugins.
+
+ Parameters:~
+ {arr} Array to return.
+
+ Return:~
+ its argument.
+
+nvim__id_dictionary({dct}) *nvim__id_dictionary()*
+ Returns dictionary given as argument
+
+ This API function is used for testing. One should not rely on
+ its presence in plugins.
+
+ Parameters:~
+ {dct} Dictionary to return.
+
+ Return:~
+ its argument.
+
+nvim__id_float({flt}) *nvim__id_float()*
+ Returns floating-point value given as argument
+
+ This API function is used for testing. One should not rely on
+ its presence in plugins.
+
+ Parameters:~
+ {flt} Value to return.
+
+ Return:~
+ its argument.
+
==============================================================================
Buffer Functions *api-buffer*
@@ -492,6 +685,18 @@ nvim_buf_get_changedtick({buffer}) *nvim_buf_get_changedtick()*
Return:~
b:changedtickvalue.
+nvim_buf_get_keymap({buffer}, {mode}) *nvim_buf_get_keymap()*
+ Gets a list of dictionaries describing buffer-local mappings.
+ The "buffer" key in the returned dictionary reflects the
+ buffer handle where the mapping is present.
+
+ Parameters:~
+ {mode} Mode short-name ("n", "i", "v", ...)
+ {buffer} Buffer handle
+
+ Return:~
+ Array of maparg()-like dictionaries describing mappings
+
nvim_buf_set_var({buffer}, {name}, {value}) *nvim_buf_set_var()*
Sets a buffer-scoped (b:) variable
@@ -567,24 +772,24 @@ nvim_buf_add_highlight({buffer}, {src_id}, {hl_group}, {line},
{col_start}, {col_end})
Adds a highlight to buffer.
- This can be used for plugins which dynamically generate
- highlights to a buffer (like a semantic highlighter or
- linter). The function adds a single highlight to a buffer.
- Unlike matchaddpos() highlights follow changes to line
- numbering (as lines are inserted/removed above the highlighted
- line), like signs and marks do.
-
- "src_id" is useful for batch deletion/updating of a set of
- highlights. When called with src_id = 0, an unique source id
- is generated and returned. Succesive calls can pass in it as
- "src_id" to add new highlights to the same source group. All
- highlights in the same group can then be cleared with
- nvim_buf_clear_highlight. If the highlight never will be
- manually deleted pass in -1 for "src_id".
-
- If "hl_group" is the empty string no highlight is added, but a
- new src_id is still returned. This is useful for an external
- plugin to synchrounously request an unique src_id at
+ Useful for plugins that dynamically generate highlights to a
+ buffer (like a semantic highlighter or linter). The function
+ adds a single highlight to a buffer. Unlike matchaddpos()
+ highlights follow changes to line numbering (as lines are
+ inserted/removed above the highlighted line), like signs and
+ marks do.
+
+ `src_id` is useful for batch deletion/updating of a set of
+ highlights. When called with `src_id = 0`, an unique source id
+ is generated and returned. Successive calls can pass that
+ `src_id` to associate new highlights with the same source
+ group. All highlights in the same group can be cleared with
+ `nvim_buf_clear_highlight`. If the highlight never will be
+ manually deleted, pass `src_id = -1`.
+
+ If `hl_group` is the empty string no highlight is added, but a
+ new `src_id` is still returned. This is useful for an external
+ plugin to synchrounously request an unique `src_id` at
initialization, and later asynchronously add and clear
highlights in response to buffer changes.
@@ -593,10 +798,11 @@ nvim_buf_add_highlight({buffer}, {src_id}, {hl_group}, {line},
{src_id} Source group to use or 0 to use a new group,
or -1 for ungrouped highlight
{hl_group} Name of the highlight group to use
- {line} Line to highlight
- {col_start} Start of range of columns to highlight
- {col_end} End of range of columns to highlight, or -1
- to highlight to end of line
+ {line} Line to highlight (zero-indexed)
+ {col_start} Start of (byte-indexed) column range to
+ highlight
+ {col_end} End of (byte-indexed) column range to
+ highlight, or -1 to highlight to end of line
Return:~
The src_id that was used
@@ -830,9 +1036,6 @@ nvim_tabpage_is_valid({tabpage}) *nvim_tabpage_is_valid()*
==============================================================================
UI Functions *api-ui*
-remote_ui_disconnect() *remote_ui_disconnect()*
- TODO: Documentation
-
nvim_ui_attach({width}, {height}, {options}) *nvim_ui_attach()*
TODO: Documentation
diff --git a/runtime/doc/arabic.txt b/runtime/doc/arabic.txt
index 3f30d7b5bc..07350083c6 100644
--- a/runtime/doc/arabic.txt
+++ b/runtime/doc/arabic.txt
@@ -36,7 +36,7 @@ the user interface remains the standard Vi interface.
Highlights
----------
-o Editing left-to-right files as in the original VIM hasn't changed.
+o Editing left-to-right files as in the original Vim hasn't changed.
o Viewing and editing files in right-to-left windows. File
orientation is per window, so it is possible to view the same
@@ -46,7 +46,7 @@ o No special terminal with right-to-left capabilities is required.
The right-to-left changes are completely hardware independent.
Only Arabic fonts are necessary.
-o Compatible with the original VIM. Almost all features work in
+o Compatible with the original Vim. Almost all features work in
right-to-left mode (there are liable to be bugs).
o Changing keyboard mapping and reverse insert modes using a single
@@ -60,14 +60,14 @@ o While in Arabic mode, numbers are entered from left to right. Upon
o Arabic keymapping on the command line in reverse insert mode.
-o Proper Bidirectional functionality is possible given VIM is
+o Proper Bidirectional functionality is possible given Vim is
started within a Bidi capable terminal emulator.
Arabic Fonts *arabicfonts*
------------
-VIM requires monospaced fonts of which there are many out there.
+Vim requires monospaced fonts of which there are many out there.
Arabic requires ISO-8859-6 as well as Presentation Form-B fonts
(without Form-B, Arabic will _NOT_ be usable). It is highly
recommended that users search for so-called 'ISO-10646-1' fonts.
@@ -90,13 +90,13 @@ o Installation of fonts for X Window systems (Unix/Linux)
Usage
-----
-Prior to the actual usage of Arabic within VIM, a number of settings
+Prior to the actual usage of Arabic within Vim, a number of settings
need to be accounted for and invoked.
o Setting the Arabic fonts
- + For VIM GUI set the 'guifont' to your_ARABIC_FONT. This is done
- by entering the following command in the VIM window.
+ + For Vim GUI set the 'guifont' to your_ARABIC_FONT. This is done
+ by entering the following command in the Vim window.
>
:set guifont=your_ARABIC_FONT
<
@@ -109,7 +109,7 @@ o Setting the Arabic fonts
you can include ':set guifont=your_ARABIC_FONT' to your vimrc
file.
- + Under the X Window environment, you can also start VIM with
+ + Under the X Window environment, you can also start Vim with
'-fn your_ARABIC_FONT' option.
o Setting the appropriate character Encoding
@@ -131,11 +131,11 @@ o Setting the appropriate character Encoding
o Enable Arabic settings [short-cut]
In order to simplify and streamline things, you can either invoke
- VIM with the command-line option,
+ Vim with the command-line option,
% vim -A my_utf8_arabic_file ...
- or enable 'arabic' via the following command within VIM
+ or enable 'arabic' via the following command within Vim
>
:set arabic
<
@@ -196,7 +196,7 @@ o Enable Arabic settings [short-cut]
+ Arabic deletion of a combined pair character
- By default VIM has the 'delcombine' option disabled. This option
+ By default Vim has the 'delcombine' option disabled. This option
allows the deletion of ALEF in a LAM_ALEF (LAA) combined character
and still retain the LAM (i.e. it reverts to treating the combined
character as its natural two characters form -- this also pertains
@@ -255,7 +255,7 @@ o Enable Arabic settings [short-cut]
Keymap/Keyboard *arabickeymap*
---------------
-The character/letter encoding used in VIM is the standard UTF-8.
+The character/letter encoding used in Vim is the standard UTF-8.
It is widely discouraged that any other encoding be used or even
attempted.
@@ -288,7 +288,7 @@ o Keyboard
Restrictions
------------
-o VIM in its GUI form does not currently support Bi-directionality
+o Vim in its GUI form does not currently support Bi-directionality
(i.e. the ability to see both Arabic and Latin intermixed within
the same line).
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 2a98d08c4e..9a04bf2824 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -8,7 +8,7 @@ Automatic commands *autocommand*
For a basic explanation, see section |40.3| in the user manual.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *autocmd-intro*
@@ -55,7 +55,14 @@ Note: The ":autocmd" command can only be followed by another command when the
'|' appears before {cmd}. This works: >
:augroup mine | au! BufRead | augroup END
But this sees "augroup" as part of the defined command: >
+ :augroup mine | au! BufRead * | augroup END
:augroup mine | au BufRead * set tw=70 | augroup END
+Instead you can put the group name into the command: >
+ :au! mine BufRead *
+ :au mine BufRead * set tw=70
+Or use `:execute`: >
+ :augroup mine | exe "au! BufRead *" | augroup END
+ :augroup mine | exe "au BufRead * set tw=70" | augroup END
Note that special characters (e.g., "%", "<cword>") in the ":autocmd"
arguments are not expanded when the autocommand is defined. These will be
@@ -252,13 +259,12 @@ Name triggered by ~
|BufNew| just after creating a new buffer
|SwapExists| detected an existing swap file
-|TermOpen| when a terminal buffer is starting
-|TermClose| when a terminal buffer ends
+|TermOpen| when a terminal job starts
+|TermClose| when a terminal job ends
Options
|FileType| when the 'filetype' option has been set
|Syntax| when the 'syntax' option has been set
-|TermChanged| after the value of 'term' has changed
|OptionSet| after setting any option
Startup and exit
@@ -303,6 +309,8 @@ Name triggered by ~
|TabNew| when creating a new tab page
|TabNewEntered| after entering a new tab page
|TabClosed| after closing a tab page
+|CmdlineEnter| after entering cmdline mode
+|CmdlineLeave| before leaving cmdline mode
|CmdwinEnter| after entering the command-line window
|CmdwinLeave| before leaving the command-line window
@@ -485,6 +493,28 @@ CmdUndefined When a user command is used but it isn't
command is defined. An alternative is to
always define the user command and have it
invoke an autoloaded function. See |autoload|.
+ *CmdlineEnter*
+CmdlineEnter After moving the cursor to the command line,
+ where the user can type a command or search
+ string.
+ <afile> is set to a single character,
+ indicating the type of command-line.
+ |cmdline-char|
+ Sets these |v:event| keys:
+ cmdlevel
+ cmdtype
+ *CmdlineLeave*
+CmdlineLeave Before leaving the command line.
+ <afile> is set to a single character,
+ indicating the type of command-line.
+ |cmdline-char|
+ Sets these |v:event| keys:
+ abort (mutable)
+ cmdlevel
+ cmdtype
+ Note: `abort` can only be changed from false
+ to true. An autocmd cannot execute an already
+ aborted cmdline by changing it to false.
*CmdwinEnter*
CmdwinEnter After entering the command-line window.
Useful for setting options specifically for
@@ -605,7 +635,7 @@ FileChangedShell When Vim notices that the modification time of
|timestamp|
Mostly triggered after executing a shell
command, but also with a |:checktime| command
- or when Gvim regains input focus.
+ or when gvim regains input focus.
This autocommand is triggered for each changed
file. It is not used when 'autoread' is set
and the buffer was not changed. If a
@@ -616,7 +646,7 @@ FileChangedShell When Vim notices that the modification time of
to tell Vim what to do next.
NOTE: When this autocommand is executed, the
current buffer "%" may be different from the
- buffer that was changed "<afile>".
+ buffer that was changed, which is in "<afile>".
NOTE: The commands must not change the current
buffer, jump to another buffer or delete a
buffer. *E246* *E811*
@@ -643,7 +673,8 @@ FileType When the 'filetype' option has been set. The
pattern is matched against the filetype.
<afile> can be used for the name of the file
where this option was set, and <amatch> for
- the new value of 'filetype'.
+ the new value of 'filetype'. Navigating to
+ another window or buffer is not allowed.
See |filetypes|.
*FileWriteCmd*
FileWriteCmd Before writing to a file, when not writing the
@@ -901,26 +932,20 @@ TabEnter Just after entering a tab page. |tab-page|
TabLeave Just before leaving a tab page. |tab-page|
A WinLeave event will have been triggered
first.
- {Nvim} *TabNew*
+ *TabNew*
TabNew When creating a new tab page. |tab-page|
After WinEnter and before TabEnter.
- {Nvim} *TabNewEntered*
+ *TabNewEntered*
TabNewEntered After entering a new tab page. |tab-page|
After BufEnter.
- {Nvim} *TabClosed*
+ *TabClosed*
TabClosed After closing a tab page. <afile> can be used
for the tab page number.
- *TermChanged*
-TermChanged After the value of 'term' has changed. Useful
- for re-loading the syntax file to update the
- colors, fonts and other terminal-dependent
- settings. Executed for all loaded buffers.
- {Nvim} *TermClose*
-TermClose When a terminal buffer ends.
- {Nvim} *TermOpen*
-TermOpen When a terminal buffer is starting. This can
- be used to configure the terminal emulator by
- setting buffer variables. |terminal-emulator|
+ *TermClose*
+TermClose When a |terminal| job ends.
+ *TermOpen*
+TermOpen When a |terminal| job is starting. Can be
+ used to configure the terminal buffer.
*TermResponse*
TermResponse After the response to |t_RV| is received from
the terminal. The value of |v:termresponse|
@@ -967,9 +992,9 @@ VimEnter After doing all the startup stuff, including
VimLeave Before exiting Vim, just after writing the
.shada file. Executed only once, like
VimLeavePre.
- To detect an abnormal exit use |v:dying|.
- When v:dying is 2 or more this event is not
- triggered.
+< Use |v:dying| to detect an abnormal exit.
+ Use |v:exiting| to get the exit code.
+ Not triggered if |v:dying| is 2 or more.
*VimLeavePre*
VimLeavePre Before exiting Vim, just before writing the
.shada file. This is executed only once,
@@ -977,9 +1002,9 @@ VimLeavePre Before exiting Vim, just before writing the
happens to be the current buffer when exiting.
Mostly useful with a "*" pattern. >
:autocmd VimLeavePre * call CleanupStuff()
-< To detect an abnormal exit use |v:dying|.
- When v:dying is 2 or more this event is not
- triggered.
+< Use |v:dying| to detect an abnormal exit.
+ Use |v:exiting| to get the exit code.
+ Not triggered if |v:dying| is 2 or more.
*VimResized*
VimResized After the Vim window was resized, thus 'lines'
and/or 'columns' changed. Not when starting
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
index 6af3c4d5d7..9610d7359f 100644
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -11,7 +11,7 @@ commands with the "." command.
For inserting text see |insert.txt|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Deleting text *deleting* *E470*
@@ -648,6 +648,7 @@ g& Synonym for `:%s//~/&` (repeat last substitute with
*:s_flags*
The flags that you can use for the substitute commands:
+ *:&&*
[&] Must be the first one: Keep the flags from the previous substitute
command. Examples: >
:&&
@@ -861,8 +862,7 @@ Exceptions:
Substitute with an expression *sub-replace-expression*
*sub-replace-\=* *s/\=*
When the substitute string starts with "\=" the remainder is interpreted as an
-expression. This does not work recursively: a |substitute()| function inside
-the expression cannot use "\=" for the substitute string.
+expression.
The special meaning for characters as mentioned at |sub-replace-special| does
not apply except for "<CR>". A <NL> character is used as a line break, you
diff --git a/runtime/doc/channel.txt b/runtime/doc/channel.txt
new file mode 100644
index 0000000000..eb2bac6fce
--- /dev/null
+++ b/runtime/doc/channel.txt
@@ -0,0 +1,172 @@
+*channel.txt* Nvim
+
+
+ NVIM REFERENCE MANUAL by Thiago de Arruda
+
+
+Nvim asynchronous IO *channel*
+
+ Type |gO| to see the table of contents.
+
+==============================================================================
+1. Introduction *channel-intro*
+
+Channels are nvim's way of communicating with external processes.
+
+There are several ways to open a channel:
+
+ 1. Through stdin/stdout when `nvim` is started with `--headless`, and a startup
+ script or --cmd command opens the stdio channel using |stdioopen()|.
+
+ 2. Through stdin, stdout and stderr of a process spawned by |jobstart()|.
+
+ 3. Through the PTY master end of a PTY opened with
+ `jobstart(..., {'pty': v:true})` or |termopen()|.
+
+ 4. By connecting to a TCP/IP socket or named pipe with |sockconnect()|.
+
+ 5. By another process connecting to a socket listened to by nvim. This only
+ supports RPC channels, see |rpc-connecting|.
+
+Channels support multiple modes or protocols. In the most basic
+mode of operation, raw bytes are read and written to the channel.
+The |rpc| protocol, based on the msgpack-rpc standard, enables nvim and the
+process at the other end to send remote calls and events to each other.
+Additionally, the builtin |terminal-emulator|, is implemented on top of PTY
+channels.
+
+==============================================================================
+2. Reading and writing raw bytes *channel-bytes*
+
+By default, channels opened by vimscript functions will operate with raw
+bytes. Additionally, for a job channel using rpc, bytes can still be
+read over its stderr. Similarily, only bytes can be written to nvim's own stderr.
+
+ *channel-callback* *buffered*
+ *E5210* *on_stdout* *on_stderr* *on_stdin* *on_data*
+A callback function `on_{stream}` will be invoked with data read from the
+channel. By default, the callback will be invoked immediately when data is
+available, to facilitate interactive communication. The same callback will
+then be invoked with empty data, to indicate that the stream reached EOF.
+Alternatively the `{stream}_buffered` option can be set to invoke the callback
+only when the underlying stream reaches EOF, and will then be passed in
+complete output. This is helpful when only the complete output is useful, and
+not partial data. Futhermore if `{stream}_buffered` is set but not a callback,
+the data is saved in the options dict, with the stream name as key. For this
+to work a new options dict must be used for each opened channel. If a script
+uses a global `s:job_opts` dict, it can be copied with |copy()| before supplying
+it to |jobstart()|. If a dict is reused, so that the dict key already is
+occupied, error `E5210` will be raised.
+
+- The arguments passed to the callback function are:
+
+ 0: The channel id
+ 1: the raw data read from the channel, formatted as a |readfile()|-style
+ list. If EOF occured, a single empty string `['']` will be passed in.
+ Note that the items in this list do not directly correspond to actual
+ lines in the output. See |channel-lines|
+ 2: Stream name as a string, like `"stdout"`. This is to allow multiple
+ on_{event} handlers to be implemented by the same function. The available
+ events depend on how the channel was opened and in what mode/protocol.
+
+ *channel-lines*
+ Note:
+ stream event handlers may receive partial (incomplete) lines. For a given
+ invocation of on_stdout etc, `a:data` is not guaranteed to end
+ with a newline.
+ - `abcdefg` may arrive as `['abc']`, `['defg']`.
+ - `abc\nefg` may arrive as `['abc', '']`, `['efg']` or `['abc']`,
+ `['','efg']`, or even `['ab']`, `['c','efg']`.
+
+ If you only are interested in complete output when the process exits,
+ use buffered mode. Otherwise, an easy way to deal with this:
+ initialize a list as `['']`, then append to it as follows: >
+ let s:chunks = ['']
+ func! s:on_event(job_id, data, event) dict
+ let s:chunks[-1] .= a:data[0]
+ call extend(s:chunks, a:data[1:])
+ endf
+<
+
+Additionally, if the callbacks are Dictionary functions, |self| can be used to
+refer to the options dictionary containing the callbacks. |Partial|s can also be
+used as callbacks.
+
+Data can be sent to the channel using the |chansend()| function. Here is a
+simple example, echoing some data through a cat-process:
+>
+ function! s:OnEvent(id, data, event) dict
+ let str = join(a:data, "\n")
+ echomsg str
+ endfunction
+ let id = jobstart(['cat'], {'on_stdout': function('s:OnEvent') } )
+ call chansend(id, "hello!")
+<
+
+Here is a example of setting a buffer to the result of grep, but only after
+all data has been processed:
+>
+ function! s:OnEvent(id, data, event) dict
+ call nvim_buf_set_lines(2, 0, -1, v:true, a:data)
+ endfunction
+ let id = jobstart(['grep', '^[0-9]'], { 'on_stdout': function('s:OnEvent'),
+ \ 'stdout_buffered':v:true } )
+
+ call chansend(id, "stuff\n10 PRINT \"NVIM\"\nxx")
+ " no output is received, buffer is empty
+
+ call chansend(id, "xx\n20 GOTO 10\nzz\n")
+ call chanclose(id, 'stdin')
+ " now buffer has result
+<
+For additional examples with jobs, see |job-control|.
+
+ *channel-pty*
+A special case is PTY channels opened by `jobstart(..., {'pty': v:true})` .
+No preprocessing of ANSI escape sequences is done, these will be sent raw to
+the callback. However, change of PTY size can be signaled to the slave using
+|jobresize()|. See also |terminal-emulator|.
+
+==============================================================================
+3. Communicating using msgpack-rpc *channel-rpc*
+
+When channels are opened with the `rpc` option set to true, the channel can be
+used for remote method calls in both directions, see |msgpack-rpc|. Note that
+rpc channels are implicitly trusted and the process at the other end can
+invoke any |api| function!
+
+==============================================================================
+4. Using the stdio channel *channel-stdio*
+
+When invoked normally, nvim will use stdin and stdout to interact with the
+user over the terminal interface (TUI). However when invoked with
+`--headless`, the TUI is not started and stdin and stdout can be used as a
+channel. To open the stdio channel |stdioopen()| must be called during
+|startup|, as there later will be no way of invoking a command. As a
+convenience, the stdio channel will always have channel id 1.
+
+Here is an example:
+>
+ func! OnEvent(id, data, event)
+ if a:data == [""]
+ quit
+ end
+ call chansend(a:id, map(a:data, {i,v -> toupper(v)}))
+ endfunc
+
+ call stdioopen({'on_stdin': 'OnEvent'})
+<
+Put this in `uppercase.vim` and invoke nvim with
+>
+ nvim --headless --cmd "source uppercase.vim"
+<
+ *--embed*
+An common use case is another program embedding nvim and communicating with it
+over rpc. Therefore, the option `--embed` exists as a shorthand for
+`nvim --headless --cmd "call stdioopen({'rpc': v:true})"`
+
+Nvim's stderr is implicitly open as a write-only bytes channel. It will
+always have channel id 2, however to be explicit |v:stderr| can be used.
+
+==============================================================================
+ vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index d870a72600..00e654841c 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -13,7 +13,7 @@ Command-line mode is used to enter Ex commands (":"), search patterns
Basic command line editing is explained in chapter 20 of the user manual
|usr_20.txt|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Command-line editing *cmdline-editing*
@@ -327,8 +327,11 @@ terminals)
List entries 6 to 12 from the search history: >
:history / 6,12
<
- List the recent five entries from all histories: >
- :history all -5,
+ List the penultimate entry from all histories: >
+ :history all -2
+<
+ List the most recent two entries from all histories: >
+ :history all -2,
:keepp[atterns] {command} *:keepp* *:keeppatterns*
Execute {command}, without adding anything to the search
@@ -358,7 +361,7 @@ These are the commands that can be used:
*c_CTRL-D*
CTRL-D List names that match the pattern in front of the cursor.
When showing file names, directories are highlighted (see
- 'highlight' option). Names where 'suffixes' matches are moved
+ |highlight-groups|). Names where 'suffixes' matches are moved
to the end.
The 'wildoptions' option can be set to "tagfile" to list the
file of matching tags.
@@ -417,6 +420,9 @@ matches exactly one character.
The 'wildignorecase' option can be set to ignore case in filenames.
+The 'wildmenu' option can be set to show the matches just above the command
+line.
+
If you like tcsh's autolist completion, you can use this mapping:
:cnoremap X <C-L><C-D>
(Where X is the command key to use, <C-L> is CTRL-L and <C-D> is CTRL-D)
@@ -775,6 +781,7 @@ Also see |`=|.
*:<cword>* *:<cWORD>* *:<cfile>* *<cfile>*
*:<sfile>* *<sfile>* *:<afile>* *<afile>*
*:<abuf>* *<abuf>* *:<amatch>* *<amatch>*
+ *:<cexpr>* *<cexpr>*
*<slnum>* *E495* *E496* *E497* *E499* *E500*
Note: these are typed literally, they are not special keys!
<cword> is replaced with the word under the cursor (like |star|)
@@ -782,7 +789,8 @@ Note: these are typed literally, they are not special keys!
<cfile> is replaced with the path name under the cursor (like what
|gf| uses)
<afile> When executing autocommands, is replaced with the file name
- for a file read or write.
+ of the buffer being manipulated, or the file for a read or
+ write.
<abuf> When executing autocommands, is replaced with the currently
effective buffer number (for ":r file" and ":so file" it is
the current buffer, the file being read/sourced is not in a
@@ -1080,7 +1088,7 @@ Another example: >
:au CmdwinEnter [/?] startinsert
This will make Vim start in Insert mode in the command-line window.
- *cmdwin-char*
+ *cmdline-char* *cmdwin-char*
The character used for the pattern indicates the type of command-line:
: normal Ex command
> debug mode command |debug-mode|
diff --git a/runtime/doc/debug.txt b/runtime/doc/debug.txt
index fd2c4fa54e..422255fa02 100644
--- a/runtime/doc/debug.txt
+++ b/runtime/doc/debug.txt
@@ -9,7 +9,7 @@ Debugging Vim *debug-vim*
This is for debugging Vim itself, when it doesn't work properly.
For debugging Vim scripts, functions, etc. see |debug-scripts|
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
diff --git a/runtime/doc/deprecated.txt b/runtime/doc/deprecated.txt
index 26cd5b24cc..ea61e847c7 100644
--- a/runtime/doc/deprecated.txt
+++ b/runtime/doc/deprecated.txt
@@ -37,12 +37,24 @@ Functions ~
*file_readable()* Obsolete name for |filereadable()|.
*highlight_exists()* Obsolete name for |hlexists()|.
*highlightID()* Obsolete name for |hlID()|.
+*jobclose()* Obsolete name for |chanclose()|
+*jobsend()* Obsolete name for |chansend()|
*last_buffer_nr()* Obsolete name for bufnr("$").
+Modifiers ~
+*:menu-<special>*
+*:menu-special* <> notation is always enabled. |cpo-<|
+*:map-<special>*
+*:map-special* <> notation is always enabled. |cpo-<|
+
Options ~
+*'cscopeverbose'* Enabled by default. Use |:silent| instead.
+'gd'
+'gdefault' Enables the |:substitute| flag 'g' by default.
*'fe'* 'fenc'+'enc' before Vim 6.0; no longer used.
+*'highlight'* *'hl'* Names of builtin |highlight-groups| cannot be changed.
*'langnoremap'* Deprecated alias to 'nolangremap'.
*'vi'*
*'viminfo'* Deprecated alias to 'shada' option.
- vim:tw=78:ts=8:ft=help:norl:
+ vim:noet:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt
index 7fd1f90173..4e77f40035 100644
--- a/runtime/doc/develop.txt
+++ b/runtime/doc/develop.txt
@@ -11,7 +11,7 @@ Nvim is open source software. Everybody is encouraged to contribute.
See src/nvim/README.md for an overview of the source code.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
Design goals *design-goals*
@@ -63,12 +63,6 @@ NVIM IS... WELL DOCUMENTED *design-documented*
- Documentation should be comprehensive and understandable. Use examples.
- Don't make the text unnecessarily long. Less documentation means that an
item is easier to find.
-- Do not prefix doc-tags with "nvim-". Use |vim_diff.txt| to document
- differences from Vim. The {Nvim} annotation is also available
- to mark a specific feature. No other distinction is necessary.
-- If a feature is removed, delete its doc entry and move its tag to
- |vim_diff.txt|.
-- Move deprecated features to |deprecated.txt|.
NVIM IS... HIGH SPEED AND SMALL IN SIZE *design-speed-size*
@@ -113,7 +107,7 @@ include the kitchen sink... but it's good for plumbing."
==============================================================================
-Developer guidelines *dev-help*
+Developer guidelines *dev*
JARGON *dev-jargon*
@@ -148,6 +142,8 @@ shell The Vim application. This can cover the whole screen (e.g.,
window View on a buffer. There can be several windows in Vim,
together with the command line, menubar, toolbar, etc. they
fit in the shell.
+frame Windows are kept in a tree of frames. Each frame contains
+ a column, row, or window ("leaf" frame).
PROVIDERS *dev-provider*
@@ -192,6 +188,18 @@ defined if a valid external Python host is found. That works well with the
Python host isn't installed then the plugin will "think" it is running in
a Vim compiled without the |+python| feature.
+DOCUMENTATION *dev-doc*
+
+- Do not prefix help tags with "nvim-". Use |vim_diff.txt| to document
+ differences from Vim; no other distinction is necessary.
+- If a Vim feature is removed, delete its help section and move its tag to
+ |vim_diff.txt|.
+- Move deprecated features to |deprecated.txt|.
+- Use consistent language.
+ - "terminal" in a help tag always means "the embedded terminal emulator", not
+ "the user host terminal".
+ - Use "tui-" to prefix help tags related to the host terminal, and "TUI"
+ in prose if possible.
API *dev-api*
@@ -224,23 +232,47 @@ _not_ a Buffer). The common {action} "list" indicates that it lists all
bufs (plural) in the global context.
+API-CLIENT *dev-api-client*
+
+Package Naming ~
+API client packages should NOT be named something ambiguous like "neovim" or
+"python-client". Use "nvim" as a prefix/suffix to some other identifier
+following ecosystem conventions.
+
+For example, Python packages tend to have "py" in the name, so "pynvim" is
+a good name: it's idiomatic and unambiguous. If the package is named "neovim",
+it confuses users, and complicates documentation and discussions.
+
+Examples of API-client package names:
+ GOOD: nvim-racket
+ GOOD: pynvim
+ BAD: python-client
+ BAD: neovim
+
+Implementation ~
+Consider using libmpack instead of the msgpack.org C/C++ library. libmpack is
+small, efficient, and C89-compatible. It can be easily inlined in your
+C project source, too. https://github.com/libmpack/libmpack/
+
+
EXTERNAL UI *dev-ui*
+Compatibility ~
External UIs should be aware of the |api-contract|. In particular, future
-versions of Nvim may add optional, new items to existing events. The API is
-strongly backwards-compatible, but clients must not break if new fields are
-added to existing events.
-
-External UIs are expected to implement some common features.
-
-- Users may want to configure UI-specific options. The UI should publish the
- |GUIEnter| autocmd after attaching to Nvim: >
- doautocmd GUIEnter
-- Options can be monitored for changes by the |OptionSet| autocmd. E.g. if the
- user sets the 'guifont' option, this autocmd notifies channel 42: >
- autocmd OptionSet guifont call rpcnotify(42, 'option-changed', 'guifont', &guifont)
-- cursor-shape change: 'guicursor' properties are sent in the mode_info_set UI
- event.
+versions of Nvim may add new items to existing events. The API is strongly
+backwards-compatible, but clients must not break if new fields are added to
+existing events.
+
+Common Features ~
+External UIs are expected to implement these common features:
+- Cursor style (shape, color) should respond to the 'guicursor' properties
+ delivered with the mode_info_set UI event.
+- Send the "super" key (Windows key, Apple key) as a |<D-| chord.
+
+Implementation ~
+- UI-related options ('guifont', 'ambiwidth', …) are published in the
+ "option_set" |ui-global| event. The event is triggered when the UI first
+ connects to Nvim and whenever an option is changed by the user or a plugin.
vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt
index 74a3d183a3..b9dccc42a8 100644
--- a/runtime/doc/diff.txt
+++ b/runtime/doc/diff.txt
@@ -10,10 +10,10 @@ eight versions of the same file.
The basics are explained in section |08.7| of the user manual.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
-1. Starting diff mode
+1. Starting diff mode *start-vimdiff*
To start editing in diff mode, run "nvim -d". This starts Nvim as usual, and
additionally sets up for viewing the differences between the arguments. >
@@ -214,8 +214,8 @@ The diffs are highlighted with these groups:
(searching from the end of the line). The
text in between is highlighted. This means
that parts in the middle that are still the
- same are highlighted anyway. Only "iwhite" of
- 'diffopt' is used here.
+ same are highlighted anyway. The 'diffopt'
+ flags "iwhite" and "icase" are used here.
|hl-DiffDelete| DiffDelete Deleted lines. Also called filler lines,
because they don't really exist in this
buffer.
@@ -314,7 +314,7 @@ g:diff_translations to zero: >
let g:diff_translations = 0
<
-After setting this variable, Reload the syntax script: >
+After setting this variable, reload the syntax script: >
set syntax=diff
<
diff --git a/runtime/doc/digraph.txt b/runtime/doc/digraph.txt
index 89351c5b4f..d3b03c6ef6 100644
--- a/runtime/doc/digraph.txt
+++ b/runtime/doc/digraph.txt
@@ -14,7 +14,7 @@ with CTRL-V (see |i_CTRL-V|).
There is a brief introduction on digraphs in the user manual: |24.9|
An alternative is using the 'keymap' option.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Defining digraphs *digraphs-define*
@@ -143,7 +143,7 @@ a standard meaning:
Two 2 Hook
Nine 9 Horn
- Equals = Cyrillic (= used as second char)
+ Equals = Cyrillic (= used as second char)
Asterisk * Greek
Percent sign % Greek/Cyrillic special
Plus + smalls: Arabic, capitals: Hebrew
@@ -922,6 +922,7 @@ char digraph hex dec official name ~
† /- 2020 8224 DAGGER
‡ /= 2021 8225 DOUBLE DAGGER
‥ .. 2025 8229 TWO DOT LEADER
+… ,. 2026 8230 HORIZONTAL ELLIPSIS
‰ %0 2030 8240 PER MILLE SIGN
′ 1' 2032 8242 PRIME
″ 2' 2033 8243 DOUBLE PRIME
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index 9fe815ea9c..5939cb8a8b 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -6,7 +6,7 @@
Editing files *edit-files*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *edit-intro*
@@ -236,7 +236,7 @@ If you want to keep the changed buffer without saving it, switch on the
*:vie* *:view*
:vie[w][!] [++opt] [+cmd] file
- When used in Ex mode: Leave |Ex mode|, go back to
+ When used in Ex mode: Leave |Ex-mode|, go back to
Normal mode. Otherwise same as |:edit|, but set
'readonly' option for this buffer.
@@ -562,16 +562,16 @@ list of the current window.
buffer.
Also see |++opt| and |+cmd|.
-:[count]arge[dit][!] [++opt] [+cmd] {name} *:arge* *:argedit*
- Add {name} to the argument list and edit it.
+:[count]arge[dit][!] [++opt] [+cmd] {name} .. *:arge* *:argedit*
+ Add {name}s to the argument list and edit it.
When {name} already exists in the argument list, this
entry is edited.
This is like using |:argadd| and then |:edit|.
- Note that only one file name is allowed, and spaces
- inside the file name are allowed, like with |:edit|.
+ Spaces in filenames have to be escaped with "\".
[count] is used like with |:argadd|.
- [!] is required if the current file cannot be
- |abandon|ed.
+ If the current file cannot be |abandon|ed {name}s will
+ still be added to the argument list, but won't be
+ edited. No check for duplicates is done.
Also see |++opt| and |+cmd|.
:[count]arga[dd] {name} .. *:arga* *:argadd* *E479*
@@ -901,11 +901,12 @@ WRITING WITH MULTIPLE BUFFERS *buffer-write*
*:wa* *:wall*
:wa[ll] Write all changed buffers. Buffers without a file
- name or which are readonly are not written.
+ name cause an error message. Buffers which are
+ readonly are not written.
:wa[ll]! Write all changed buffers, even the ones that are
readonly. Buffers without a file name are not
- written.
+ written and cause an error message.
Vim will warn you if you try to overwrite a file that has been changed
@@ -1031,6 +1032,7 @@ The names can be in upper- or lowercase.
window in the current tab page the current tab page is
closed |tab-page|.
Triggers the |QuitPre| autocommand event.
+ See |CTRL-W_q| for quitting another window.
:conf[irm] q[uit] Quit, but give prompt when changes have been made, or
the last file in the argument list has not been
@@ -1264,14 +1266,14 @@ Commands for changing the working directory can be suffixed with a bang "!"
*:lc* *:lcd*
:lc[d][!] {path} Like |:cd|, but only set the current directory for the
current window. The current directory for other
- windows or any tabs is not changed.
+ windows or tabs is not changed.
*:lch* *:lchdir*
:lch[dir][!] Same as |:lcd|.
*:lcd-*
:lcd[!] - Change to the previous current directory (before the
- previous ":tcd {path}" command).
+ previous ":lcd {path}" command).
*:pw* *:pwd* *E187*
:pw[d] Print the current directory name.
@@ -1363,6 +1365,13 @@ If you want to automatically reload a file when it has been changed outside of
Vim, set the 'autoread' option. This doesn't work at the moment you write the
file though, only when the file wasn't changed inside of Vim.
+If you do not want to be asked or automatically reload the file, you can use
+this: >
+ set buftype=nofile
+
+Or, when starting gvim from a shell: >
+ gvim file.log -c "set buftype=nofile"
+
Note that if a FileChangedShell autocommand is defined you will not get a
warning message or prompt. The autocommand is expected to handle this.
@@ -1533,7 +1542,7 @@ There are three different types of searching:
This searches the same directories, but in a different order.
Note that completion for ":find", ":sfind", and ":tabfind" commands do not
- currently work with 'path' items that contain a url or use the double star
+ currently work with 'path' items that contain a URL or use the double star
with depth limiter (/usr/**2) or upward search (;) notations.
vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 2a73590c76..767fc133d8 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -12,7 +12,7 @@ Note: Expression evaluation can be disabled at compile time. If this has been
done, the features in this document are not available. See |+eval| and
|no-eval-feature|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Variables *variables*
@@ -94,9 +94,8 @@ To test for a non-empty string, use empty(): >
Function arguments often behave slightly different from |TRUE|: If the
argument is present and it evaluates to a non-zero Number, |v:true| or a
non-empty String, then the value is considered to be TRUE.
-Note that " " and "0" are also non-empty strings, thus cause the mode to be
-cleared. A List, Dictionary or Float is not a Number or String, thus
-evaluates to FALSE.
+Note that " " and "0" are also non-empty strings, thus considered to be TRUE.
+A List, Dictionary or Float is not a Number or String, thus evaluate to FALSE.
*E745* *E728* *E703* *E729* *E730* *E731*
List, Dictionary and Funcref types are not automatically converted.
@@ -782,14 +781,15 @@ Examples:
"abc" == "Abc" evaluates to 1 if 'ignorecase' is set, 0 otherwise
*E691* *E692*
-A |List| can only be compared with a |List| and only "equal", "not equal" and
-"is" can be used. This compares the values of the list, recursively.
-Ignoring case means case is ignored when comparing item values.
+A |List| can only be compared with a |List| and only "equal", "not equal",
+"is" and "isnot" can be used. This compares the values of the list,
+recursively. Ignoring case means case is ignored when comparing item values.
*E735* *E736*
A |Dictionary| can only be compared with a |Dictionary| and only "equal", "not
-equal" and "is" can be used. This compares the key/values of the |Dictionary|
-recursively. Ignoring case means case is ignored when comparing item values.
+equal", "is" and "isnot" can be used. This compares the key/values of the
+|Dictionary| recursively. Ignoring case means case is ignored when comparing
+item values.
*E694*
A |Funcref| can only be compared with a |Funcref| and only "equal", "not
@@ -1016,7 +1016,7 @@ When expr8 is a |Funcref| type variable, invoke the function it refers to.
*expr9*
number
------
-number number constant *expr-number*
+number number constant *expr-number*
*hex-number* *octal-number* *binary-number*
Decimal, Hexadecimal (starting with 0x or 0X), Binary (starting with 0b or 0B)
@@ -1474,7 +1474,6 @@ v:count The count given for the last Normal mode command. Can be used
When there are two counts, as in "3d2w", they are multiplied,
just like what happens in the command, "d6w" for the example.
Also used for evaluating the 'formatexpr' option.
- "count" also works, for backwards compatibility.
*v:count1* *count1-variable*
v:count1 Just like "v:count", but defaults to one when no count is
@@ -1522,20 +1521,27 @@ v:errors Errors found by assert functions, such as |assert_true()|.
*v:event* *event-variable*
v:event Dictionary of event data for the current |autocommand|. Valid
- only during the autocommand lifetime: storing or passing
- `v:event` is invalid. Copy it instead: >
+ only during the event lifetime; storing or passing v:event is
+ invalid! Copy it instead: >
au TextYankPost * let g:foo = deepcopy(v:event)
< Keys vary by event; see the documentation for the specific
- event, e.g. |TextYankPost|.
+ event, e.g. |DirChanged| or |TextYankPost|.
KEY DESCRIPTION ~
- operator The current |operator|. Also set for
- Ex commands (unlike |v:operator|). For
+ abort Whether the event triggered during
+ an aborting condition, i e |c_Esc| or
+ |c_CTRL-c|for |CmdlineLeave|.
+ cmdlevel Level of cmdline.
+ cmdtype Type of cmdline, |cmdline-char|.
+ cwd Current working directory.
+ scope Event-specific scope name.
+ operator Current |operator|. Also set for Ex
+ commands (unlike |v:operator|). For
example if |TextYankPost| is triggered
by the |:yank| Ex command then
- `v:event['operator']` is "y".
+ `v:event.operator` is "y".
regcontents Text stored in the register as a
|readfile()|-style list of lines.
- regname Requested register (e.g "x" for "xyy)
+ regname Requested register (e.g "x" for "xyy)
or the empty string for an unnamed
operation.
regtype Type of register as returned by
@@ -1553,10 +1559,10 @@ v:exception The value of the exception most recently caught and not
< Output: "caught oops".
*v:false* *false-variable*
-v:false Special value used to put "false" in JSON and msgpack. See
- |json_encode()|. This value is converted to "v:false" when used
- as a String (e.g. in |expr5| with string concatenation
- operator) and to zero when used as a Number (e.g. in |expr5|
+v:false Special value used to put "false" in JSON and msgpack. See
+ |json_encode()|. This value is converted to "v:false" when used
+ as a String (e.g. in |expr5| with string concatenation
+ operator) and to zero when used as a Number (e.g. in |expr5|
or |expr7| when used with numeric operators). Read-only.
*v:fcs_reason* *fcs_reason-variable*
@@ -1697,16 +1703,16 @@ v:mouse_col Column number for a mouse click obtained with |getchar()|.
value is zero when there was no mouse button click.
*v:msgpack_types* *msgpack_types-variable*
-v:msgpack_types Dictionary containing msgpack types used by |msgpackparse()|
- and |msgpackdump()|. All types inside dictionary are fixed
- (not editable) empty lists. To check whether some list is one
+v:msgpack_types Dictionary containing msgpack types used by |msgpackparse()|
+ and |msgpackdump()|. All types inside dictionary are fixed
+ (not editable) empty lists. To check whether some list is one
of msgpack types, use |is| operator.
*v:null* *null-variable*
-v:null Special value used to put "null" in JSON and NIL in msgpack.
- See |json_encode()|. This value is converted to "v:null" when
- used as a String (e.g. in |expr5| with string concatenation
- operator) and to zero when used as a Number (e.g. in |expr5|
+v:null Special value used to put "null" in JSON and NIL in msgpack.
+ See |json_encode()|. This value is converted to "v:null" when
+ used as a String (e.g. in |expr5| with string concatenation
+ operator) and to zero when used as a Number (e.g. in |expr5|
or |expr7| when used with numeric operators). Read-only.
*v:oldfiles* *oldfiles-variable*
@@ -1783,11 +1789,11 @@ v:scrollstart String describing the script or function that caused the
*v:servername* *servername-variable*
*$NVIM_LISTEN_ADDRESS*
-v:servername Default {Nvim} server address. Equivalent to
+v:servername Default Nvim server address. Equivalent to
|$NVIM_LISTEN_ADDRESS| on startup. |serverstop()|
Read-only.
-
+
v:searchforward *v:searchforward* *searchforward-variable*
Search direction: 1 after a forward search, 0 after a
backward search. It is reset to forward when directly setting
@@ -1812,6 +1818,13 @@ v:shell_error Result of the last shell command. When non-zero, the last
*v:statusmsg* *statusmsg-variable*
v:statusmsg Last given status message. It's allowed to set this variable.
+ *v:stderr* *stderr-variable*
+v:stderr Channel id for stderr. Unlike stdin and stdout (see
+ |stdioopen()|), stderr is always open for writing. This channel
+ ID is always 2, but this variable can be used to be explicit.
+ Example: >
+ :call chansend(v:stderr, "something bad happened\n")
+<
*v:swapname* *swapname-variable*
v:swapname Only valid when executing |SwapExists| autocommands: Name of
the swap file found. Read-only.
@@ -1852,10 +1865,11 @@ v:t_number Value of Number type. Read-only. See: |type()|
v:t_string Value of String type. Read-only. See: |type()|
*v:termresponse* *termresponse-variable*
-v:termresponse The escape sequence returned by the terminal for the |t_RV|
- termcap entry. It is set when Vim receives an escape sequence
- that starts with ESC [ or CSI and ends in a 'c', with only
- digits, ';' and '.' in between.
+v:termresponse The escape sequence returned by the terminal for the DA
+ (request primary device attributes) control sequence. It is
+ set when Vim receives an escape sequence that starts with ESC
+ [ or CSI and ends in a 'c', with only digits, ';' and '.' in
+ between.
When this option is set, the TermResponse autocommand event is
fired, so that you can react to the response from the
terminal.
@@ -1867,6 +1881,8 @@ v:termresponse The escape sequence returned by the terminal for the |t_RV|
*v:testing* *testing-variable*
v:testing Must be set before using `test_garbagecollect_now()`.
+ Also, when set certain error messages won't be shown for 2
+ seconds. (e.g. "'dictionary' option is empty")
*v:this_session* *this_session-variable*
v:this_session Full filename of the last loaded or saved session file. See
@@ -1887,10 +1903,10 @@ v:throwpoint The point where the exception most recently caught and not
< Output: "Exception from test.vim, line 2"
*v:true* *true-variable*
-v:true Special value used to put "true" in JSON and msgpack. See
- |json_encode()|. This value is converted to "v:true" when used
- as a String (e.g. in |expr5| with string concatenation
- operator) and to one when used as a Number (e.g. in |expr5| or
+v:true Special value used to put "true" in JSON and msgpack. See
+ |json_encode()|. This value is converted to "v:true" when used
+ as a String (e.g. in |expr5| with string concatenation
+ operator) and to one when used as a Number (e.g. in |expr5| or
|expr7| when used with numeric operators). Read-only.
*v:val* *val-variable*
@@ -1980,6 +1996,8 @@ call({func}, {arglist} [, {dict}])
any call {func} with arguments {arglist}
ceil({expr}) Float round {expr} up
changenr() Number current change number
+chanclose({id}[, {stream}]) Number Closes a channel or one of its streams
+chansend({id}, {data}) Number Writes {data} to channel
char2nr({expr}[, {utf8}]) Number ASCII/UTF8 value of first char in {expr}
cindent({lnum}) Number C indent for line {lnum}
clearmatches() none clear all matches
@@ -2026,9 +2044,9 @@ filereadable({file}) Number |TRUE| if {file} is a readable file
filewritable({file}) Number |TRUE| if {file} is a writable file
filter({expr1}, {expr2}) List/Dict remove items from {expr1} where
{expr2} is 0
-finddir({name}[, {path}[, {count}]])
+finddir({name} [, {path} [, {count}]])
String find directory {name} in {path}
-findfile({name}[, {path}[, {count}]])
+findfile({name} [, {path} [, {count}]])
String find file {name} in {path}
float2nr({expr}) Number convert Float {expr} to a Number
floor({expr}) Float round {expr} down
@@ -2072,7 +2090,7 @@ getftime({fname}) Number last modification time of file
getftype({fname}) String description of type of file {fname}
getline({lnum}) String line {lnum} of current buffer
getline({lnum}, {end}) List lines {lnum} to {end} of current buffer
-getloclist({nr}[, {what}]) List list of location list items
+getloclist({nr} [, {what}]) List list of location list items
getmatches() List list of current matches
getpid() Number process ID of Vim
getpos({expr}) List position of cursor, mark, etc.
@@ -2114,7 +2132,8 @@ index({list}, {expr} [, {start} [, {ic}]])
Number index in {list} where {expr} appears
input({prompt} [, {text} [, {completion}]])
String get input from the user
-inputdialog({p} [, {t} [, {c}]]) String like input() but in a GUI dialog
+inputdialog({prompt} [, {text} [, {completion}]])
+ String like input() but in a GUI dialog
inputlist({textlist}) Number let the user pick from a choice list
inputrestore() Number restore typeahead
inputsave() Number save and clear typeahead
@@ -2127,13 +2146,11 @@ isdirectory({directory}) Number |TRUE| if {directory} is a directory
islocked({expr}) Number |TRUE| if {expr} is locked
id({expr}) String identifier of the container
items({dict}) List key-value pairs in {dict}
-jobclose({job}[, {stream}]) Number Closes a job stream(s)
-jobpid({job}) Number Returns pid of a job.
-jobresize({job}, {width}, {height})
- Number Resize {job}'s pseudo terminal window
-jobsend({job}, {data}) Number Writes {data} to {job}'s stdin
+jobpid({id}) Number Returns pid of a job.
+jobresize({id}, {width}, {height})
+ Number Resize pseudo terminal window of a job
jobstart({cmd}[, {opts}]) Number Spawns {cmd} as a job
-jobstop({job}) Number Stops a job
+jobstop({id}) Number Stops a job
jobwait({ids}[, {timeout}]) Number Wait for a set of jobs
join({list} [, {sep}]) String join {list} items into one String
json_decode({expr}) any Convert {expr} from JSON
@@ -2196,12 +2213,13 @@ readfile({fname} [, {binary} [, {max}]])
reltime([{start} [, {end}]]) List get time value
reltimefloat({time}) Float turn the time value into a Float
reltimestr({time}) String turn time value into a String
-remote_expr({server}, {string} [, {idvar}])
+remote_expr({server}, {string} [, {idvar} [, {timeout}]])
String send expression
remote_foreground({server}) Number bring Vim server to the foreground
remote_peek({serverid} [, {retvar}])
Number check for reply string
-remote_read({serverid}) String read reply string
+remote_read({serverid} [, {timeout}])
+ String read reply string
remote_send({server}, {string} [, {idvar}])
String send key sequence
remove({list}, {idx} [, {end}]) any remove items {idx}-{end} from {list}
@@ -2215,7 +2233,6 @@ rpcnotify({channel}, {event}[, {args}...])
Sends an |RPC| notification to {channel}
rpcrequest({channel}, {method}[, {args}...])
Sends an |RPC| request to {channel}
-rpcstop({channel}) Closes an |RPC| {channel}
screenattr({row}, {col}) Number attribute at screen position
screenchar({row}, {col}) Number character at screen position
screencol() Number current cursor column
@@ -2257,6 +2274,8 @@ shiftwidth() Number effective value of 'shiftwidth'
simplify({filename}) String simplify filename as much as possible
sin({expr}) Float sine of {expr}
sinh({expr}) Float hyperbolic sine of {expr}
+sockconnect({mode}, {address} [, {opts}])
+ Number Connects to socket
sort({list} [, {func} [, {dict}]])
List sort {list}, using {func} to compare
soundfold({word}) String sound-fold {word}
@@ -2266,25 +2285,26 @@ spellsuggest({word} [, {max} [, {capital}]])
split({expr} [, {pat} [, {keepempty}]])
List make |List| from {pat} separated {expr}
sqrt({expr}) Float square root of {expr}
+stdioopen({dict}) Number open stdio in a headless instance.
str2float({expr}) Float convert String to Float
str2nr({expr} [, {base}]) Number convert String to Number
strchars({expr} [, {skipcc}]) Number character length of the String {expr}
-strcharpart({str}, {start}[, {len}])
+strcharpart({str}, {start} [, {len}])
String {len} characters of {str} at {start}
strdisplaywidth({expr} [, {col}]) Number display length of the String {expr}
-strftime({format}[, {time}]) String time in specified format
+strftime({format} [, {time}]) String time in specified format
strgetchar({str}, {index}) Number get char {index} from {str}
-stridx({haystack}, {needle}[, {start}])
+stridx({haystack}, {needle} [, {start}])
Number index of {needle} in {haystack}
string({expr}) String String representation of {expr} value
strlen({expr}) Number length of the String {expr}
-strpart({str}, {start}[, {len}])
+strpart({str}, {start} [, {len}])
String {len} characters of {str} at {start}
strridx({haystack}, {needle} [, {start}])
Number last index of {needle} in {haystack}
strtrans({expr}) String translate string to make it printable
strwidth({expr}) Number display cell length of the String {expr}
-submatch({nr}[, {list}]) String or List
+submatch({nr} [, {list}]) String or List
specific match in ":s" or substitute()
substitute({expr}, {pat}, {sub}, {flags})
String all {pat} in {expr} replaced with {sub}
@@ -2472,7 +2492,7 @@ assert_fails({cmd} [, {error}]) *assert_fails()*
assert_false({actual} [, {msg}]) *assert_false()*
When {actual} is not false an error message is added to
|v:errors|, like with |assert_equal()|.
- A value is false when it is zero or |v:false|. When "{actual}"
+ A value is false when it is zero or |v:false|. When "{actual}"
is not a number or |v:false| the assert fails.
When {msg} is omitted an error in the form
"Expected False but got {actual}" is produced.
@@ -2750,7 +2770,36 @@ changenr() *changenr()*
redo it is the number of the redone change. After undo it is
one less than the number of the undone change.
-char2nr({expr}[, {utf8}]) *char2nr()*
+chanclose({id}[, {stream}]) {Nvim} *chanclose()*
+ Close a channel or a specific stream associated with it.
+ For a job, {stream} can be one of "stdin", "stdout",
+ "stderr" or "rpc" (closes stdin/stdout for a job started
+ with `"rpc":v:true`) If {stream} is omitted, all streams
+ are closed. If the channel is a pty, this will then close the
+ pty master, sending SIGHUP to the job process.
+ For a socket, there is only one stream, and {stream} should be
+ ommited.
+
+chansend({id}, {data}) {Nvim} *chansend()*
+ Send data to channel {id}. For a job, it writes it to the
+ stdin of the process. For the stdio channel |channel-stdio|,
+ it writes to Nvim's stdout. Returns the number of bytes
+ written if the write succeeded, 0 otherwise.
+ See |channel-bytes| for more information.
+
+ {data} may be a string, string convertible, or a list. If
+ {data} is a list, the items will be joined by newlines; any
+ newlines in an item will be sent as NUL. To send a final
+ newline, include a final empty string. Example: >
+ :call chansend(id, ["abc", "123\n456", ""])
+< will send "abc<NL>123<NUL>456<NL>".
+
+ chansend() writes raw data, not RPC messages. If the channel
+ was created with `"rpc":v:true` then the channel expects RPC
+ messages, use |rpcnotify()| and |rpcrequest()| instead.
+
+
+char2nr({expr} [, {utf8}]) *char2nr()*
Return number value of the first char in {expr}. Examples: >
char2nr(" ") returns 32
char2nr("ABC") returns 65
@@ -3103,6 +3152,7 @@ did_filetype() Returns |TRUE| when autocommands are being executed and the
FileType event has been triggered at least once. Can be used
to avoid triggering the FileType event again in the scripts
that detect the file type. |FileType|
+ Returns |FALSE| when `:setf FALLBACK` was used.
When editing another file, the counter is reset, thus this
really checks if the FileType event has been triggered for the
current buffer. This allows an autocommand that starts
@@ -3132,7 +3182,7 @@ diff_hlID({lnum}, {col}) *diff_hlID()*
empty({expr}) *empty()*
Return the Number 1 if {expr} is empty, zero otherwise.
A |List| or |Dictionary| is empty when it does not have any
- items. A Number is empty when its value is zero. Special
+ items. A Number is empty when its value is zero. Special
variable is empty when it is |v:false| or |v:null|.
escape({string}, {chars}) *escape()*
@@ -3194,7 +3244,7 @@ execute({command} [, {silent}]) *execute()*
"" no `:silent` used
"silent" `:silent` used
"silent!" `:silent!` used
- The default is 'silent'. Note that with "silent!", unlike
+ The default is "silent". Note that with "silent!", unlike
`:redir`, error messages are dropped.
To get a list of lines use |split()| on the result: >
@@ -3525,7 +3575,7 @@ filter({expr1}, {expr2}) *filter()*
defined with the "abort" flag.
-finddir({name}[, {path}[, {count}]]) *finddir()*
+finddir({name} [, {path} [, {count}]]) *finddir()*
Find directory {name} in {path}. Supports both downwards and
upwards recursive directory searches. See |file-searching|
for the syntax of {path}.
@@ -3540,7 +3590,7 @@ finddir({name}[, {path}[, {count}]]) *finddir()*
{only available when compiled with the |+file_in_path|
feature}
-findfile({name}[, {path}[, {count}]]) *findfile()*
+findfile({name} [, {path} [, {count}]]) *findfile()*
Just like |finddir()|, but find a file instead of a directory.
Uses 'suffixesadd'.
Example: >
@@ -3707,7 +3757,7 @@ function({name} [, {arglist}] [, {dict}])
When {arglist} or {dict} is present this creates a partial.
That mans the argument list and/or the dictionary is stored in
the Funcref and will be used when the Funcref is called.
-
+
The arguments are passed to the function in front of other
arguments. Example: >
func Callback(arg1, arg2, name)
@@ -3772,10 +3822,10 @@ get({dict}, {key} [, {default}])
get({func}, {what})
Get item {what} from Funcref {func}. Possible values for
{what} are:
- 'name' The function name
- 'func' The function
- 'dict' The dictionary
- 'args' The list with arguments
+ "name" The function name
+ "func" The function
+ "dict" The dictionary
+ "args" The list with arguments
*getbufinfo()*
getbufinfo([{expr}])
@@ -4045,7 +4095,9 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
locale locale names (as output of locale -a)
mapping mapping name
menu menus
+ messages |:messages| suboptions
option options
+ packadd optional package |pack-add| names
shellcmd Shell command
sign |:sign| suboptions
syntax syntax file names |'syntax'|
@@ -4070,13 +4122,16 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
getcurpos() Get the position of the cursor. This is like getpos('.'), but
includes an extra item in the list:
[bufnum, lnum, col, off, curswant] ~
- The "curswant" number is the preferred column when moving the
- cursor vertically.
- This can be used to save and restore the cursor position: >
- let save_cursor = getcurpos()
- MoveTheCursorAround
- call setpos('.', save_cursor)
-<
+ The "curswant" number is the preferred column when moving the
+ cursor vertically. Also see |getpos()|.
+
+ This can be used to save and restore the cursor position: >
+ let save_cursor = getcurpos()
+ MoveTheCursorAround
+ call setpos('.', save_cursor)
+< Note that this only works within the window. See
+ |winrestview()| for restoring more state.
+
getcwd([{winnr}[, {tabnr}]]) *getcwd()*
With no arguments the result is a String, which is the name of
the current effective working directory. With {winnr} or
@@ -4272,16 +4327,25 @@ getqflist([{what}]) *getqflist()*
If the optional {what} dictionary argument is supplied, then
returns only the items listed in {what} as a dictionary. The
following string items are supported in {what}:
- nr get information for this quickfix list
+ context get the context stored with |setqflist()|
+ items quickfix list entries
+ nr get information for this quickfix list; zero
+ means the current quickfix list and '$' means
+ the last quickfix list
title get the list title
winid get the |window-ID| (if opened)
all all of the above quickfix properties
Non-string items in {what} are ignored.
If "nr" is not present then the current quickfix list is used.
+ To get the number of lists in the quickfix stack, set 'nr' to
+ '$' in {what}. The 'nr' value in the returned dictionary
+ contains the quickfix stack size.
In case of error processing {what}, an empty dictionary is
returned.
The returned dictionary contains the following entries:
+ context context information stored with |setqflist()|
+ items quickfix list entries
nr quickfix list number
title quickfix list title text
winid quickfix |window-ID| (if opened)
@@ -4373,11 +4437,13 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
getwinposx() The result is a Number, which is the X coordinate in pixels of
the left hand side of the GUI Vim window. The result will be
-1 if the information is not available.
+ The value can be used with `:winpos`.
*getwinposy()*
getwinposy() The result is a Number, which is the Y coordinate in pixels of
the top of the GUI Vim window. The result will be -1 if the
information is not available.
+ The value can be used with `:winpos`.
getwininfo([{winid}]) *getwininfo()*
Returns information about windows as a List with Dictionaries.
@@ -4391,7 +4457,9 @@ getwininfo([{winid}]) *getwininfo()*
Each List item is a Dictionary with the following entries:
bufnr number of buffer in the window
- height window height
+ height window height (excluding winbar)
+ winbar 1 if the window has a toolbar, 0
+ otherwise
loclist 1 if showing a location list
quickfix 1 if quickfix or location list window
tabnr tab page number
@@ -4689,7 +4757,7 @@ input({opts})
string, or a blank string (for no prompt). A '\n' can be used
in the prompt to start a new line.
- In the second form it accepts a single dictionary with the
+ In the second form it accepts a single dictionary with the
following keys, any of which may be omitted:
Key Default Description ~
@@ -4697,8 +4765,9 @@ input({opts})
default "" Same as {text} in the first form.
completion nothing Same as {completion} in the first form.
cancelreturn "" Same as {cancelreturn} from
- |inputdialog()|. Also works with
+ |inputdialog()|. Also works with
input().
+ highlight nothing Highlight handler: |Funcref|.
The highlighting set with |:echohl| is used for the prompt.
The input is entered just like a command-line, with the same
@@ -4721,7 +4790,60 @@ input({opts})
"-complete=" argument. Refer to |:command-completion| for
more information. Example: >
let fname = input("File: ", "", "file")
+
+< *input()-highlight* *E5400* *E5402*
+ The optional `highlight` key allows specifying function which
+ will be used for highlighting user input. This function
+ receives user input as its only argument and must return
+ a list of 3-tuples [hl_start_col, hl_end_col + 1, hl_group]
+ where
+ hl_start_col is the first highlighted column,
+ hl_end_col is the last highlighted column (+ 1!),
+ hl_group is |:hl| group used for highlighting.
+ *E5403* *E5404* *E5405* *E5406*
+ Both hl_start_col and hl_end_col + 1 must point to the start
+ of the multibyte character (highlighting must not break
+ multibyte characters), hl_end_col + 1 may be equal to the
+ input length. Start column must be in range [0, len(input)),
+ end column must be in range (hl_start_col, len(input)],
+ sections must be ordered so that next hl_start_col is greater
+ then or equal to previous hl_end_col.
+
+ Example (try some input with parentheses): >
+ highlight RBP1 guibg=Red ctermbg=red
+ highlight RBP2 guibg=Yellow ctermbg=yellow
+ highlight RBP3 guibg=Green ctermbg=green
+ highlight RBP4 guibg=Blue ctermbg=blue
+ let g:rainbow_levels = 4
+ function! RainbowParens(cmdline)
+ let ret = []
+ let i = 0
+ let lvl = 0
+ while i < len(a:cmdline)
+ if a:cmdline[i] is# '('
+ call add(ret, [i, i + 1, 'RBP' . ((lvl % g:rainbow_levels) + 1)])
+ let lvl += 1
+ elseif a:cmdline[i] is# ')'
+ let lvl -= 1
+ call add(ret, [i, i + 1, 'RBP' . ((lvl % g:rainbow_levels) + 1)])
+ endif
+ let i += 1
+ endwhile
+ return ret
+ endfunction
+ call input({'prompt':'>','highlight':'RainbowParens'})
<
+ Highlight function is called at least once for each new
+ displayed input string, before command-line is redrawn. It is
+ expected that function is pure for the duration of one input()
+ call, i.e. it produces the same output for the same input, so
+ output may be memoized. Function is run like under |:silent|
+ modifier. If the function causes any errors, it will be
+ skipped for the duration of the current input() call.
+
+ Highlighting is disabled if command-line contains arabic
+ characters.
+
NOTE: This function must not be used in a startup file, for
the versions that only run in GUI mode (e.g., the Win32 GUI).
Note: When input() is called from within a mapping it will
@@ -4834,19 +4956,19 @@ islocked({expr}) *islocked()* *E786*
message. Use |exists()| to check for existence.
id({expr}) *id()*
- Returns a |String| which is a unique identifier of the
- container type (|List|, |Dict| and |Partial|). It is
- guaranteed that for the mentioned types `id(v1) ==# id(v2)`
- returns true iff `type(v1) == type(v2) && v1 is v2` (note:
- |v:_null_list| and |v:_null_dict| have the same `id()` with
- different types because they are internally represented as
- a NULL pointers). Currently `id()` returns a hexadecimal
- representanion of the pointers to the containers (i.e. like
- `0x994a40`), same as `printf("%p", {expr})`, but it is advised
+ Returns a |String| which is a unique identifier of the
+ container type (|List|, |Dict| and |Partial|). It is
+ guaranteed that for the mentioned types `id(v1) ==# id(v2)`
+ returns true iff `type(v1) == type(v2) && v1 is v2` (note:
+ |v:_null_list| and |v:_null_dict| have the same `id()` with
+ different types because they are internally represented as
+ a NULL pointers). Currently `id()` returns a hexadecimal
+ representanion of the pointers to the containers (i.e. like
+ `0x994a40`), same as `printf("%p", {expr})`, but it is advised
against counting on exact format of return value.
- It is not guaranteed that `id(no_longer_existing_container)`
- will not be equal to some other `id()`: new containers may
+ It is not guaranteed that `id(no_longer_existing_container)`
+ will not be equal to some other `id()`: new containers may
reuse identifiers of the garbage-collected ones.
items({dict}) *items()*
@@ -4855,42 +4977,31 @@ items({dict}) *items()*
entry and the value of this entry. The |List| is in arbitrary
order.
-jobclose({job}[, {stream}]) {Nvim} *jobclose()*
- Close {job}'s {stream}, which can be one of "stdin", "stdout",
- "stderr" or "rpc" (closes the rpc channel for a job started
- with the "rpc" option.) If {stream} is omitted, all streams
- are closed. If the job is a pty job, this will then close the
- pty master, sending SIGHUP to the job process.
-
-jobpid({job}) {Nvim} *jobpid()*
- Return the pid (process id) of {job}.
-jobresize({job}, {width}, {height}) {Nvim} *jobresize()*
- Resize {job}'s pseudo terminal window to {width} and {height}.
- This function will fail if used on jobs started without the
- "pty" option.
+jobpid({job}) *jobpid()*
+ Return the PID (process id) of |job-id| {job}.
-jobsend({job}, {data}) {Nvim} *jobsend()*
- Send data to {job} by writing it to the stdin of the process.
- Returns 1 if the write succeeded, 0 otherwise.
- See |job-control| for more information.
+jobresize({job}, {width}, {height}) *jobresize()*
+ Resize the pseudo terminal window of |job-id| {job} to {width}
+ columns and {height} rows.
+ Fails if the job was not started with `"pty":v:true`.
- {data} may be a string, string convertible, or a list. If
- {data} is a list, the items will be separated by newlines and
- any newlines in an item will be sent as a NUL. A final newline
- can be sent by adding a final empty string. For example: >
- :call jobsend(j, ["abc", "123\n456", ""])
-< will send "abc<NL>123<NUL>456<NL>".
+jobstart({cmd}[, {opts}]) *jobstart()*
+ Spawns {cmd} as a job.
+ If {cmd} is a List it runs directly (no 'shell').
+ If {cmd} is a String it runs in the 'shell', like this: >
+ :call jobstart(split(&shell) + split(&shellcmdflag) + ['{cmd}'])
+< (See |shell-unquoting| for details.)
- If the job was started with the rpc option this function
- cannot be used, instead use |rpcnotify()| and |rpcrequest()|
- to communicate with the job.
+ Returns |job-id| on success, 0 on invalid arguments (or job
+ table is full), -1 if {cmd}[0] or 'shell' is not executable.
+ For communication over the job's stdio, it is represented as a
+ |channel|, and a channel ID is returned on success. Use
+ |chansend()| (or |rpcnotify()| and |rpcrequest()| if "rpc" option
+ was used) to send data to stdin and |chanclose()| to close stdio
+ streams without stopping the job explicitly.
-jobstart({cmd}[, {opts}]) {Nvim} *jobstart()*
- Spawns {cmd} as a job. If {cmd} is a |List| it is run
- directly. If {cmd} is a |String| it is processed like this: >
- :call jobstart(split(&shell) + split(&shellcmdflag) + ['{cmd}'])
-< (Only shows the idea; see |shell-unquoting| for full details.)
+ See |job-control| and |rpc|.
NOTE: on Windows if {cmd} is a List:
- cmd[0] must be an executable (not a "built-in"). If it is
@@ -4902,9 +5013,12 @@ jobstart({cmd}[, {opts}]) {Nvim} *jobstart()*
by CommandLineToArgvW https://msdn.microsoft.com/bb776391
unless cmd[0] is some form of "cmd.exe".
+ *jobstart-options*
{opts} is a dictionary with these keys:
|on_stdout|: stdout event handler (function name or |Funcref|)
+ stdout_buffered : read stdout in |buffered| mode.
|on_stderr|: stderr event handler (function name or |Funcref|)
+ stderr_buffered : read stderr in |buffered| mode.
|on_exit| : exit event handler (function name or |Funcref|)
cwd : Working directory of the job; defaults to
|current-directory|.
@@ -4912,9 +5026,9 @@ jobstart({cmd}[, {opts}]) {Nvim} *jobstart()*
with the job over stdin and stdout. "on_stdout" is
then ignored, but "on_stderr" can still be used.
pty : If set, the job will be connected to a new pseudo
- terminal, and the job streams are connected to
- the master file descriptor. "on_stderr" is ignored
- as all output will be received on stdout.
+ terminal and the job streams are connected to the
+ master file descriptor. "on_stderr" is ignored,
+ "on_stdout" receives all output.
width : (pty only) Width of the terminal screen
height : (pty only) Height of the terminal screen
@@ -4922,43 +5036,36 @@ jobstart({cmd}[, {opts}]) {Nvim} *jobstart()*
detach : (non-pty only) Detach the job process from the
nvim process. The process will not get killed
when nvim exits. If the process dies before
- nvim exits, on_exit will still be invoked.
+ nvim exits, "on_exit" will still be invoked.
- {opts} is passed as |self| to the callback; the caller may
- pass arbitrary data by setting other keys.
+ {opts} is passed as |self| dictionary to the callback; the
+ caller may set other keys to pass application-specific data.
Returns:
- - The job ID on success, which is used by |jobsend()| (or
- |rpcnotify()| and |rpcrequest()| if "rpc" option was used)
- and |jobstop()|
- - 0 on invalid arguments or if the job table is full
+ - The channel ID on success
+ - 0 on invalid arguments
- -1 if {cmd}[0] is not executable.
- See |job-control| and |msgpack-rpc| for more information.
+ See |job-control|, |channels|, and |msgpack-rpc| for more information.
-jobstop({job}) {Nvim} *jobstop()*
- Stop a job created with |jobstart()| by sending a `SIGTERM`
- to the corresponding process. If the process doesn't exit
- cleanly soon, a `SIGKILL` will be sent. When the job is
- finally closed, the exit handler provided to |jobstart()| or
- |termopen()| will be run.
- See |job-control| for more information.
+jobstop({id}) *jobstop()*
+ Stop |job-id| {id} by sending SIGTERM to the job process. If
+ the process does not terminate after a timeout then SIGKILL
+ will be sent. When the job terminates its |on_exit| handler
+ (if any) will be invoked.
+ See |job-control|.
-jobwait({ids}[, {timeout}]) {Nvim} *jobwait()*
+jobwait({ids}[, {timeout}]) *jobwait()*
Wait for a set of jobs to finish. The {ids} argument is a list
- of ids for jobs that will be waited for. If passed, {timeout}
- is the maximum number of milliseconds to wait. While this
- function is executing, callbacks for jobs not in the {ids}
- list can be executed. Also, the screen wont be updated unless
- |:redraw| is invoked by one of the callbacks.
-
- Returns a list of integers with the same length as {ids}, with
- each integer representing the wait result for the
- corresponding job id. The possible values for the resulting
- integers are:
-
- * the job return code if the job exited
- * -1 if the wait timed out for the job
- * -2 if the job was interrupted
- * -3 if the job id is invalid.
+ of |job-id|s to wait for. {timeout} is the maximum number of
+ milliseconds to wait. During jobwait(), callbacks for jobs not
+ in the {ids} list may be invoked. The screen will not redraw
+ unless |:redraw| is invoked by a callback.
+
+ Returns a list of len({ids}) integers, where each integer is
+ the wait-result of the corresponding job. Each wait-result is:
+ Job exit-code, if the job exited
+ -1 if the wait timed out for the job
+ -2 if the job was interrupted
+ -3 if the |job-id| is invalid.
join({list} [, {sep}]) *join()*
Join the items in {list} together into one String.
@@ -4972,14 +5079,14 @@ join({list} [, {sep}]) *join()*
The opposite function is |split()|.
json_decode({expr}) *json_decode()*
- Convert {expr} from JSON object. Accepts |readfile()|-style
- list as the input, as well as regular string. May output any
+ Convert {expr} from JSON object. Accepts |readfile()|-style
+ list as the input, as well as regular string. May output any
Vim value. In the following cases it will output
|msgpack-special-dict|:
1. Dictionary contains duplicate key.
2. Dictionary contains empty key.
- 3. String contains NUL byte. Two special dictionaries: for
- dictionary and for string will be emitted in case string
+ 3. String contains NUL byte. Two special dictionaries: for
+ dictionary and for string will be emitted in case string
with NUL byte was a dictionary key.
Note: function treats its input as UTF-8 always. The JSON
@@ -4988,14 +5095,14 @@ json_decode({expr}) *json_decode()*
Non-UTF-8 characters are an error.
json_encode({expr}) *json_encode()*
- Convert {expr} into a JSON string. Accepts
- |msgpack-special-dict| as the input. Will not convert
- |Funcref|s, mappings with non-string keys (can be created as
- |msgpack-special-dict|), values with self-referencing
- containers, strings which contain non-UTF-8 characters,
- pseudo-UTF-8 strings which contain codepoints reserved for
- surrogate pairs (such strings are not valid UTF-8 strings).
- Non-printable characters are converted into "\u1234" escapes
+ Convert {expr} into a JSON string. Accepts
+ |msgpack-special-dict| as the input. Will not convert
+ |Funcref|s, mappings with non-string keys (can be created as
+ |msgpack-special-dict|), values with self-referencing
+ containers, strings which contain non-UTF-8 characters,
+ pseudo-UTF-8 strings which contain codepoints reserved for
+ surrogate pairs (such strings are not valid UTF-8 strings).
+ Non-printable characters are converted into "\u1234" escapes
or special escapes like "\t", other are dumped as-is.
keys({dict}) *keys()*
@@ -5093,7 +5200,10 @@ line({expr}) The result is a Number, which is the line number of the file
< *last-position-jump*
This autocommand jumps to the last known position in a file
just after opening it, if the '" mark is set: >
- :au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
+ :au BufReadPost *
+ \ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
+ \ | exe "normal! g`\""
+ \ | endif
line2byte({lnum}) *line2byte()*
Return the byte count from the start of the buffer for line
@@ -5142,7 +5252,7 @@ log10({expr}) *log10()*
< -2.0
luaeval({expr}[, {expr}])
- Evaluate Lua expression {expr} and return its result converted
+ Evaluate Lua expression {expr} and return its result converted
to Vim data structures. See |lua-luaeval| for more details.
map({expr1}, {expr2}) *map()*
@@ -5188,12 +5298,12 @@ map({expr1}, {expr2}) *map()*
defined with the "abort" flag.
-maparg({name}[, {mode} [, {abbr} [, {dict}]]]) *maparg()*
+maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()*
When {dict} is omitted or zero: Return the rhs of mapping
{name} in mode {mode}. The returned String has special
characters translated like in the output of the ":map" command
listing.
-
+
When there is no mapping for {name}, an empty String is
returned.
@@ -5209,6 +5319,7 @@ maparg({name}[, {mode} [, {abbr} [, {dict}]]]) *maparg()*
"s" Select
"x" Visual
"l" langmap |language-mapping|
+ "t" Terminal
"" Normal, Visual and Operator-pending
When {mode} is omitted, the modes for "" are used.
@@ -5242,7 +5353,7 @@ maparg({name}[, {mode} [, {abbr} [, {dict}]]]) *maparg()*
exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
-mapcheck({name}[, {mode} [, {abbr}]]) *mapcheck()*
+mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()*
Check if there is a mapping that matches with {name} in mode
{mode}. See |maparg()| for {mode} and special names in
{name}.
@@ -5274,7 +5385,7 @@ mapcheck({name}[, {mode} [, {abbr}]]) *mapcheck()*
< This avoids adding the "_vv" mapping when there already is a
mapping for "_v" or for "_vvv".
-match({expr}, {pat}[, {start}[, {count}]]) *match()*
+match({expr}, {pat} [, {start} [, {count}]]) *match()*
When {expr} is a |List| then this returns the index of the
first item where {pat} matches. Each item is used as a
String, |Lists| and |Dictionaries| are used as echoed.
@@ -5383,14 +5494,14 @@ matchadd({group}, {pattern}[, {priority}[, {id} [, {dict}]]])
one operation by |clearmatches()|.
*matchaddpos()*
-matchaddpos({group}, {pos}[, {priority}[, {id}[, {dict}]]])
+matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
Same as |matchadd()|, but requires a list of positions {pos}
instead of a pattern. This command is faster than |matchadd()|
because it does not require to handle regular expressions and
sets buffer line boundaries to redraw screen. It is supposed
to be used when fast match additions and deletions are
required, for example to highlight matching parentheses.
-
+ *E5030* *E5031*
The list {pos} can contain one of these items:
- A number. This whole line will be highlighted. The first
line has number 1.
@@ -5403,7 +5514,11 @@ matchaddpos({group}, {pos}[, {priority}[, {id}[, {dict}]]])
be highlighted.
- A list with three numbers, e.g., [23, 11, 3]. As above, but
the third number gives the length of the highlight in bytes.
-
+
+ Entries with zero and negative line numbers are silently
+ ignored, as well as entries with negative column numbers and
+ lengths.
+
The maximum number of positions is 8.
Example: >
@@ -5436,7 +5551,7 @@ matchdelete({id}) *matchdelete()* *E802* *E803*
otherwise -1. See example for |matchadd()|. All matches can
be deleted in one operation by |clearmatches()|.
-matchend({expr}, {pat}[, {start}[, {count}]]) *matchend()*
+matchend({expr}, {pat} [, {start} [, {count}]]) *matchend()*
Same as |match()|, but return the index of first character
after the match. Example: >
:echo matchend("testing", "ing")
@@ -5455,7 +5570,7 @@ matchend({expr}, {pat}[, {start}[, {count}]]) *matchend()*
< result is "-1".
When {expr} is a |List| the result is equal to |match()|.
-matchlist({expr}, {pat}[, {start}[, {count}]]) *matchlist()*
+matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()*
Same as |match()|, but return a |List|. The first item in the
list is the matched string, same as what matchstr() would
return. Following items are submatches, like "\1", "\2", etc.
@@ -5465,7 +5580,7 @@ matchlist({expr}, {pat}[, {start}[, {count}]]) *matchlist()*
< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']
When there is no match an empty list is returned.
-matchstr({expr}, {pat}[, {start}[, {count}]]) *matchstr()*
+matchstr({expr}, {pat} [, {start} [, {count}]]) *matchstr()*
Same as |match()|, but return the matched string. Example: >
:echo matchstr("testing", "ing")
< results in "ing".
@@ -5478,7 +5593,7 @@ matchstr({expr}, {pat}[, {start}[, {count}]]) *matchstr()*
When {expr} is a |List| then the matching item is returned.
The type isn't changed, it's not necessarily a String.
-matchstrpos({expr}, {pat}[, {start}[, {count}]]) *matchstrpos()*
+matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()*
Same as |matchstr()|, but return the matched string, the start
position and the end position of the match. Example: >
:echo matchstrpos("testing", "ing")
@@ -5504,6 +5619,51 @@ max({expr}) Return the maximum value of all items in {expr}.
items in {expr} cannot be used as a Number this results in
an error. An empty |List| or |Dictionary| results in zero.
+menu_get({path}, {modes}) *menu_get()*
+ Returns a |List| of |Dictionaries| describing |menus| (defined
+ by |:menu|, |:amenu|, etc.).
+ {path} limits the result to a subtree of the menu hierarchy
+ (empty string matches all menus). E.g. to get items in the
+ "File" menu subtree: >
+ :echo menu_get('File','')
+<
+ {modes} is a string of zero or more modes (see |maparg()| or
+ |creating-menus| for the list of modes). "a" means "all".
+
+ For example: >
+ nnoremenu &Test.Test inormal
+ inoremenu Test.Test insert
+ vnoremenu Test.Test x
+ echo menu_get("")
+<
+ returns something like this:
+>
+ [ {
+ "hidden": 0,
+ "name": "Test",
+ "priority": 500,
+ "shortcut": 84,
+ "submenus": [ {
+ "hidden": 0,
+ "mappings": {
+ i": {
+ "enabled": 1,
+ "noremap": 1,
+ "rhs": "insert",
+ "sid": 1,
+ "silent": 0
+ },
+ n": { ... },
+ s": { ... },
+ v": { ... }
+ },
+ "name": "Test",
+ "priority": 500,
+ "shortcut": 0
+ } ]
+ } ]
+<
+
*min()*
min({expr}) Return the minimum value of all items in {expr}.
{expr} can be a list or a dictionary. For a dictionary,
@@ -5527,7 +5687,7 @@ mkdir({name} [, {path} [, {prot}]])
:call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
< This function is not available in the |sandbox|.
- If you try to create an existing directory with {path} set to
+ If you try to create an existing directory with {path} set to
"p" mkdir() will silently exit.
*mode()*
@@ -5545,16 +5705,20 @@ mode([expr]) Return a string that indicates the current mode.
S Select by line
CTRL-S Select blockwise
i Insert
+ ic Insert mode completion |compl-generic|
+ ix Insert mode |i_CTRL-X| completion
R Replace |R|
+ Rc Replace mode completion |compl-generic|
Rv Virtual Replace |gR|
- t Terminal {Nvim}
- c Command-line
+ Rx Replace mode |i_CTRL-X| completion
+ c Command-line editing
cv Vim Ex mode |gQ|
ce Normal Ex mode |Q|
r Hit-enter prompt
rm The -- more -- prompt
r? A |:confirm| query of some sort
! Shell or external command is executing
+ t Terminal mode: keys go to the job
This is useful in the 'statusline' option or when used
with |remote_expr()| In most other places it always returns
"c" or "n".
@@ -5576,78 +5740,76 @@ msgpackdump({list}) {Nvim} *msgpackdump()*
5. Points 3. and 4. do not apply to |msgpack-special-dict|s.
msgpackparse({list}) {Nvim} *msgpackparse()*
- Convert a |readfile()|-style list to a list of VimL objects.
+ Convert a |readfile()|-style list to a list of VimL objects.
Example: >
let fname = expand('~/.config/nvim/shada/main.shada')
let mpack = readfile(fname, 'b')
let shada_objects = msgpackparse(mpack)
-< This will read ~/.config/nvim/shada/main.shada file to
+< This will read ~/.config/nvim/shada/main.shada file to
`shada_objects` list.
Limitations:
- 1. Mapping ordering is not preserved unless messagepack
- mapping is dumped using generic mapping
+ 1. Mapping ordering is not preserved unless messagepack
+ mapping is dumped using generic mapping
(|msgpack-special-map|).
- 2. Since the parser aims to preserve all data untouched
- (except for 1.) some strings are parsed to
- |msgpack-special-dict| format which is not convenient to
+ 2. Since the parser aims to preserve all data untouched
+ (except for 1.) some strings are parsed to
+ |msgpack-special-dict| format which is not convenient to
use.
*msgpack-special-dict*
- Some messagepack strings may be parsed to special
+ Some messagepack strings may be parsed to special
dictionaries. Special dictionaries are dictionaries which
1. Contain exactly two keys: `_TYPE` and `_VAL`.
- 2. `_TYPE` key is one of the types found in |v:msgpack_types|
+ 2. `_TYPE` key is one of the types found in |v:msgpack_types|
variable.
- 3. Value for `_VAL` has the following format (Key column
+ 3. Value for `_VAL` has the following format (Key column
contains name of the key from |v:msgpack_types|):
Key Value ~
- nil Zero, ignored when dumping. This value cannot
- possibly appear in |msgpackparse()| output in Neovim
- versions which have |v:null|.
- boolean One or zero. When dumping it is only checked that
- value is a |Number|. This value cannot possibly
- appear in |msgpackparse()| output in Neovim versions
- which have |v:true| and |v:false|.
- integer |List| with four numbers: sign (-1 or 1), highest two
- bits, number with bits from 62nd to 31st, lowest 31
- bits. I.e. to get actual number one will need to use
+ nil Zero, ignored when dumping. Not returned by
+ |msgpackparse()| since |v:null| was introduced.
+ boolean One or zero. When dumping it is only checked that
+ value is a |Number|. Not returned by |msgpackparse()|
+ since |v:true| and |v:false| were introduced.
+ integer |List| with four numbers: sign (-1 or 1), highest two
+ bits, number with bits from 62nd to 31st, lowest 31
+ bits. I.e. to get actual number one will need to use
code like >
_VAL[0] * ((_VAL[1] << 62)
& (_VAL[2] << 31)
& _VAL[3])
-< Special dictionary with this type will appear in
- |msgpackparse()| output under one of the following
+< Special dictionary with this type will appear in
+ |msgpackparse()| output under one of the following
circumstances:
- 1. |Number| is 32-bit and value is either above
+ 1. |Number| is 32-bit and value is either above
INT32_MAX or below INT32_MIN.
- 2. |Number| is 64-bit and value is above INT64_MAX. It
- cannot possibly be below INT64_MIN because msgpack
+ 2. |Number| is 64-bit and value is above INT64_MAX. It
+ cannot possibly be below INT64_MIN because msgpack
C parser does not support such values.
- float |Float|. This value cannot possibly appear in
+ float |Float|. This value cannot possibly appear in
|msgpackparse()| output.
- string |readfile()|-style list of strings. This value will
- appear in |msgpackparse()| output if string contains
- zero byte or if string is a mapping key and mapping is
- being represented as special dictionary for other
+ string |readfile()|-style list of strings. This value will
+ appear in |msgpackparse()| output if string contains
+ zero byte or if string is a mapping key and mapping is
+ being represented as special dictionary for other
reasons.
- binary |readfile()|-style list of strings. This value will
- appear in |msgpackparse()| output if binary string
+ binary |readfile()|-style list of strings. This value will
+ appear in |msgpackparse()| output if binary string
contains zero byte.
- array |List|. This value cannot appear in |msgpackparse()|
+ array |List|. This value cannot appear in |msgpackparse()|
output.
*msgpack-special-map*
- map |List| of |List|s with two items (key and value) each.
- This value will appear in |msgpackparse()| output if
+ map |List| of |List|s with two items (key and value) each.
+ This value will appear in |msgpackparse()| output if
parsed mapping contains one of the following keys:
- 1. Any key that is not a string (including keys which
+ 1. Any key that is not a string (including keys which
are binary strings).
2. String with NUL byte inside.
3. Duplicate key.
4. Empty key.
- ext |List| with two values: first is a signed integer
- representing extension type. Second is
+ ext |List| with two values: first is a signed integer
+ representing extension type. Second is
|readfile()|-style list of strings.
nextnonblank({lnum}) *nextnonblank()*
@@ -5658,7 +5820,7 @@ nextnonblank({lnum}) *nextnonblank()*
below it, zero is returned.
See also |prevnonblank()|.
-nr2char({expr}[, {utf8}]) *nr2char()*
+nr2char({expr} [, {utf8}]) *nr2char()*
Return a string with a single character, which has the number
value {expr}. Examples: >
nr2char(64) returns "@"
@@ -5696,7 +5858,7 @@ pathshorten({expr}) *pathshorten()*
components in the path are reduced to single letters. Leading
'~' and '.' characters are kept. Example: >
:echo pathshorten('~/.config/nvim/autoload/file1.vim')
-< ~/.v/a/file1.vim ~
+< ~/.c/n/a/file1.vim ~
It doesn't matter if the path exists or not.
pow({x}, {y}) *pow()*
@@ -5867,7 +6029,7 @@ printf({fmt}, {expr1} ...) *printf()*
feature works just like 's'.
*printf-f* *E807*
- f F The Float argument is converted into a string of the
+ f F The Float argument is converted into a string of the
form 123.456. The precision specifies the number of
digits after the decimal point. When the precision is
zero the decimal point is omitted. When the precision
@@ -5921,11 +6083,11 @@ pumvisible() *pumvisible()*
py3eval({expr}) *py3eval()*
Evaluate Python expression {expr} and return its result
converted to Vim data structures.
- Numbers and strings are returned as they are (strings are
- copied though, Unicode strings are additionally converted to
+ Numbers and strings are returned as they are (strings are
+ copied though, Unicode strings are additionally converted to
UTF-8).
Lists are represented as Vim |List| type.
- Dictionaries are represented as Vim |Dictionary| type with
+ Dictionaries are represented as Vim |Dictionary| type with
keys converted to strings.
{only available when compiled with the |+python3| feature}
@@ -5933,10 +6095,10 @@ py3eval({expr}) *py3eval()*
pyeval({expr}) *pyeval()*
Evaluate Python expression {expr} and return its result
converted to Vim data structures.
- Numbers and strings are returned as they are (strings are
+ Numbers and strings are returned as they are (strings are
copied though).
Lists are represented as Vim |List| type.
- Dictionaries are represented as Vim |Dictionary| type,
+ Dictionaries are represented as Vim |Dictionary| type,
non-string keys result in error.
{only available when compiled with the |+python| feature}
@@ -5962,9 +6124,9 @@ range({expr} [, {max} [, {stride}]]) *range()*
*readfile()*
readfile({fname} [, {binary} [, {max}]])
Read file {fname} and return a |List|, each line of the file
- as an item. Lines broken at NL characters. Macintosh files
- separated with CR will result in a single long line (unless a
- NL appears somewhere).
+ as an item. Lines are broken at NL characters. Macintosh
+ files separated with CR will result in a single long line
+ (unless a NL appears somewhere).
All NUL characters are replaced with a NL character.
When {binary} contains "b" binary mode is used:
- When the last line ends in a NL an extra empty list item is
@@ -5993,7 +6155,7 @@ readfile({fname} [, {binary} [, {max}]])
reltime([{start} [, {end}]]) *reltime()*
Return an item that represents a time value. The format of
the item depends on the system. It can be passed to
- |reltimestr()| to convert it to a string or |reltimefloat()|
+ |reltimestr()| to convert it to a string or |reltimefloat()|
to convert to a float.
Without an argument it returns the current "relative time", an
@@ -6047,6 +6209,12 @@ remote_expr({server}, {string} [, {idvar}])
{only available when compiled with the |+clientserver| feature}
Note: Any errors will cause a local error message to be issued
and the result will be the empty string.
+
+ Variables will be evaluated in the global namespace,
+ independent of a function currently being active. Except
+ when in debug mode, then local function variables and
+ arguments can be evaluated.
+
Examples: >
:echo remote_expr("gvim", "2+2")
:echo remote_expr("gvim1", "b:current_syntax")
@@ -6198,20 +6366,18 @@ rpcstart({prog}[, {argv}]) {Nvim} *rpcstart()*
:let id = jobstart(['prog', 'arg1', 'arg2'], {'rpc': v:true})
rpcstop({channel}) {Nvim} *rpcstop()*
- Closes an |RPC| {channel}. If the channel is a job
- started with |jobstart()| the job is killed.
- It is better to use |jobstop()| in this case, or use
- |jobclose|(id, "rpc") to only close the channel without
- killing the job.
- Closes the socket connection if the channel was opened by
- connecting to |v:servername|.
-
-screenattr(row, col) *screenattr()*
+ Deprecated. This function was used to stop a job with |rpc|
+ channel, and additionally closed rpc sockets. Instead use
+ |jobstop()| to stop any job, and |chanclose|(id, "rpc") to close
+ rpc communication without stopping the job. Use |chanclose|(id)
+ to close any socket.
+
+screenattr({row}, {col}) *screenattr()*
Like |screenchar()|, but return the attribute. This is a rather
arbitrary number that can only be used to compare to the
attribute at other positions.
-screenchar(row, col) *screenchar()*
+screenchar({row}, {col}) *screenchar()*
The result is a Number, which is the character at position
[row, col] on the screen. This works for every possible
screen position, also status lines, window separators and the
@@ -6267,7 +6433,7 @@ search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()*
flag.
'ignorecase', 'smartcase' and 'magic' are used.
-
+
When the 'z' flag is not given, searching always starts in
column zero and then matches before the cursor are skipped.
When the 'c' flag is present in 'cpo' the next search starts
@@ -6482,15 +6648,27 @@ serverlist() *serverlist()*
nvim --cmd "echo serverlist()" --cmd "q"
<
serverstart([{address}]) *serverstart()*
- Opens a TCP socket (IPv4/IPv6), Unix domain socket (Unix),
- or named pipe (Windows) at {address} for clients to connect
- to and returns {address}.
+ Opens a socket or named pipe at {address} and listens for
+ |RPC| messages. Clients can send |API| commands to the address
+ to control Nvim. Returns the address string.
- If {address} contains `:`, a TCP socket is used. Everything in
- front of the last occurrence of `:` is the IP or hostname,
- everything after it the port. If the port is empty or `0`,
- a random port will be assigned.
+ If {address} does not contain a colon ":" it is interpreted as
+ a named pipe or Unix domain socket path.
+ Example: >
+ if has('win32')
+ call serverstart('\\.\pipe\nvim-pipe-1234')
+ else
+ call serverstart('nvim.sock')
+ endif
+<
+ If {address} contains a colon ":" it is interpreted as a TCP
+ address where the last ":" separates the host and port.
+ Assigns a random port if it is empty or 0. Supports IPv4/IPv6.
+
+ Example: >
+ :call serverstart('::1:12345')
+<
If no address is given, it is equivalent to: >
:call serverstart(tempname())
@@ -6675,6 +6853,7 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
nr error number
text description of the error
type single-character error type, 'E', 'W', etc.
+ valid recognized error message
The "col", "vcol", "nr", "type" and "text" entries are
optional. Either "lnum" or "pattern" entry can be used to
@@ -6684,21 +6863,26 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
item will not be handled as an error line.
If both "pattern" and "lnum" are present then "pattern" will
be used.
+ If the "valid" entry is not supplied, then the valid flag is
+ set when "bufnr" is a valid buffer or "filename" exists.
If you supply an empty {list}, the quickfix list will be
cleared.
Note that the list is not exactly the same as what
|getqflist()| returns.
- *E927*
- If {action} is set to 'a', then the items from {list} are
- added to the existing quickfix list. If there is no existing
- list, then a new list is created.
+ {action} values: *E927*
+ 'a' The items from {list} are added to the existing
+ quickfix list. If there is no existing list, then a
+ new list is created.
- If {action} is set to 'r', then the items from the current
- quickfix list are replaced with the items from {list}. This
- can also be used to clear the list: >
- :call setqflist([], 'r')
+ 'r' The items from the current quickfix list are replaced
+ with the items from {list}. This can also be used to
+ clear the list: >
+ :call setqflist([], 'r')
<
+ 'f' All the quickfix lists in the quickfix stack are
+ freed.
+
If {action} is not present or is set to ' ', then a new list
is created.
@@ -6709,7 +6893,12 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
only the items listed in {what} are set. The first {list}
argument is ignored. The following items can be specified in
{what}:
- nr list number in the quickfix stack
+ context any Vim type can be stored as a context
+ items list of quickfix entries. Same as the {list}
+ argument.
+ nr list number in the quickfix stack; zero
+ means the current quickfix list and '$' means
+ the last quickfix list
title quickfix list title text
Unsupported keys in {what} are ignored.
If the "nr" item is not present, then the current quickfix list
@@ -6723,13 +6912,13 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
This function can be used to create a quickfix list
independent of the 'errorformat' setting. Use a command like
- ":cc 1" to jump to the first position.
+ `:cc 1` to jump to the first position.
*setreg()*
setreg({regname}, {value} [, {options}])
Set the register {regname} to {value}.
- {value} may be any value returned by |getreg()|, including
+ {value} may be any value returned by |getreg()|, including
a |List|.
If {options} contains "a" or {regname} is upper case,
then the value is appended.
@@ -6745,14 +6934,14 @@ setreg({regname}, {value} [, {options}])
set to point to register {regname}.
If {options} contains no register settings, then the default
- is to use character mode unless {value} ends in a <NL> for
- string {value} and linewise mode for list {value}. Blockwise
+ is to use character mode unless {value} ends in a <NL> for
+ string {value} and linewise mode for list {value}. Blockwise
mode is never selected automatically.
Returns zero for success, non-zero for failure.
*E883*
- Note: you may not use |List| containing more than one item to
- set search and expression registers. Lists containing no
+ Note: you may not use |List| containing more than one item to
+ set search and expression registers. Lists containing no
items act like empty strings.
Examples: >
@@ -6761,9 +6950,9 @@ setreg({regname}, {value} [, {options}])
:call setreg('a', "1\n2\n3", 'b5')
< This example shows using the functions to save and restore a
- register (note: you may not reliably restore register value
- without using the third argument to |getreg()| as without it
- newlines are represented as newlines AND Nul bytes are
+ register (note: you may not reliably restore register value
+ without using the third argument to |getreg()| as without it
+ newlines are represented as newlines AND Nul bytes are
represented as newlines as well, see |NL-used-for-Nul|). >
:let var_a = getreg('a', 1, 1)
:let var_amode = getregtype('a')
@@ -6814,18 +7003,22 @@ shellescape({string} [, {special}]) *shellescape()*
quotes within {string}.
Otherwise, it will enclose {string} in single quotes and
replace all "'" with "'\''".
+
When the {special} argument is present and it's a non-zero
Number or a non-empty String (|non-zero-arg|), then special
items such as "!", "%", "#" and "<cword>" will be preceded by
a backslash. This backslash will be removed again by the |:!|
command.
+
The "!" character will be escaped (again with a |non-zero-arg|
{special}) when 'shell' contains "csh" in the tail. That is
because for csh and tcsh "!" is used for history replacement
even when inside single quotes.
- The <NL> character is also escaped. With a |non-zero-arg|
- {special} and 'shell' containing "csh" in the tail it's
+
+ With a |non-zero-arg| {special} the <NL> character is also
+ escaped. When 'shell' containing "csh" in the tail it's
escaped a second time.
+
Example of use with a |:!| command: >
:exe '!dir ' . shellescape(expand('<cfile>'), 1)
< This results in a directory listing for the file under the
@@ -6892,20 +7085,25 @@ sockconnect({mode}, {address}, {opts}) *sockconnect()*
{address} should be the path of a named pipe. If {mode} is
"tcp" then {address} should be of the form "host:port" where
the host should be an ip adderess or host name, and port the
- port number. Currently only rpc sockets are supported, so
- {opts} must be passed with "rpc" set to |TRUE|.
+ port number.
+
+ Returns a |channel| ID. Close the socket with |chanclose()|.
+ Use |chansend()| to send data over a bytes socket, and
+ |rpcrequest()| and |rpcnotify()| to communicate with a RPC
+ socket.
{opts} is a dictionary with these keys:
- rpc : If set, |msgpack-rpc| will be used to communicate
- over the socket.
+ |on_data| : callback invoked when data was read from socket
+ data_buffered : read data from socket in |buffered| mode.
+ rpc : If set, |msgpack-rpc| will be used to communicate
+ over the socket.
Returns:
- - The channel ID on success, which is used by
- |rpcnotify()| and |rpcrequest()| and |rpcstop()|.
+ - The channel ID on success (greater than zero)
- 0 on invalid arguments or connection failure.
sort({list} [, {func} [, {dict}]]) *sort()* *E702*
Sort the items in {list} in-place. Returns {list}.
-
+
If you want a list to remain unmodified make a copy first: >
:let sortedlist = sort(copy(mylist))
@@ -6916,7 +7114,7 @@ sort({list} [, {func} [, {dict}]]) *sort()* *E702*
When {func} is given and it is '1' or 'i' then case is
ignored.
-
+
When {func} is given and it is 'n' then all items will be
sorted numerical (Implementation detail: This uses the
strtod() function to parse numbers, Strings, Lists, Dicts and
@@ -7052,6 +7250,27 @@ sqrt({expr}) *sqrt()*
"nan" may be different, it depends on system libraries.
+stdioopen({opts}) *stdioopen()*
+ In a nvim launched with the |--headless| option, this opens
+ stdin and stdout as a |channel|. This function can only be
+ invoked once per instance. See |channel-stdio| for more
+ information and examples. Note that stderr is not handled by
+ this function, see |v:stderr|.
+
+ Returns a |channel| ID. Close the stdio descriptors with |chanclose()|.
+ Use |chansend()| to send data to stdout, and
+ |rpcrequest()| and |rpcnotify()| to communicate over RPC.
+
+ {opts} is a dictionary with these keys:
+ |on_stdin| : callback invoked when stdin is written to.
+ stdin_buffered : read stdin in |buffered| mode.
+ rpc : If set, |msgpack-rpc| will be used to communicate
+ over stdio
+ Returns:
+ - The channel ID on success (this is always 1)
+ - 0 on invalid arguments
+
+
str2float({expr}) *str2float()*
Convert String {expr} to a Float. This mostly works the same
as when using a floating point number in an expression, see
@@ -7086,7 +7305,7 @@ strchars({expr} [, {skipcc}]) *strchars()*
counted separately.
When {skipcc} set to 1, Composing characters are ignored.
Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.
-
+
{skipcc} is only available after 7.4.755. For backward
compatibility, you can define a wrapper function: >
if has("patch-7.4.755")
@@ -7103,7 +7322,7 @@ strchars({expr} [, {skipcc}]) *strchars()*
endfunction
endif
<
-strcharpart({src}, {start}[, {len}]) *strcharpart()*
+strcharpart({src}, {start} [, {len}]) *strcharpart()*
Like |strpart()| but using character index and length instead
of byte index and length.
When a character index is used where a character does not
@@ -7111,7 +7330,7 @@ strcharpart({src}, {start}[, {len}]) *strcharpart()*
strcharpart('abc', -1, 2)
< results in 'a'.
-strdisplaywidth({expr}[, {col}]) *strdisplaywidth()*
+strdisplaywidth({expr} [, {col}]) *strdisplaywidth()*
The result is a Number, which is the number of display cells
String {expr} occupies on the screen when it starts at {col}.
When {col} is omitted zero is used. Otherwise it is the
@@ -7175,20 +7394,20 @@ string({expr}) Return {expr} converted to a String. If {expr} is a Number,
{expr} type result ~
String 'string'
Number 123
- Float 123.123456 or 1.123456e8 or
+ Float 123.123456 or 1.123456e8 or
`str2float('inf')`
Funcref `function('name')`
List [item, item]
Dictionary {key: value, key: value}
Note that in String values the ' character is doubled.
Also see |strtrans()|.
- Note 2: Output format is mostly compatible with YAML, except
- for infinite and NaN floating-point values representations
- which use |str2float()|. Strings are also dumped literally,
- only single quote is escaped, which does not allow using YAML
- for parsing back binary strings. |eval()| should always work for
- strings and floats though and this is the only official
- method, use |msgpackdump()| or |json_encode()| if you need to
+ Note 2: Output format is mostly compatible with YAML, except
+ for infinite and NaN floating-point values representations
+ which use |str2float()|. Strings are also dumped literally,
+ only single quote is escaped, which does not allow using YAML
+ for parsing back binary strings. |eval()| should always work for
+ strings and floats though and this is the only official
+ method, use |msgpackdump()| or |json_encode()| if you need to
share data with other application.
*strlen()*
@@ -7200,7 +7419,7 @@ strlen({expr}) The result is a Number, which is the length of the String
|strchars()|.
Also see |len()|, |strdisplaywidth()| and |strwidth()|.
-strpart({src}, {start}[, {len}]) *strpart()*
+strpart({src}, {start} [, {len}]) *strpart()*
The result is a String, which is part of {src}, starting from
byte {start}, with the byte length {len}.
To count characters instead of bytes use |strcharpart()|.
@@ -7252,7 +7471,7 @@ strwidth({expr}) *strwidth()*
Ambiguous, this function's return value depends on 'ambiwidth'.
Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
-submatch({nr}[, {list}]) *submatch()* *E935*
+submatch({nr} [, {list}]) *submatch()* *E935*
Only for an expression in a |:substitute| command or
substitute() function.
Returns the {nr}'th submatch of the matched text. When {nr}
@@ -7261,14 +7480,17 @@ submatch({nr}[, {list}]) *submatch()* *E935*
multi-line match or a NUL character in the text.
Also see |sub-replace-expression|.
- If {list} is present and non-zero then submatch() returns
- a list of strings, similar to |getline()| with two arguments.
+ If {list} is present and non-zero then submatch() returns
+ a list of strings, similar to |getline()| with two arguments.
NL characters in the text represent NUL characters in the
text.
Only returns more than one item for |:substitute|, inside
|substitute()| this list will always contain one or zero
items, since there are no real line breaks.
+ When substitute() is used recursively only the submatches in
+ the current (deepest) call can be obtained.
+
Example: >
:s/\d\+/\=submatch(0) + 1/
< This finds the first number in the line and adds one to it.
@@ -7279,7 +7501,7 @@ substitute({expr}, {pat}, {sub}, {flags}) *substitute()*
the first match of {pat} is replaced with {sub}.
When {flags} is "g", all matches of {pat} in {expr} are
replaced. Otherwise {flags} should be "".
-
+
This works like the ":substitute" command (without any flags).
But the matching with {pat} is always done like the 'magic'
option is set and 'cpoptions' is empty (to make scripts
@@ -7380,17 +7602,29 @@ synIDtrans({synID}) *synIDtrans()*
":highlight link" are followed.
synconcealed({lnum}, {col}) *synconcealed()*
- The result is a List. The first item in the list is 0 if the
- character at the position {lnum} and {col} is not part of a
- concealable region, 1 if it is. The second item in the list is
- a string. If the first item is 1, the second item contains the
- text which will be displayed in place of the concealed text,
- depending on the current setting of 'conceallevel'. The third
- and final item in the list is a unique number representing the
- specific syntax region matched. This allows detection of the
- beginning of a new concealable region if there are two
- consecutive regions with the same replacement character.
- For an example use see $VIMRUNTIME/syntax/2html.vim .
+ The result is a List with currently three items:
+ 1. The first item in the list is 0 if the character at the
+ position {lnum} and {col} is not part of a concealable
+ region, 1 if it is.
+ 2. The second item in the list is a string. If the first item
+ is 1, the second item contains the text which will be
+ displayed in place of the concealed text, depending on the
+ current setting of 'conceallevel' and 'listchars'.
+ 3. The third and final item in the list is a number
+ representing the specific syntax region matched in the
+ line. When the character is not concealed the value is
+ zero. This allows detection of the beginning of a new
+ concealable region if there are two consecutive regions
+ with the same replacement character. For an example, if
+ the text is "123456" and both "23" and "45" are concealed
+ and replace by the character "X", then:
+ call returns ~
+ synconcealed(lnum, 1) [0, '', 0]
+ synconcealed(lnum, 2) [1, 'X', 1]
+ synconcealed(lnum, 3) [1, 'X', 1]
+ synconcealed(lnum, 4) [1, 'X', 2]
+ synconcealed(lnum, 5) [1, 'X', 2]
+ synconcealed(lnum, 6) [0, '', 0]
synstack({lnum}, {col}) *synstack()*
@@ -7423,6 +7657,9 @@ system({cmd} [, {input}]) *system()* *E677*
|writefile()| does with {binary} set to "b" (i.e. with
a newline between each list item, and newlines inside list
items converted to NULs).
+ When {input} is given and is a valid buffer id, the content of
+ the buffer is written to the file line by line, each line
+ terminated by a NL (and NUL where the text has NL).
*E5677*
Note: system() cannot write to or read from backgrounded ("&")
shell commands, e.g.: >
@@ -7433,10 +7670,10 @@ system({cmd} [, {input}]) *system()* *E677*
redirection syntax) before input can reach it. Use
|jobstart()| instead.
- Note: Use |shellescape()| or |::S| with |expand()| or
- |fnamemodify()| to escape special characters in a command
- argument. Newlines in {cmd} may cause the command to fail.
- The characters in 'shellquote' and 'shellxquote' may also
+ Note: Use |shellescape()| or |::S| with |expand()| or
+ |fnamemodify()| to escape special characters in a command
+ argument. Newlines in {cmd} may cause the command to fail.
+ The characters in 'shellquote' and 'shellxquote' may also
cause trouble.
The result is a String. Example: >
@@ -7463,9 +7700,9 @@ system({cmd} [, {input}]) *system()* *E677*
systemlist({cmd} [, {input} [, {keepempty}]]) *systemlist()*
- Same as |system()|, but returns a |List| with lines (parts of
- output separated by NL) with NULs transformed into NLs. Output
- is the same as |readfile()| will output with {binary} argument
+ Same as |system()|, but returns a |List| with lines (parts of
+ output separated by NL) with NULs transformed into NLs. Output
+ is the same as |readfile()| will output with {binary} argument
set to "b", except that a final newline is not preserved,
unless {keepempty} is non-zero.
Note that on MS-Windows you may get trailing CR characters.
@@ -7513,7 +7750,7 @@ tagfiles() Returns a |List| with the file names used to search for tags
for the current buffer. This is the 'tags' option expanded.
-taglist({expr}[, {filename}]) *taglist()*
+taglist({expr} [, {filename}]) *taglist()*
Returns a list of tags matching the regular expression {expr}.
If {filename} is passed it is used to prioritize the results
@@ -7542,7 +7779,7 @@ taglist({expr}[, {filename}]) *taglist()*
may appear, they give the name of the entity the tag is
contained in.
- The ex-command 'cmd' can be either an ex search pattern, a
+ The ex-command "cmd" can be either an ex search pattern, a
line number or a line number followed by a byte number.
If there are no matching tags, then an empty list is returned.
@@ -7577,7 +7814,7 @@ termopen({cmd}[, {opts}]) {Nvim} *termopen()*
and `$TERM` is set to "xterm-256color".
Returns the same values as |jobstart()|.
- See |terminal-emulator| for more information.
+ See |terminal| for more information.
test_garbagecollect_now() *test_garbagecollect_now()*
Like garbagecollect(), but executed right away. This must
@@ -7729,7 +7966,7 @@ type({expr}) *type()*
:if type(myvar) == type({})
:if type(myvar) == type(0.0)
:if type(myvar) == type(v:true)
-< In place of checking for |v:null| type it is better to check
+< In place of checking for |v:null| type it is better to check
for |v:null| directly as it is the only value of this type: >
:if myvar is v:null
< To check if the v:t_ variables exist use this: >
@@ -7761,7 +7998,7 @@ undotree() *undotree()*
"save_last" Number of the last file write. Zero when no
write yet.
"save_cur" Number of the current position in the undo
- tree.
+ tree.
"synced" Non-zero when the last undo block was synced.
This happens when waiting from input from the
user. See |undo-blocks|.
@@ -7920,6 +8157,7 @@ winheight({nr}) *winheight()*
When {nr} is zero, the height of the current window is
returned. When window {nr} doesn't exist, -1 is returned.
An existing window always has a height of zero or more.
+ This excludes any window toolbar line.
Examples: >
:echo "The current window has " . winheight(0) . " lines."
<
@@ -8045,10 +8283,10 @@ writefile({list}, {fname} [, {flags}])
:call writefile(["foo"], "event.log", "a")
:call writefile(["bar"], "event.log", "a")
<
- When {flags} contains "S" fsync() call is not used, with "s"
- it is used, 'fsync' option applies by default. No fsync()
- means that writefile() will finish faster, but writes may be
- left in OS buffers and not yet written to disk. Such changes
+ When {flags} contains "S" fsync() call is not used, with "s"
+ it is used, 'fsync' option applies by default. No fsync()
+ means that writefile() will finish faster, but writes may be
+ left in OS buffers and not yet written to disk. Such changes
will disappear if system crashes before OS does writing.
All NL characters are replaced with a NUL character.
@@ -8081,9 +8319,9 @@ There are four types of features:
Example: >
:if has("win32")
< *has-patch*
-3. {Nvim} version. The "nvim-1.2.3" feature means that the Nvim version is
- 1.2.3 or later. Example: >
- :if has("nvim-1.2.3")
+3. Nvim version. The "nvim-0.2.1" feature means that the Nvim version is
+ 0.2.1 or later. Example: >
+ :if has("nvim-0.2.1")
<
4. Included patches. The "patch123" feature means that patch 123 has been
included. Note that this form does not check the version of Vim, you need
@@ -8153,7 +8391,7 @@ lispindent Compiled with support for lisp indenting.
listcmds Compiled with commands for the buffer list |:files|
and the argument list |arglist|.
localmap Compiled with local mappings and abbr. |:map-local|
-mac macOS version of Vim.
+mac macOS version of Nvim.
menu Compiled with support for |:menu|.
mksession Compiled with support for |:mksession|.
modify_fname Compiled with file name modifiers. |filename-modifiers|
@@ -8197,6 +8435,8 @@ termresponse Compiled with support for |t_RV| and |v:termresponse|.
textobjects Compiled with support for |text-objects|.
timers Compiled with |timer_start()| support.
title Compiled with window title support |'title'|.
+ttyin input is a terminal (tty)
+ttyout output is a terminal (tty)
unix Unix version of Vim.
unnamedplus Compiled with support for "unnamedplus" in 'clipboard'
user_commands User-defined commands.
@@ -8214,6 +8454,7 @@ win32 Windows version of Vim (32 or 64 bit).
winaltkeys Compiled with 'winaltkeys' option.
windows Compiled with support for more than one window.
writebackup Compiled with 'writebackup' default on.
+wsl WSL (Windows Subsystem for Linux) version of Vim.
*string-match*
Matching a pattern in a String
@@ -8284,13 +8525,16 @@ See |:verbose-cmd| for more information.
*E124* *E125* *E853* *E884*
:fu[nction][!] {name}([arguments]) [range] [abort] [dict] [closure]
- Define a new function by the name {name}. The name
- must be made of alphanumeric characters and '_', and
- must start with a capital or "s:" (see above). Note
- that using "b:" or "g:" is not allowed. (since patch
- 7.4.260 E884 is given if the function name has a colon
- in the name, e.g. for "foo:bar()". Before that patch
- no error was given).
+ Define a new function by the name {name}. The body of
+ the function follows in the next lines, until the
+ matching |:endfunction|.
+
+ The name must be made of alphanumeric characters and
+ '_', and must start with a capital or "s:" (see
+ above). Note that using "b:" or "g:" is not allowed.
+ (since patch 7.4.260 E884 is given if the function
+ name has a colon in the name, e.g. for "foo:bar()".
+ Before that patch no error was given).
{name} can also be a |Dictionary| entry that is a
|Funcref|: >
@@ -8405,9 +8649,10 @@ to the number of named arguments. When using "...", the number of arguments
may be larger.
It is also possible to define a function without any arguments. You must
-still supply the () then. The body of the function follows in the next lines,
-until the matching |:endfunction|. It is allowed to define another function
-inside a function body.
+still supply the () then.
+
+It is allowed to define another function inside a function
+body.
*local-variables*
Inside a function local variables can be used. These will disappear when the
@@ -8524,7 +8769,7 @@ like this: >
When such a function is called, and it is not defined yet, Vim will search the
"autoload" directories in 'runtimepath' for a script file called
-"filename.vim". For example "~/.config/nvim/autoload/filename.vim". That
+"filename.vim". For example "~/.config/nvim/autoload/filename.vim". That
file should then define the function like this: >
function filename#funcname()
@@ -8685,11 +8930,6 @@ This does NOT work: >
value and the global value are changed.
Example: >
:let &path = &path . ',/usr/local/include'
-< This also works for terminal codes in the form t_xx.
- But only for alphanumerical names. Example: >
- :let &t_k1 = "\<Esc>[234;"
-< When the code does not exist yet it will be created as
- a terminal key code, there is no error.
:let &{option-name} .= {expr1}
For a string option: Append {expr1} to the value.
@@ -8800,8 +9040,8 @@ This does NOT work: >
< *E741* *E940*
If you try to change a locked variable you get an
error message: "E741: Value is locked: {name}".
- If you try to lock or unlock a built-in variable you
- will get an error message "E940: Cannot lock or unlock
+ If you try to lock or unlock a built-in variable you
+ will get an error message "E940: Cannot lock or unlock
variable {name}".
[depth] is relevant when locking a |List| or
@@ -9060,17 +9300,17 @@ This does NOT work: >
with the |:redraw| command. Example: >
:new | redraw | echo "there is a new window"
< *:echo-self-refer*
- When printing nested containers echo prints second
- occurrence of the self-referencing container using
- "[...@level]" (self-referencing |List|) or
+ When printing nested containers echo prints second
+ occurrence of the self-referencing container using
+ "[...@level]" (self-referencing |List|) or
"{...@level}" (self-referencing |Dict|): >
:let l = []
:call add(l, l)
:let l2 = []
:call add(l2, [l2])
:echo l l2
-< echoes "[[...@0]] [[[...@0]]]". Echoing "[l]" will
- echo "[[[...@1]]]" because l first occurs at second
+< echoes "[[...@0]] [[[...@0]]]". Echoing "[l]" will
+ echo "[[[...@1]]]" because l first occurs at second
level.
*:echon*
@@ -10262,7 +10502,7 @@ code can be used: >
redir => scriptnames_output
silent scriptnames
redir END
-
+
" Split the output into lines and parse each line. Add an entry to the
" "scripts" dictionary.
let scripts = {}
@@ -10299,6 +10539,23 @@ missing: >
: echo "You will _never_ see this message"
:endif
+To execute a command only when the |+eval| feature is disabled requires a trick,
+as this example shows: >
+
+ silent! while 0
+ set history=111
+ silent! endwhile
+
+When the |+eval| feature is available the command is skipped because of the
+"while 0". Without the |+eval| feature the "while 0" is an error, which is
+silently ignored, and the command is executed.
+
+The "<CR>" here is a real CR character, type CTRL-V Enter to get it.
+
+When the |+eval| feature is available the ":" is remapped to add a double
+quote, which has the effect of commenting-out the command. Without the
+|+eval| feature the nnoremap command is skipped and the command is executed.
+
==============================================================================
11. The sandbox *eval-sandbox* *sandbox* *E48*
@@ -10343,7 +10600,7 @@ option will still be marked as it was set in the sandbox.
In a few situations it is not allowed to change the text in the buffer, jump
to another window and some other things that might confuse or break what Vim
is currently doing. This mostly applies to things that happen when Vim is
-actually doing something else. For example, evaluating the 'balloonexpr' may
+actually doing something else. For example, evaluating the 'balloonexpr' may
happen any moment the mouse cursor is resting at some position.
This is not allowed when the textlock is active:
@@ -10353,5 +10610,123 @@ This is not allowed when the textlock is active:
- closing a window or quitting Vim
- etc.
+==============================================================================
+13. Command-line expressions highlighting *expr-highlight*
+
+Expressions entered by the user in |i_CTRL-R_=|, |c_CTRL-\_e|, |quote=| are
+highlighted by the built-in expressions parser. It uses highlight groups
+described in the table below, which may be overriden by colorschemes.
+ *hl-NvimInvalid*
+Besides the "Nvim"-prefixed highlight groups described below, there are
+"NvimInvalid"-prefixed highlight groups which have the same meaning but
+indicate that the token contains an error or that an error occurred just
+before it. They have mostly the same hierarchy, except that (by default) in
+place of any non-Nvim-prefixed group NvimInvalid linking to `Error` is used
+and some other intermediate groups are present.
+
+Group Default link Colored expression ~
+*hl-NvimInternalError* None, red/red Parser bug
+
+*hl-NvimAssignment* Operator Generic assignment
+*hl-NvimPlainAssignment* NvimAssignment `=` in |:let|
+*hl-NvimAugmentedAssignment* NvimAssignment Generic, `+=`/`-=`/`.=`
+*hl-NvimAssignmentWithAddition* NvimAugmentedAssignment `+=` in |:let+=|
+*hl-NvimAssignmentWithSubtraction* NvimAugmentedAssignment `-=` in |:let-=|
+*hl-NvimAssignmentWithConcatenation* NvimAugmentedAssignment `.=` in |:let.=|
+
+*hl-NvimOperator* Operator Generic operator
+
+*hl-NvimUnaryOperator* NvimOperator Generic unary op
+*hl-NvimUnaryPlus* NvimUnaryOperator |expr-unary-+|
+*hl-NvimUnaryMinus* NvimUnaryOperator |expr-unary--|
+*hl-NvimNot* NvimUnaryOperator |expr-!|
+
+*hl-NvimBinaryOperator* NvimOperator Generic binary op
+*hl-NvimComparison* NvimBinaryOperator Any |expr4| operator
+*hl-NvimComparisonModifier* NvimComparison `#`/`?` near |expr4| op
+*hl-NvimBinaryPlus* NvimBinaryOperator |expr-+|
+*hl-NvimBinaryMinus* NvimBinaryOperator |expr--|
+*hl-NvimConcat* NvimBinaryOperator |expr-.|
+*hl-NvimConcatOrSubscript* NvimConcat |expr-.| or |expr-entry|
+*hl-NvimOr* NvimBinaryOperator |expr-barbar|
+*hl-NvimAnd* NvimBinaryOperator |expr-&&|
+*hl-NvimMultiplication* NvimBinaryOperator |expr-star|
+*hl-NvimDivision* NvimBinaryOperator |expr-/|
+*hl-NvimMod* NvimBinaryOperator |expr-%|
+
+*hl-NvimTernary* NvimOperator `?` in |expr1|
+*hl-NvimTernaryColon* NvimTernary `:` in |expr1|
+
+*hl-NvimParenthesis* Delimiter Generic bracket
+*hl-NvimLambda* NvimParenthesis `{`/`}` in |lambda|
+*hl-NvimNestingParenthesis* NvimParenthesis `(`/`)` in |expr-nesting|
+*hl-NvimCallingParenthesis* NvimParenthesis `(`/`)` in |expr-function|
+
+*hl-NvimSubscript* NvimParenthesis Generic subscript
+*hl-NvimSubscriptBracket* NvimSubscript `[`/`]` in |expr-[]|
+*hl-NvimSubscriptColon* NvimSubscript `:` in |expr-[:]|
+*hl-NvimCurly* NvimSubscript `{`/`}` in
+ |curly-braces-names|
+
+*hl-NvimContainer* NvimParenthesis Generic container
+*hl-NvimDict* NvimContainer `{`/`}` in |dict| literal
+*hl-NvimList* NvimContainer `[`/`]` in |list| literal
+
+*hl-NvimIdentifier* Identifier Generic identifier
+*hl-NvimIdentifierScope* NvimIdentifier Namespace: letter
+ before `:` in
+ |internal-variables|
+*hl-NvimIdentifierScopeDelimiter* NvimIdentifier `:` after namespace
+ letter
+*hl-NvimIdentifierName* NvimIdentifier Rest of the ident
+*hl-NvimIdentifierKey* NvimIdentifier Identifier after
+ |expr-entry|
+
+*hl-NvimColon* Delimiter `:` in |dict| literal
+*hl-NvimComma* Delimiter `,` in |dict|/|list|
+ literal or
+ |expr-function|
+*hl-NvimArrow* Delimiter `->` in |lambda|
+
+*hl-NvimRegister* SpecialChar |expr-register|
+*hl-NvimNumber* Number Non-prefix digits
+ in integer
+ |expr-number|
+*hl-NvimNumberPrefix* Type `0` for |octal-number|
+ `0x` for |hex-number|
+ `0b` for |binary-number|
+*hl-NvimFloat* NvimNumber Floating-point
+ number
+
+*hl-NvimOptionSigil* Type `&` in |expr-option|
+*hl-NvimOptionScope* NvimIdentifierScope Option scope if any
+*hl-NvimOptionScopeDelimiter* NvimIdentifierScopeDelimiter
+ `:` after option scope
+*hl-NvimOptionName* NvimIdentifier Option name
+
+*hl-NvimEnvironmentSigil* NvimOptionSigil `$` in |expr-env|
+*hl-NvimEnvironmentName* NvimIdentifier Env variable name
+
+*hl-NvimString* String Generic string
+*hl-NvimStringBody* NvimString Generic string
+ literal body
+*hl-NvimStringQuote* NvimString Generic string quote
+*hl-NvimStringSpecial* SpecialChar Generic string
+ non-literal body
+
+*hl-NvimSingleQuote* NvimStringQuote `'` in |expr-'|
+*hl-NvimSingleQuotedBody* NvimStringBody Literal part of
+ |expr-'| string body
+*hl-NvimSingleQuotedQuote* NvimStringSpecial `''` inside |expr-'|
+ string body
+
+*hl-NvimDoubleQuote* NvimStringQuote `"` in |expr-quote|
+*hl-NvimDoubleQuotedBody* NvimStringBody Literal part of
+ |expr-quote| body
+*hl-NvimDoubleQuotedEscape* NvimStringSpecial Valid |expr-quote|
+ escape sequence
+*hl-NvimDoubleQuotedUnknownEscape* NvimInvalidValue Unrecognized
+ |expr-quote| escape
+ sequence
vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index 64d9c6daa9..74c453f79a 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -8,7 +8,7 @@ Filetypes *filetype* *file-type*
Also see |autocmd.txt|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Filetypes *filetypes* *file-types*
@@ -24,15 +24,13 @@ Each time a new or existing file is edited, Vim will try to recognize the type
of the file and set the 'filetype' option. This will trigger the FileType
event, which can be used to set the syntax highlighting, set options, etc.
-Detail: The ":filetype on" command will load one of these files:
- Mac $VIMRUNTIME/filetype.vim
- MS-DOS $VIMRUNTIME\filetype.vim
- Unix $VIMRUNTIME/filetype.vim
+Detail: The ":filetype on" command will load this file:
+ $VIMRUNTIME/filetype.vim
This file is a Vim script that defines autocommands for the
BufNewFile and BufRead events. If the file type is not found by the
name, the file $VIMRUNTIME/scripts.vim is used to detect it from the
contents of the file.
- When the GUI is running or will start soon, the menu.vim script is
+ When the GUI is running or will start soon, the |menu.vim| script is
also sourced. See |'go-M'| about avoiding that.
To add your own file types, see |new-filetype| below. To search for help on a
@@ -309,12 +307,12 @@ define yourself. There are a few ways to avoid this:
You need to define your own mapping before the plugin is loaded (before
editing a file of that type). The plugin will then skip installing the
default mapping.
-
+ *no_mail_maps*
3. Disable defining mappings for a specific filetype by setting a variable,
which contains the name of the filetype. For the "mail" filetype this
would be: >
:let no_mail_maps = 1
-
+< *no_plugin_maps*
4. Disable defining mappings for all filetypes by setting a variable: >
:let no_plugin_maps = 1
<
@@ -540,7 +538,7 @@ K or CTRL-] Jump to the manpage for the <cWORD> under the
cursor. Takes a count for the section.
CTRL-T Jump back to the location that the manpage was
opened from.
-META-] Show the manpage outline in the |location-list|.
+gO Show the manpage outline. |gO|
q :quit if invoked as $MANPAGER, otherwise :close.
Variables:
@@ -724,6 +722,12 @@ Format description:
not recognized here as well.
+RUST *ft-rust*
+
+Since the text for this plugin is rather long it has been put in a separate
+file: |ft_rust.txt|.
+
+
SQL *ft-sql*
Since the text for this plugin is rather long it has been put in a separate
diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt
index 88dde9f61d..c644d63280 100644
--- a/runtime/doc/fold.txt
+++ b/runtime/doc/fold.txt
@@ -9,7 +9,7 @@ Folding *Folding* *folding* *folds*
You can find an introduction on folding in chapter 28 of the user manual.
|usr_28.txt|
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Fold methods *fold-methods*
@@ -58,7 +58,7 @@ whichever is lower. These are empty or white lines and lines starting
with a character in 'foldignore'. White space is skipped before checking for
characters in 'foldignore'. For C use "#" to ignore preprocessor lines.
-When you want to ignore lines in another way, use the 'expr' method. The
+When you want to ignore lines in another way, use the "expr" method. The
|indent()| function can be used in 'foldexpr' to get the indent of a line.
@@ -73,7 +73,7 @@ This will call a function to compute the fold level: >
:set foldexpr=MyFoldLevel(v:lnum)
This will make a fold out of paragraphs separated by blank lines: >
:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
-this does the same: >
+This does the same: >
:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1
Note that backslashes must be used to escape characters that ":set" handles
@@ -133,7 +133,7 @@ fold level. But note that foldlevel() may return -1 if the level is not known
yet. And it returns the level at the start of the line, while a fold might
end in that line.
-It may happened that folds are not updated properly. You can use |zx| or |zX|
+It may happen that folds are not updated properly. You can use |zx| or |zX|
to force updating folds.
@@ -197,7 +197,7 @@ and the level given by the marker:
1. If a marker with the same fold level is encountered, the previous fold
ends and another fold with the same level starts.
2. If a marker with a higher fold level is found, a nested fold is started.
-3. if a marker with a lower fold level is found, all folds up to and including
+3. If a marker with a lower fold level is found, all folds up to and including
this level end and a fold with the specified level starts.
The number indicates the fold level. A zero cannot be used (a marker with
diff --git a/runtime/doc/ft_ada.txt b/runtime/doc/ft_ada.txt
index 94d97b481a..c1aa0904c4 100644
--- a/runtime/doc/ft_ada.txt
+++ b/runtime/doc/ft_ada.txt
@@ -116,7 +116,7 @@ NOTE: "gnat xref -v" is very tricky to use as it has almost no diagnostic
then "gnat xref -v *.ad?"
4) Project manager support is completely broken - don't even try "gnat xref
-Padacl.gpr".
-5) VIM is faster when the tags file is sorted - use "sort --unique
+5) Vim is faster when the tags file is sorted - use "sort --unique
--ignore-case --output=tags tags" .
6) Remember to insert "!_TAG_FILE_SORTED 2 %sort ui" as first line to mark
the file assorted.
diff --git a/runtime/doc/ft_rust.txt b/runtime/doc/ft_rust.txt
new file mode 100644
index 0000000000..750ba76afc
--- /dev/null
+++ b/runtime/doc/ft_rust.txt
@@ -0,0 +1,237 @@
+*ft_rust.txt* Filetype plugin for Rust
+
+==============================================================================
+CONTENTS *rust*
+
+1. Introduction |rust-intro|
+2. Settings |rust-settings|
+3. Commands |rust-commands|
+4. Mappings |rust-mappings|
+
+==============================================================================
+INTRODUCTION *rust-intro*
+
+This plugin provides syntax and supporting functionality for the Rust
+filetype.
+
+==============================================================================
+SETTINGS *rust-settings*
+
+This plugin has a few variables you can define in your vimrc that change the
+behavior of the plugin.
+
+ *g:rustc_path*
+g:rustc_path~
+ Set this option to the path to rustc for use in the |:RustRun| and
+ |:RustExpand| commands. If unset, "rustc" will be located in $PATH: >
+ let g:rustc_path = $HOME."/bin/rustc"
+<
+
+ *g:rustc_makeprg_no_percent*
+g:rustc_makeprg_no_percent~
+ Set this option to 1 to have 'makeprg' default to "rustc" instead of
+ "rustc %": >
+ let g:rustc_makeprg_no_percent = 1
+<
+
+ *g:rust_conceal*
+g:rust_conceal~
+ Set this option to turn on the basic |conceal| support: >
+ let g:rust_conceal = 1
+<
+
+ *g:rust_conceal_mod_path*
+g:rust_conceal_mod_path~
+ Set this option to turn on |conceal| for the path connecting token
+ "::": >
+ let g:rust_conceal_mod_path = 1
+<
+
+ *g:rust_conceal_pub*
+g:rust_conceal_pub~
+ Set this option to turn on |conceal| for the "pub" token: >
+ let g:rust_conceal_pub = 1
+<
+
+ *g:rust_recommended_style*
+g:rust_recommended_style~
+ Set this option to enable vim indentation and textwidth settings to
+ conform to style conventions of the rust standard library (i.e. use 4
+ spaces for indents and sets 'textwidth' to 99). This option is enabled
+ by default. To disable it: >
+ let g:rust_recommended_style = 0
+<
+
+ *g:rust_fold*
+g:rust_fold~
+ Set this option to turn on |folding|: >
+ let g:rust_fold = 1
+<
+ Value Effect ~
+ 0 No folding
+ 1 Braced blocks are folded. All folds are open by
+ default.
+ 2 Braced blocks are folded. 'foldlevel' is left at the
+ global value (all folds are closed by default).
+
+ *g:rust_bang_comment_leader*
+g:rust_bang_comment_leader~
+ Set this option to 1 to preserve the leader on multi-line doc comments
+ using the /*! syntax: >
+ let g:rust_bang_comment_leader = 1
+<
+
+ *g:ftplugin_rust_source_path*
+g:ftplugin_rust_source_path~
+ Set this option to a path that should be prepended to 'path' for Rust
+ source files: >
+ let g:ftplugin_rust_source_path = $HOME.'/dev/rust'
+<
+
+ *g:rustfmt_command*
+g:rustfmt_command~
+ Set this option to the name of the 'rustfmt' executable in your $PATH. If
+ not specified it defaults to 'rustfmt' : >
+ let g:rustfmt_command = 'rustfmt'
+<
+ *g:rustfmt_autosave*
+g:rustfmt_autosave~
+ Set this option to 1 to run |:RustFmt| automatically when saving a
+ buffer. If not specified it defaults to 0 : >
+ let g:rustfmt_autosave = 0
+<
+ *g:rustfmt_fail_silently*
+g:rustfmt_fail_silently~
+ Set this option to 1 to prevent 'rustfmt' from populating the
+ |location-list| with errors. If not specified it defaults to 0: >
+ let g:rustfmt_fail_silently = 0
+<
+ *g:rustfmt_options*
+g:rustfmt_options~
+ Set this option to a string of options to pass to 'rustfmt'. The
+ write-mode is already set to 'overwrite'. If not specified it
+ defaults to '' : >
+ let g:rustfmt_options = ''
+<
+
+ *g:rust_playpen_url*
+g:rust_playpen_url~
+ Set this option to override the URL for the playpen to use: >
+ let g:rust_playpen_url = 'https://play.rust-lang.org/'
+<
+
+ *g:rust_shortener_url*
+g:rust_shortener_url~
+ Set this option to override the URL for the URL shortener: >
+ let g:rust_shortener_url = 'https://is.gd/'
+<
+
+
+==============================================================================
+COMMANDS *rust-commands*
+
+:RustRun [args] *:RustRun*
+:RustRun! [rustc-args] [--] [args]
+ Compiles and runs the current file. If it has unsaved changes,
+ it will be saved first using |:update|. If the current file is
+ an unnamed buffer, it will be written to a temporary file
+ first. The compiled binary is always placed in a temporary
+ directory, but is run from the current directory.
+
+ The arguments given to |:RustRun| will be passed to the
+ compiled binary.
+
+ If ! is specified, the arguments are passed to rustc instead.
+ A "--" argument will separate the rustc arguments from the
+ arguments passed to the binary.
+
+ If |g:rustc_path| is defined, it is used as the path to rustc.
+ Otherwise it is assumed rustc can be found in $PATH.
+
+:RustExpand [args] *:RustExpand*
+:RustExpand! [TYPE] [args]
+ Expands the current file using --pretty and displays the
+ results in a new split. If the current file has unsaved
+ changes, it will be saved first using |:update|. If the
+ current file is an unnamed buffer, it will be written to a
+ temporary file first.
+
+ The arguments given to |:RustExpand| will be passed to rustc.
+ This is largely intended for specifying various --cfg
+ configurations.
+
+ If ! is specified, the first argument is the expansion type to
+ pass to rustc --pretty. Otherwise it will default to
+ "expanded".
+
+ If |g:rustc_path| is defined, it is used as the path to rustc.
+ Otherwise it is assumed rustc can be found in $PATH.
+
+:RustEmitIr [args] *:RustEmitIr*
+ Compiles the current file to LLVM IR and displays the results
+ in a new split. If the current file has unsaved changes, it
+ will be saved first using |:update|. If the current file is an
+ unnamed buffer, it will be written to a temporary file first.
+
+ The arguments given to |:RustEmitIr| will be passed to rustc.
+
+ If |g:rustc_path| is defined, it is used as the path to rustc.
+ Otherwise it is assumed rustc can be found in $PATH.
+
+:RustEmitAsm [args] *:RustEmitAsm*
+ Compiles the current file to assembly and displays the results
+ in a new split. If the current file has unsaved changes, it
+ will be saved first using |:update|. If the current file is an
+ unnamed buffer, it will be written to a temporary file first.
+
+ The arguments given to |:RustEmitAsm| will be passed to rustc.
+
+ If |g:rustc_path| is defined, it is used as the path to rustc.
+ Otherwise it is assumed rustc can be found in $PATH.
+
+:RustPlay *:RustPlay*
+ This command will only work if you have web-api.vim installed
+ (available at https://github.com/mattn/webapi-vim). It sends the
+ current selection, or if nothing is selected, the entirety of the
+ current buffer to the Rust playpen, and emits a message with the
+ shortened URL to the playpen.
+
+ |g:rust_playpen_url| is the base URL to the playpen, by default
+ "https://play.rust-lang.org/".
+
+ |g:rust_shortener_url| is the base URL for the shortener, by
+ default "https://is.gd/"
+
+:RustFmt *:RustFmt*
+ Runs |g:rustfmt_command| on the current buffer. If
+ |g:rustfmt_options| is set then those will be passed to the
+ executable.
+
+ If |g:rustfmt_fail_silently| is 0 (the default) then it
+ will populate the |location-list| with the errors from
+ |g:rustfmt_command|. If |g:rustfmt_fail_silently| is set to 1
+ then it will not populate the |location-list|.
+
+:RustFmtRange *:RustFmtRange*
+ Runs |g:rustfmt_command| with selected range. See
+ |:RustFmt| for any other information.
+
+==============================================================================
+MAPPINGS *rust-mappings*
+
+This plugin defines mappings for |[[| and |]]| to support hanging indents.
+
+It also has a few other mappings:
+
+ *rust_<D-r>*
+<D-r> Executes |:RustRun| with no arguments.
+ Note: This binding is only available in MacVim.
+
+ *rust_<D-R>*
+<D-R> Populates the command line with |:RustRun|! using the
+ arguments given to the last invocation, but does not
+ execute it.
+ Note: This binding is only available in MacVim.
+
+==============================================================================
+ vim:tw=78:sw=4:noet:ts=8:ft=help:norl:
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index 0bd3a40a7c..904c4be19c 100644
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -6,7 +6,7 @@
Vim's Graphical User Interface *gui* *GUI*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Starting the GUI *gui-start* *E229* *E233*
@@ -46,7 +46,8 @@ When the GUI starts up initializations are carried out, in this order:
already set.
NOTE: All but the first one are not carried out if Vim was started with
-"-u NONE" and no "-U" argument was given, or when started with "-U NONE".
+"-u NONE" or "-u DEFAULTS" and no "-U" argument was given, or when started
+with "-U NONE".
All this happens AFTER the normal Vim initializations, like reading your
vimrc file. See |initialization|.
@@ -382,6 +383,7 @@ menus and menu items. They are most useful for things that you can't remember
what the key sequence was.
For creating menus in a different language, see |:menutrans|.
+If you don't want to use menus at all, see |'go-M'|.
*menu.vim*
The default menus are read from the file "$VIMRUNTIME/menu.vim". See
@@ -398,7 +400,11 @@ in the menu (which can take a bit of time to load). If you want to have all
filetypes already present at startup, add: >
:let do_syntax_sel_menu = 1
-<
+Note that the menu.vim is sourced when `:syntax on` or `:filetype on` is
+executed or after your .vimrc file is sourced. This means that the 'encoding'
+option and the language of messages (`:language messages`) must be set before
+that (if you want to change them).
+
*console-menus*
Although this documentation is in the GUI section, you can actually use menus
in console mode too. You will have to load |menu.vim| explicitly then, it is
@@ -490,9 +496,6 @@ expression register: >
:amenu Insert.foobar "='foobar'<CR>P
-Note that the '<' and 'k' flags in 'cpoptions' also apply here (when
-included they make the <> form and raw key codes not being recognized).
-
Note that <Esc> in Cmdline mode executes the command, like in a mapping. This
is Vi compatible. Use CTRL-C to quit Cmdline mode.
@@ -504,21 +507,13 @@ The ":set ic" will not be echoed when using this menu. Messages from the
executed command are still given though. To shut them up too, add a ":silent"
in the executed command: >
:menu <silent> Search.Header :exe ":silent normal /Header\r"<CR>
-"<silent>" may also appear just after "<special>" or "<script>".
-
- *:menu-<special>* *:menu-special*
-Define a menu with <> notation for special keys, even though the "<" flag
-may appear in 'cpoptions'. This is useful if the side effect of setting
-'cpoptions' is not desired. Example: >
- :menu <special> Search.Header /Header<CR>
-"<special>" must appear as the very first argument to the ":menu" command or
-just after "<silent>" or "<script>".
+"<silent>" may also appear just after "<script>".
*:menu-<script>* *:menu-script*
The "to" part of the menu will be inspected for mappings. If you don't want
this, use the ":noremenu" command (or the similar one for a specific mode).
If you do want to use script-local mappings, add "<script>" as the very first
-argument to the ":menu" command or just after "<silent>" or "<special>".
+argument to the ":menu" command or just after "<silent>".
*menu-priority*
You can give a priority to a menu. Menus with a higher priority go more to
@@ -659,6 +654,8 @@ nr Name Normal action ~
In the Win32 GUI, starting a menu name with ']' excludes that menu from the
main menu bar. You must then use the |:popup| command to display it.
+When splitting the window the window toolbar is not copied to the new window.
+
*popup-menu*
You can define the special menu "PopUp". This is the menu that is displayed
when the right mouse button is pressed, if 'mousemodel' is set to popup or
diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt
index 7cba0b9894..8a83cbc79c 100644
--- a/runtime/doc/help.txt
+++ b/runtime/doc/help.txt
@@ -30,7 +30,7 @@ Get specific help: It is possible to go directly to whatever you want help
help entries for "word".
Or use ":helpgrep word". |:helpgrep|
-VIM stands for Vi IMproved. Most of VIM was made by Bram Moolenaar, but only
+Vim stands for Vi IMproved. Most of Vim was made by Bram Moolenaar, but only
through the help of many others. See |credits|.
------------------------------------------------------------------------------
*doc-file-list* *Q_ct*
@@ -93,10 +93,9 @@ General subjects ~
|helphelp.txt| about using the help files
|index.txt| alphabetical index of all commands
|help-tags| all the tags you can jump to (index of tags)
-|howto.txt| how to do the most common editing tasks
|tips.txt| various tips on using Vim
|message.txt| (error) messages and explanations
-|develop.txt| development of Vim
+|develop.txt| development of Nvim
|debug.txt| debugging Vim itself
|uganda.txt| Vim distribution conditions and what to do with your money
@@ -134,7 +133,6 @@ Advanced editing ~
Special issues ~
|print.txt| printing
|remote.txt| using Vim as a server or client
-|term.txt| using different terminals and mice
|digraph.txt| list of available digraphs
|mbyte.txt| multi-byte text support
|mlang.txt| non-English language support
@@ -143,6 +141,7 @@ Special issues ~
|hebrew.txt| Hebrew language support and editing
|russian.txt| Russian language support and editing
|ft_ada.txt| Ada (the programming language) support
+|ft_rust.txt| Filetype plugin for Rust
|ft_sql.txt| about the SQL filetype plugin
|rileft.txt| right-to-left editing mode
@@ -163,6 +162,7 @@ Standard plugins ~
|pi_gzip.txt| Reading and writing compressed files
|pi_netrw.txt| Reading and writing files over a network
|pi_paren.txt| Highlight matching parens
+|pi_spec.txt| Filetype plugin to work with rpm spec files
|pi_tar.txt| Tar file explorer
|pi_zip.txt| Zip archive explorer
diff --git a/runtime/doc/helphelp.txt b/runtime/doc/helphelp.txt
index 5948b24667..adc72d1835 100644
--- a/runtime/doc/helphelp.txt
+++ b/runtime/doc/helphelp.txt
@@ -6,7 +6,7 @@
Help on help files *helphelp*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Help commands *online-help*
@@ -23,7 +23,7 @@ Help on help files *helphelp*
The 'helplang' option is used to select a language, if
the main help file is available in several languages.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
*{subject}* *E149* *E661*
:h[elp] {subject} Like ":help", additionally jump to the tag {subject}.
@@ -140,7 +140,8 @@ Help on help files *helphelp*
already opened, then the location list for that window
is used. Otherwise, a new help window is opened and
the location list for that window is set. The
- location list for the current window is not changed.
+ location list for the current window is not changed
+ then.
*:exu* *:exusage*
:exu[sage] Show help on Ex commands. Added to simulate the Nvi
@@ -305,7 +306,7 @@ the applicable Vim version. The last field specifies the last modification
date of the file. Each field is separated by a tab.
At the bottom of the help file, place a Vim modeline to set the 'textwidth'
-and 'tabstop' options and the 'filetype' to 'help'. Never set a global option
+and 'tabstop' options and the 'filetype' to "help". Never set a global option
in such a modeline, that can have consequences undesired by whoever reads that
help.
diff --git a/runtime/doc/howto.txt b/runtime/doc/howto.txt
deleted file mode 100644
index 33c8552463..0000000000
--- a/runtime/doc/howto.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-*howto.txt* Nvim
-
-
- VIM REFERENCE MANUAL by Bram Moolenaar
-
-
-How to ... *howdoi* *how-do-i* *howto* *how-to*
-
-|tutor| get started
-|:quit| exit? I'm trapped, help me!
-|initialization| initialize Vim
-|vimrc-intro| write a Vim script file (vimrc)
-|suspend| suspend Vim
-|usr_11.txt| recover after a crash
-|07.4| keep a backup of my file when writing over it
-
-|usr_07.txt| edit files
-|23.4| edit binary files
-|usr_24.txt| insert text
-|deleting| delete text
-|usr_04.txt| change text
-|04.5| copy and move text
-|usr_25.txt| format text
-|30.6| format comments
-|30.2| indent C programs
-|25.3| automatically set indent
-
-|usr_26.txt| repeat commands
-|02.5| undo and redo
-
-|usr_03.txt| move around
-|word-motions| word motions
-|left-right-motions| left-right motions
-|up-down-motions| up-down motions
-|object-motions| text-object motions
-|various-motions| various motions
-|object-select| text-object selection
-|'whichwrap'| move over line breaks
-|'virtualedit'| move to where there is no text
-|usr_27.txt| specify pattern for searches
-|tags-and-searches| do tags and special searches
-|29.4| search in include'd files used to find
- variables, functions, or macros
-|K| look up manual for the keyword under cursor
-
-|03.7| scroll
-|'sidescroll'| scroll horizontally/sideways
-|'scrolloff'| set visible context lines
-
-|mode-switching| change modes
-|04.4| use Visual mode
-|'insertmode'| start Vim in Insert mode
-
-|40.1| map keys
-|24.7| create abbreviations
-
-|ins-expandtab| expand a tab to spaces in Insert mode
-|i_CTRL-R| insert contents of a register in Insert mode
-|24.3| complete words in Insert mode
-|25.1| break a line before it gets too long
-
-|20.1| do command-line editing
-|20.3| do command-line completion
-|'cmdheight'| increase the height of command-line
-|10.3| specify command-line ranges
-|40.3| specify commands to be executed automatically
- before/after reading/writing entering/leaving a
- buffer/window
-
-|'autowrite'| write automatically
-|30.1| speedup edit-compile-edit cycle or compile and fix
- errors within Vim
-
-|options| set options
-|auto-setting| set options automatically
-|term-dependent-settings| set options depending on terminal name
-|save-settings| save settings
-|:quote| comment my .vim files
-|'helpheight'| change the default help height
-|'highlight'| set various highlighting modes
-|'title'| set the window title
-|'icon'| set window icon title
-|'report'| avoid seeing the change messages on every line
-|'shortmess'| avoid |hit-enter| prompts
-
-|mouse-using| use mouse with Vim
-|usr_08.txt| manage multiple windows and buffers
-|gui.txt| use the gui
-
-|You can't! (yet)| do dishes using Vim
-
-|usr_06.txt| switch on syntax highlighting
-|2html.vim| convert a colored file to HTML
-|less| use Vim like less or more with syntax highlighting
-
- vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/if_cscop.txt b/runtime/doc/if_cscop.txt
index 831b2c9840..451d525ea8 100644
--- a/runtime/doc/if_cscop.txt
+++ b/runtime/doc/if_cscop.txt
@@ -4,42 +4,19 @@
VIM REFERENCE MANUAL by Andy Kahn
*cscope* *Cscope*
-This document explains how to use Vim's cscope interface.
+Cscope is a "code intelligence" tool that helps you navigate C programs. It
+can also perform some refactoring tasks, such as renaming a global variable in
+all source files. Think of it as "ctags on steroids".
-Cscope is a tool like ctags, but think of it as ctags on steroids since it
-does a lot more than what ctags provides. In Vim, jumping to a result from
-a cscope query is just like jumping to any tag; it is saved on the tag stack
-so that with the right keyboard mappings, you can jump back and forth between
-functions as you normally would with |tags|.
+See |cscope-usage| for a quickstart.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
-1. Cscope introduction *cscope-intro*
+Cscope introduction *cscope-intro*
-The following text is taken from a version of the cscope man page:
- -----
-
- Cscope is an interactive screen-oriented tool that helps you:
-
- Learn how a C program works without endless flipping through a thick
- listing.
-
- Locate the section of code to change to fix a bug without having to
- learn the entire program.
-
- Examine the effect of a proposed change such as adding a value to an
- enum variable.
-
- Verify that a change has been made in all source files such as adding
- an argument to an existing function.
-
- Rename a global variable in all source files.
-
- Change a constant to a preprocessor symbol in selected lines of files.
-
- It is designed to answer questions like:
+Cscope is designed to answer questions like:
Where is this symbol used?
Where is it defined?
Where did this variable get its value?
@@ -51,40 +28,23 @@ The following text is taken from a version of the cscope man page:
Where is this source file in the directory structure?
What files include this header file?
- Cscope answers these questions from a symbol database that it builds the
- first time it is used on the source files. On a subsequent call, cscope
- rebuilds the database only if a source file has changed or the list of
- source files is different. When the database is rebuilt the data for the
- unchanged files is copied from the old database, which makes rebuilding
- much faster than the initial build.
-
- -----
-
-When cscope is normally invoked, you will get a full-screen selection
-screen allowing you to make a query for one of the above questions.
-However, once a match is found to your query and you have entered your
-text editor to edit the source file containing match, you cannot simply
-jump from tag to tag as you normally would with vi's Ctrl-] or :tag
-command.
-
-Vim's cscope interface is done by invoking cscope with its line-oriented
-interface, and then parsing the output returned from a query. The end
-result is that cscope query results become just like regular tags, so
-you can jump to them just like you do with normal tags (Ctrl-] or :tag)
-and then go back by popping off the tagstack with Ctrl-T. (Please note
-however, that you don't actually jump to a cscope tag simply by doing
-Ctrl-] or :tag without remapping these commands or setting an option.
-See the remaining sections on how the cscope interface works and for
-suggested use.)
+Cscope answers these questions from a symbol database that it builds the first
+time it is used on the source files. On a subsequent call, cscope rebuilds
+the database only if a source file has changed or the list of source files is
+different. When the database is rebuilt the data for the unchanged files is
+copied from the old database, which makes rebuilding much faster than the
+initial build.
+See |cscope-usage| to get started.
==============================================================================
-2. Cscope related commands *cscope-commands*
+Cscope commands *cscope-commands*
*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
-All cscope commands are accessed through suboptions to the main cscope
-command ":cscope". The shortest abbreviation is ":cs". The ":scscope"
-command does the same and also splits the window (short: "scs").
+All cscope commands are accessed through suboptions to the cscope commands.
+ `:cscope` or `:cs` is the main command
+ `:scscope` or `:scs` does the same and splits the window
+ `:lcscope` or `:lcs` uses the location list, see |:lcscope|
The available subcommands are:
@@ -231,7 +191,7 @@ through your tags file(s).
==============================================================================
-3. Cscope options *cscope-options*
+Cscope options *cscope-options*
Use the |:set| command to set all cscope options. Ideally, you would do
this in one of your startup files (e.g., vimrc). Some cscope related
@@ -244,7 +204,6 @@ started will have no effect!
:set csprg=/usr/local/bin/cscope
<
*cscopequickfix* *csqf* *E469*
-{not available when compiled without the |+quickfix| feature}
'cscopequickfix' specifies whether to use quickfix window to show cscope
results. This is a list of comma-separated values. Each item consists of
|cscope-find| command (s, g, d, c, t, e, f, i or a) and flag (+, - or 0).
@@ -259,81 +218,56 @@ seems to be useful: >
If 'cscopetag' is set, the commands ":tag" and CTRL-] as well as "vim -t"
will always use |:cstag| instead of the default :tag behavior. Effectively,
by setting 'cst', you will always search your cscope databases as well as
-your tag files. The default is off. Examples: >
- :set cst
- :set nocst
-<
+your tag files. The default is off.
+
*cscoperelative* *csre*
If 'cscoperelative' is set, then in absence of a prefix given to cscope
(prefix is the argument of -P option of cscope), basename of cscope.out
location (usually the project root directory) will be used as the prefix
to construct an absolute path. The default is off. Note: This option is
only effective when cscope (cscopeprg) is initialized without a prefix
-path (-P). Examples: >
- :set csre
- :set nocsre
-<
+path (-P).
+
*cscopetagorder* *csto*
The value of 'csto' determines the order in which |:cstag| performs a search.
If 'csto' is set to zero, cscope database(s) are searched first, followed
by tag file(s) if cscope did not return any matches. If 'csto' is set to
one, tag file(s) are searched before cscope database(s). The default is zero.
-Examples: >
- :set csto=0
- :set csto=1
-<
- *cscopeverbose* *csverb*
-If 'cscopeverbose' is not set (the default), messages will not be printed
-indicating success or failure when adding a cscope database. Ideally, you
-should reset this option in your |init.vim| before adding any cscope
-databases, and after adding them, set it. From then on, when you add more
-databases within Vim, you will get a (hopefully) useful message should the
-database fail to be added. Examples: >
- :set csverb
- :set nocsverb
-<
+
*cscopepathcomp* *cspc*
-The value of 'cspc' determines how many components of a file's path to
-display. With the default value of zero the entire path will be displayed.
+'cscopepathcomp' determines how many components of a file's path to display.
+With the default value of zero the entire path will be displayed.
The value one will display only the filename with no path. Other values
display that many components. For example: >
- :set cspc=3
+ :set cscopepathcomp=3
will display the last 3 components of the file's path, including the file
name itself.
==============================================================================
-4. How to use cscope in Vim *cscope-howtouse*
+Using cscope in Nvim *cscope-usage* *cscope-howtouse*
-The first thing you need to do is to build a cscope database for your
-source files. For the most basic case, simply do "cscope -b". Please
-refer to the cscope man page for more details.
+To get started, build the cscope database in your project root directory: >
+ cscope -bcqR
-Assuming you have a cscope database, you need to "add" the database to Vim.
-This establishes a cscope "connection" and makes it available for Vim to use.
-You can do this in your vimrc file, or you can do it manually after starting
-vim. For example, to add the cscope database "cscope.out", you would do:
+See the cscope manpage for details: >
+ :Man cscope
- :cs add cscope.out
+By default the cscope database file is named "cscope.out". After building the
+database, connect to it from Nvim: >
+ :cscope add cscope.out
-You can double-check the result of this by executing ":cs show". This will
-produce output which looks like this:
+That establishes a cscope connection for Nvim to use. You can check the
+result with ":cs show". It will show something like:
# pid database name prepend path
0 28806 cscope.out <none>
-Note:
-Because of the Microsoft RTL limitations, Win32 version shows 0 instead
-of the real pid.
-
Once a cscope connection is established, you can make queries to cscope and
-the results will be printed to you. Queries are made using the command
-":cs find". For example:
-
+the results will be printed. Queries are made using the command ":cs find".
+For example: >
:cs find g ALIGN_SIZE
-This can get a little cumbersome since one ends up doing a significant
-amount of typing. Fortunately, there are ways around this by mapping
-shortcut keys. See |cscope-suggestions| for suggested usage.
+To make this easier you can configure mappings, see |cscope-suggestions|.
If the results return only one match, you will automatically be taken to it.
If there is more than one match, you will be given a selection screen to pick
@@ -342,39 +276,28 @@ simply hit Ctrl-T to get back to the previous one.
==============================================================================
-5. Limitations *cscope-limitations*
-
-Cscope support for Vim is only available on systems that support these four
-system calls: fork(), pipe(), execl(), waitpid(). This means it is mostly
-limited to Unix systems.
-
-Additionally Cscope support works for Win32. For more information and a
-cscope version for Win32 see:
-
- http://iamphet.nm.ru/cscope/index.html
+Limitations *cscope-limitations*
Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files
is not configurable (e.g., you can't do a tselect instead).
+
==============================================================================
-6. Suggested usage *cscope-suggestions*
+Sample config *cscope-suggestions*
-Put these entries in your vimrc (adjust the pathname accordingly to your
-setup): >
+Copy this into your init.vim (adjust paths for your system): >
if has("cscope")
set csprg=/usr/local/bin/cscope
set csto=0
set cst
- set nocsverb
" add any database in current directory
if filereadable("cscope.out")
- cs add cscope.out
+ silent cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
- cs add $CSCOPE_DB
+ silent cs add $CSCOPE_DB
endif
- set csverb
endif
By setting 'cscopetag', we have effectively replaced all instances of the :tag
@@ -446,47 +369,6 @@ Cscope Home Page (http://cscope.sourceforge.net/): >
\:vert scs find d <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space><C-Space>a
\:vert scs find a <C-R>=expand("<cword>")<CR><CR>
-
-==============================================================================
-7. Cscope availability and information *cscope-info*
-
-If you do not already have cscope (it did not come with your compiler
-license or OS distribution), then you can download it for free from:
- http://cscope.sourceforge.net/
-This is released by SCO under the BSD license.
-
-If you want a newer version of cscope, you will probably have to buy it.
-According to the (old) nvi documentation:
-
- You can buy version 13.3 source with an unrestricted license
- for $400 from AT&T Software Solutions by calling +1-800-462-8146.
-
-Also you can download cscope 13.x and mlcscope 14.x (multi-lingual cscope
-which supports C, C++, Java, lex, yacc, breakpoint listing, Ingres, and SDL)
-from World-Wide Exptools Open Source packages page:
- http://www.bell-labs.com/project/wwexptools/packages.html
-
-In Solaris 2.x, if you have the C compiler license, you will also have
-cscope. Both are usually located under /opt/SUNWspro/bin
-
-SGI developers can also get it. Search for Cscope on this page:
- http://freeware.sgi.com/index-by-alpha.html
- https://toolbox.sgi.com/toolbox/utilities/cscope/
-The second one is for those who have a password for the SGI toolbox.
-
-There is source to an older version of a cscope clone (called "cs") available
-on the net. Due to various reasons, this is not supported with Vim.
-
-The cscope interface/support for Vim was originally written by
-Andy Kahn <ackahn@netapp.com>. The original structure (as well as a tiny
-bit of code) was adapted from the cscope interface in nvi. Please report
-any problems, suggestions, patches, et al., you have for the usage of
-cscope within Vim to him.
- *cscope-win32*
-For a cscope version for Win32 see:
- http://code.google.com/p/cscope-win32/
-
-Win32 support was added by Sergey Khorev <sergey.khorev@gmail.com>. Contact
-him if you have Win32-specific issues.
+<
vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/if_lua.txt b/runtime/doc/if_lua.txt
index c4efd57b45..968d882a22 100644
--- a/runtime/doc/if_lua.txt
+++ b/runtime/doc/if_lua.txt
@@ -1,30 +1,30 @@
*if_lua.txt* Nvim
- VIM REFERENCE MANUAL by Luis Carvalho
+ NVIM REFERENCE MANUAL
Lua Interface to Nvim *lua* *Lua*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
-1. Importing modules *lua-require*
+Importing modules *lua-require*
-Neovim lua interface automatically adjusts `package.path` and `package.cpath`
-according to effective &runtimepath value. Adjustment happens after
-'runtimepath' is changed. `package.path` is adjusted by simply appending
-`/lua/?.lua` and `/lua/?/init.lua` to each directory from 'runtimepath' (`/`
-is actually the first character of `package.config`).
+Nvim automatically adjusts `package.path` and `package.cpath` according to
+effective 'runtimepath' value. Adjustment happens whenever 'runtimepath' is
+changed. `package.path` is adjusted by simply appending `/lua/?.lua` and
+`/lua/?/init.lua` to each directory from 'runtimepath' (`/` is actually the
+first character of `package.config`).
-Similarly to `package.path`, modified directories from `runtimepath` are also
-added to `package.cpath`. In this case, instead of appending `/lua/?.lua` and
-`/lua/?/init.lua` to each runtimepath, all unique `?`-containing suffixes of
-the existing `package.cpath` are used. Here is an example:
+Similarly to `package.path`, modified directories from 'runtimepath' are also
+added to `package.cpath`. In this case, instead of appending `/lua/?.lua` and
+`/lua/?/init.lua` to each runtimepath, all unique `?`-containing suffixes of
+the existing `package.cpath` are used. Example:
1. Given that
- 'runtimepath' contains `/foo/bar,/xxx;yyy/baz,/abc`;
- - initial (defined at compile time or derived from
+ - initial (defined at compile-time or derived from
`$LUA_CPATH`/`$LUA_INIT`) `package.cpath` contains
`./?.so;/def/ghi/a?d/j/g.elf;/def/?.so`.
2. It finds `?`-containing suffixes `/?.so`, `/a?d/j/g.elf` and `/?.so`, in
@@ -61,7 +61,7 @@ paths when path is removed from 'runtimepath', adding paths when they are
added and reordering `package.path`/`package.cpath` content if 'runtimepath'
was reordered.
-Note 2: even though adjustments happens automatically Neovim does not track
+Note 2: even though adjustments happens automatically Nvim does not track
current values of `package.path` or `package.cpath`. If you happened to
delete some paths from there you need to reset 'runtimepath' to make them
readded. Just running `let &runtimepath = &runtimepath` should work.
@@ -72,7 +72,7 @@ badly written plugins using shell which will not work with paths containing
semicolons it is better to not have them in 'runtimepath' at all.
------------------------------------------------------------------------------
-1.1. Example of the plugin which uses lua modules: *lua-require-example*
+Example of a plugin that uses lua modules *lua-require-example*
The following example plugin adds a command `:MakeCharBlob` which transforms
current buffer into a long `unsigned char` array. Lua contains transformation
@@ -149,7 +149,7 @@ lua/charblob.lua: >
}
==============================================================================
-2. Commands *lua-commands*
+Commands *lua-commands*
*:lua*
:[range]lua {chunk}
@@ -157,16 +157,19 @@ lua/charblob.lua: >
Examples:
>
- :lua vim.api.nvim_command('echo "Hello, Neovim!"')
+ :lua vim.api.nvim_command('echo "Hello, Nvim!"')
+<
+To see the Lua version: >
+ :lua print(_VERSION)
+
+To see the LuaJIT version: >
+ :lua print(jit.version)
<
:[range]lua << {endmarker}
{script}
{endmarker}
Execute Lua script {script}.
- Note: This command doesn't work when the Lua
- feature wasn't compiled in. To avoid errors, see
- |script-here|.
{endmarker} must NOT be preceded by any white space. If {endmarker} is
omitted from after the "<<", a dot '.' must be used after {script}, like
@@ -186,15 +189,8 @@ Example:
EOF
endfunction
-Note that the variables are prefixed with `local`: they will disappear when
-block finishes. This is not the case for globals.
-
-To see what version of Lua you have: >
- :lua print(_VERSION)
-
-If you use LuaJIT you can also use this: >
- :lua print(jit.version)
-<
+Note that the `local` variables will disappear when block finishes. This is
+not the case for globals.
*:luado*
:[range]luado {body} Execute Lua function "function (line, linenr) {body}
@@ -230,27 +226,80 @@ All these commands execute a Lua chunk from either the command line (:lua and
:luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
interpreter, each chunk has its own scope and so only global variables are
shared between command calls. All Lua default libraries are available. In
-addition, Lua "print" function has its output redirected to the Vim message
+addition, Lua "print" function has its output redirected to the Nvim message
area, with arguments separated by a white space instead of a tab.
-Lua uses the "vim" module (see |lua-vim|) to issue commands to Neovim
+Lua uses the "vim" module (see |lua-vim|) to issue commands to Nvim
and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
procedures that alter buffer content, open new buffers, and change cursor
position are restricted when the command is executed in the |sandbox|.
==============================================================================
-2. The vim module *lua-vim*
+The vim module *lua-vim*
+
+Lua interfaces Nvim through the "vim" module. Currently it has the `api`
+submodule and some Nvim-specific utilities.
+
+------------------------------------------------------------------------------
+vim.api.* functions
-Lua interfaces Vim through the "vim" module. Currently it only has `api`
-submodule which is a table with all API functions. Descriptions of these
-functions may be found in |api.txt|.
+`vim.api` exposes the Nvim |API| as a table of Lua functions. All functions
+are available.
+
+For example, to use the "nvim_get_current_line()" API function, call
+"vim.api.nvim_get_current_line()": >
+
+ print(tostring(vim.api.nvim_get_current_line()))
+
+------------------------------------------------------------------------------
+vim.* utility functions
+
+vim.stricmp(a, b) *lua-vim.stricmp*
+ Function used for case-insensitive string comparison. Takes two
+ string arguments and returns 0, 1 or -1 if strings are equal, a is
+ greater then b or a is lesser then b respectively.
+
+vim.type_idx *lua-vim.type_idx*
+ Type index for use in |lua-special-tables|. Specifying one of the
+ values from |lua-vim.types| allows typing the empty table (it is
+ unclear whether empty lua table represents empty list or empty array)
+ and forcing integral numbers to be |Float|. See |lua-special-tbl| for
+ more details.
+
+vim.val_idx *lua-vim.val_idx*
+ Value index for tables representing |Float|s. A table representing
+ floating-point value 1.0 looks like this: >
+ {
+ [vim.type_idx] = vim.types.float,
+ [vim.val_idx] = 1.0,
+ }
+< See also |lua-vim.type_idx| and |lua-special-tbl|.
+
+vim.types *lua-vim.types*
+ Table with possible values for |lua-vim.type_idx|. Contains two sets
+ of key-value pairs: first maps possible values for |lua-vim.type_idx|
+ to human-readable strings, second maps human-readable type names to
+ values for |lua-vim.type_idx|. Currently contains pairs for `float`,
+ `array` and `dictionary` types.
+
+ Note: one must expect that values corresponding to `vim.types.float`,
+ `vim.types.array` and `vim.types.dictionary` fall under only two
+ following assumptions:
+ 1. Value may serve both as a key and as a value in a table. Given the
+ properties of lua tables this basically means “value is not `nil`”.
+ 2. For each value in `vim.types` table `vim.types[vim.types[value]]`
+ is the same as `value`.
+ No other restrictions are put on types, and it is not guaranteed that
+ values corresponding to `vim.types.float`, `vim.types.array` and
+ `vim.types.dictionary` will not change or that `vim.types` table will
+ only contain values for these three types.
==============================================================================
-3. The luaeval function *lua-luaeval* *lua-eval*
+The luaeval function *lua-luaeval* *lua-eval*
*luaeval()*
-The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
+The (dual) equivalent of "vim.eval" for passing Lua values to Nvim is
"luaeval". "luaeval" takes an expression string and an optional argument used
for _A inside expression and returns the result of the expression. It is
semantically equivalent in Lua to:
@@ -262,7 +311,7 @@ semantically equivalent in Lua to:
end
Note that "_A" receives the argument to "luaeval". Lua nils, numbers, strings,
-tables and booleans are converted to their Vim respective types. An error is
+tables and booleans are converted to their respective VimL types. An error is
thrown if conversion of any of the remaining Lua types is attempted.
Note 2: lua tables are used as both dictionaries and lists, thus making it
@@ -278,6 +327,7 @@ between these cases there is the following agreement:
3. Table with string keys, at least one of which contains NUL byte, is also
considered to be a dictionary, but this time it is converted to
a |msgpack-special-map|.
+ *lua-special-tbl*
4. Table with `vim.type_idx` key may be a dictionary, a list or floating-point
value:
- `{[vim.type_idx]=vim.types.float, [vim.val_idx]=1}` is converted to
diff --git a/runtime/doc/if_pyth.txt b/runtime/doc/if_pyth.txt
index 8baa2d309b..8940e69092 100644
--- a/runtime/doc/if_pyth.txt
+++ b/runtime/doc/if_pyth.txt
@@ -8,7 +8,7 @@ The Python Interface to Vim *python* *Python*
See |provider-python| for more information. {Nvim}
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Commands *python-commands*
diff --git a/runtime/doc/if_ruby.txt b/runtime/doc/if_ruby.txt
index 54d81a958d..ace304c083 100644
--- a/runtime/doc/if_ruby.txt
+++ b/runtime/doc/if_ruby.txt
@@ -10,7 +10,7 @@ The Ruby Interface to Vim *ruby* *Ruby*
The home page for ruby is http://www.ruby-lang.org/. You can find links for
downloading Ruby there.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Commands *ruby-commands*
@@ -63,7 +63,7 @@ To see what version of Ruby you have: >
*:rubyfile* *:rubyf*
:rubyf[ile] {file} Execute the Ruby script in {file}. This is the same as
- ":ruby load 'file'", but allows file name completion.
+ `:ruby load 'file'`, but allows file name completion.
Executing Ruby commands is not possible in the |sandbox|.
diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt
index 8e17de3fb0..7ba5a373dc 100644
--- a/runtime/doc/indent.txt
+++ b/runtime/doc/indent.txt
@@ -6,7 +6,7 @@
This file is about indenting C programs and other files.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Indenting C style programs *C-indenting*
@@ -321,6 +321,21 @@ The examples below assume a 'shiftwidth' of 4.
void function(); void function();
} }
<
+ *cino-E*
+ EN Indent inside C++ linkage specifications (extern "C" or
+ extern "C++") N characters extra compared to a normal block.
+ (default 0).
+
+ cino= cino=E-s >
+ extern "C" { extern "C" {
+ void function(); void function();
+ } }
+
+ extern "C" extern "C"
+ { {
+ void function(); void function();
+ } }
+<
*cino-p*
pN Parameter declarations for K&R-style function declarations will
be indented N characters from the margin. (default
@@ -550,7 +565,7 @@ The examples below assume a 'shiftwidth' of 4.
The defaults, spelled out in full, are:
- cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
+ cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,E0,ps,ts,is,+s,
c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
Vim puts a line in column 1 if:
diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index c15587cffd..f4f43aeac2 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -15,7 +15,7 @@ For an overview of built-in functions see |functions|.
For a list of Vim variables see |vim-variable|.
For a complete listing of all help items see |help-tags|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Insert mode *insert-index*
@@ -298,10 +298,10 @@ tag char note action in Normal mode ~
|B| B 1 cursor N WORDS backward
|C| ["x]C 2 change from the cursor position to the end
of the line, and N-1 more lines [into
- buffer x]; synonym for "c$"
+ register x]; synonym for "c$"
|D| ["x]D 2 delete the characters under the cursor
until the end of the line and N-1 more
- lines [into buffer x]; synonym for "d$"
+ lines [into register x]; synonym for "d$"
|E| E 1 cursor forward to the end of WORD N
|F| F{char} 1 cursor to the Nth occurrence of {char} to
the left
@@ -318,13 +318,13 @@ tag char note action in Normal mode ~
opposite direction
|O| O 2 begin a new line above the cursor and
insert text, repeat N times
-|P| ["x]P 2 put the text [from buffer x] before the
+|P| ["x]P 2 put the text [from register x] before the
cursor N times
|Q| Q switch to "Ex" mode
|R| R 2 enter replace mode: overtype existing
characters, repeat the entered text N-1
times
-|S| ["x]S 2 delete N lines [into buffer x] and start
+|S| ["x]S 2 delete N lines [into register x] and start
insert; synonym for "cc".
|T| T{char} 1 cursor till after Nth occurrence of {char}
to the left
@@ -332,8 +332,8 @@ tag char note action in Normal mode ~
|V| V start linewise Visual mode
|W| W 1 cursor N WORDS forward
|X| ["x]X 2 delete N characters before the cursor [into
- buffer x]
-|Y| ["x]Y yank N lines [into buffer x]; synonym for
+ register x]
+|Y| ["x]Y yank N lines [into register x]; synonym for
"yy"
|ZZ| ZZ store current file if modified, and exit
|ZQ| ZQ exit current file always
@@ -356,12 +356,12 @@ tag char note action in Normal mode ~
|`}| `} 1 cursor to the end of the current paragraph
|a| a 2 append text after the cursor N times
|b| b 1 cursor N words backward
-|c| ["x]c{motion} 2 delete Nmove text [into buffer x] and start
+|c| ["x]c{motion} 2 delete Nmove text [into register x] and
+ start insert
+|cc| ["x]cc 2 delete N lines [into register x] and start
insert
-|cc| ["x]cc 2 delete N lines [into buffer x] and start
- insert
-|d| ["x]d{motion} 2 delete Nmove text [into buffer x]
-|dd| ["x]dd 2 delete N lines [into buffer x]
+|d| ["x]d{motion} 2 delete Nmove text [into register x]
+|dd| ["x]dd 2 delete N lines [into register x]
|do| do 2 same as ":diffget"
|dp| dp 2 same as ":diffput"
|e| e 1 cursor forward to the end of word N
@@ -387,16 +387,16 @@ tag char note action in Normal mode ~
|q?| q? edit ? command-line in command-line window
|r| r{char} 2 replace N chars with {char}
|s| ["x]s 2 (substitute) delete N characters [into
- buffer x] and start insert
+ register x] and start insert
|t| t{char} 1 cursor till before Nth occurrence of {char}
to the right
|u| u 2 undo changes
|v| v start characterwise Visual mode
|w| w 1 cursor N words forward
|x| ["x]x 2 delete N characters under and after the
- cursor [into buffer x]
-|y| ["x]y{motion} yank Nmove text [into buffer x]
-|yy| ["x]yy yank N lines [into buffer x]
+ cursor [into register x]
+|y| ["x]y{motion} yank Nmove text [into register x]
+|yy| ["x]yy yank N lines [into register x]
|z| z{char} commands starting with 'z', see |z| below
|{| { 1 cursor N paragraphs backward
|bar| | 1 cursor to column N
@@ -993,10 +993,12 @@ tag command action in Command-line editing mode ~
|c_<CR>| <CR> execute entered command
|c_CTRL-M| CTRL-M same as <CR>
|c_CTRL-N| CTRL-N after using 'wildchar' with multiple matches:
- go to next match, otherwise: same as <Down>
+ go to next match, otherwise: recall older
+ command-line from history.
CTRL-O not used
|c_CTRL-P| CTRL-P after using 'wildchar' with multiple matches:
- go to previous match, otherwise: same as <Up>
+ go to previous match, otherwise: recall older
+ command-line from history.
|c_CTRL-Q| CTRL-Q same as CTRL-V, unless it's used for terminal
control flow
|c_CTRL-R| CTRL-R {0-9a-z"%#*:= CTRL-F CTRL-P CTRL-W CTRL-A}
@@ -1540,13 +1542,17 @@ tag command action ~
|:tjump| :tj[ump] like ":tselect", but jump directly when there
is only one match
|:tlast| :tl[ast] jump to last matching tag
+|:tmapclear| :tmapc[lear] remove all mappings for Terminal-Job mode
+|:tmap| :tma[p] like ":map" but for Terminal-Job mode
|:tmenu| :tm[enu] define menu tooltip
|:tnext| :tn[ext] jump to next matching tag
+|:tnoremap| :tno[remap] like ":noremap" but for Terminal-Job mode
|:topleft| :to[pleft] make split window appear at top or far left
|:tprevious| :tp[revious] jump to previous matching tag
|:trewind| :tr[ewind] jump to first matching tag
|:try| :try execute commands, abort on error or exception
|:tselect| :ts[elect] list matching tags and select one
+|:tunmap| :tunma[p] like ":unmap" but for Terminal-Job mode
|:tunmenu| :tu[nmenu] remove menu tooltip
|:undo| :u[ndo] undo last change(s)
|:undojoin| :undoj[oin] join next change with previous undo block
diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt
index 9219f45c83..9ae35bea52 100644
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -16,7 +16,7 @@ user manual |usr_24.txt|.
Also see 'virtualedit', for moving the cursor to positions where there is no
character. Useful for editing a table.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Special keys *ins-special-keys*
@@ -146,7 +146,8 @@ CTRL-R CTRL-R {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-R*
CTRL-R CTRL-O {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-O*
Insert the contents of a register literally and don't
auto-indent. Does the same as pasting with the mouse
- |<MiddleMouse>|.
+ |<MiddleMouse>|. When the register is linewise this will
+ insert the text above the current line, like with `P`.
Does not replace characters!
The '.' register (last inserted text) is still inserted as
typed.
@@ -607,13 +608,13 @@ Completion can be done for:
10. User defined completion |i_CTRL-X_CTRL-U|
11. omni completion |i_CTRL-X_CTRL-O|
12. Spelling suggestions |i_CTRL-X_s|
-13. keywords in 'complete' |i_CTRL-N|
+13. keywords in 'complete' |i_CTRL-N| |i_CTRL-P|
-All these (except 2) are done in CTRL-X mode. This is a sub-mode of Insert
-and Replace modes. You enter CTRL-X mode by typing CTRL-X and one of the
-CTRL-X commands. You exit CTRL-X mode by typing a key that is not a valid
-CTRL-X mode command. Valid keys are the CTRL-X command itself, CTRL-N (next),
-and CTRL-P (previous).
+All these, except CTRL-N and CTRL-P, are done in CTRL-X mode. This is a
+sub-mode of Insert and Replace modes. You enter CTRL-X mode by typing CTRL-X
+and one of the CTRL-X commands. You exit CTRL-X mode by typing a key that is
+not a valid CTRL-X mode command. Valid keys are the CTRL-X command itself,
+CTRL-N (next), and CTRL-P (previous).
Also see the 'infercase' option if you want to adjust the case of the match.
@@ -1076,8 +1077,10 @@ items:
item with the same word is already present.
empty when non-zero this match will be added even when it is
an empty string
+ user_data custom data which is associated with the item and
+ available in |v:completed_item|
-All of these except 'icase', 'dup' and 'empty' must be a string. If an item
+All of these except "icase", "dup" and "empty" must be a string. If an item
does not meet these requirements then an error message is given and further
items in the list are not used. You can mix string and Dictionary items in
the returned list.
@@ -1169,6 +1172,8 @@ The menu is used when:
The 'pumheight' option can be used to set a maximum height. The default is to
use all space available.
+The 'pumwidth' option can be used to set a minimum width. The default is 15
+characters.
There are three states:
1. A complete match has been inserted, e.g., after using CTRL-N or CTRL-P.
diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt
index c745d60ebc..6c40264d86 100644
--- a/runtime/doc/intro.txt
+++ b/runtime/doc/intro.txt
@@ -6,7 +6,7 @@
Introduction to Vim *ref* *reference*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *intro*
@@ -68,8 +68,8 @@ The Vim pages contain the most recent information about Vim. They also
contain links to the most recent version of Vim. The FAQ is a list of
Frequently Asked Questions. Read this if you have problems.
- VIM home page: http://www.vim.org/
- VIM FAQ: http://vimdoc.sf.net/
+ Vim home page: http://www.vim.org/
+ Vim FAQ: http://vimdoc.sf.net/
Downloading: ftp://ftp.vim.org/pub/vim/MIRRORS
@@ -120,9 +120,14 @@ Report bugs on GitHub: https://github.com/neovim/neovim/issues
Please be brief; all the time that is spent on answering mail is subtracted
from the time that is spent on improving Vim! Always give a reproducible
-example and try to find out which settings or other things influence the
-appearance of the bug. Try different machines, if possible. Send me patches
-if you can!
+example and try to find out which settings or other things trigger the bug.
+
+Preferably start Vim with: >
+ vim --clean -u reproduce.vim
+Where reproduce.vim is a script that reproduces the problem. Try different
+machines, if relevant (is this an MS-Windows specific bug perhaps?).
+
+Send me patches if you can!
It will help to include information about the version of Vim you are using and
your setup. You can get the information with this command: >
@@ -236,6 +241,10 @@ Vim would never have become what it is now, without the help of these people!
Juergen Weigert Lattice version, AUX improvements, Unix and
MS-DOS ports, autoconf
Stefan 'Sec' Zehl Maintainer of vim.org
+ Yasuhiro Matsumoto many MS-Windows improvements
+ Ken Takata fixes and features
+ Kazunobu Kuriyama GTK 3
+ Christian Brabandt many fixes, features, user support, etc.
I wish to thank all the people that sent me bug reports and suggestions. The
list is too long to mention them all here. Vim would not be the same without
@@ -249,8 +258,7 @@ Vi "the original". Without further remarks this is the version
of Vi that appeared in Sun OS 4.x. ":version" returns
"Version 3.7, 6/7/85". Sometimes other versions are referred
to. Only runs under Unix. Source code only available with a
- license. More information on Vi can be found through:
- http://vi-editor.org [doesn't currently work...]
+ license.
*Nvi*
Nvi The "New" Vi. The version of Vi that comes with BSD 4.4 and FreeBSD.
Very good compatibility with the original Vi, with a few extensions.
@@ -374,8 +382,7 @@ CTRL-{char} {char} typed as a control character; that is, typing {char}
*key-notation* *key-codes* *keycodes*
These names for keys are used in the documentation. They can also be used
-with the ":map" command (insert the key name by pressing CTRL-K and then the
-key you want the name for).
+with the ":map" command.
notation meaning equivalent decimal value(s) ~
-----------------------------------------------------------------------
@@ -442,8 +449,8 @@ available on a few terminals.
Note: There are two codes for the delete key. 127 is the decimal ASCII value
for the delete key, which is always recognized. Some delete keys send another
-value, in which case this value is obtained from the termcap entry "kD". Both
-values have the same effect.
+value, in which case this value is obtained from the |terminfo| entry "key_dc".
+Both values have the same effect.
Note: The keypad keys are used in the same way as the corresponding "normal"
keys. For example, <kHome> has the same effect as <Home>. If a keypad key
@@ -715,9 +722,9 @@ special situation. Vim will show only part of the line, around where the
cursor is. There are no special characters shown, so that you can edit all
parts of this line.
-The '@' occasion in the 'highlight' option can be used to set special
-highlighting for the '@' and '~' characters. This makes it possible to
-distinguish them from real characters in the buffer.
+The |hl-NonText| highlight group can be used to set special highlighting
+for the '@' and '~' characters. This makes it possible to distinguish them
+from real characters in the buffer.
The 'showbreak' option contains the string to put in front of wrapped lines.
@@ -784,10 +791,12 @@ by Vim.
==============================================================================
8. Definitions *definitions*
+ buffer Contains lines of text, usually read from a file.
screen The whole area that Vim uses to work in. This can be
a terminal emulator window. Also called "the Vim
window".
- window A view on a buffer.
+ window A view on a buffer. There can be multiple windows for
+ one buffer.
A screen contains one or more windows, separated by status lines and with the
command line at the bottom.
diff --git a/runtime/doc/job_control.txt b/runtime/doc/job_control.txt
index da592d6eb0..ed5f16902a 100644
--- a/runtime/doc/job_control.txt
+++ b/runtime/doc/job_control.txt
@@ -4,42 +4,33 @@
NVIM REFERENCE MANUAL by Thiago de Arruda
-Nvim's facilities for job control *job-control*
+Nvim job control *job-control*
- Type <M-]> to see the table of contents.
+Job control is a way to perform multitasking in Nvim, so scripts can spawn and
+control multiple processes without blocking the current Nvim instance.
-==============================================================================
-1. Introduction *job-control-intro*
+ Type |gO| to see the table of contents.
-Job control is a simple way to perform multitasking in vimscript. Wikipedia
-contains a more generic/detailed description:
+==============================================================================
+Concepts
-"Job control in computing refers to the control of multiple tasks or Jobs on a
-computer system, ensuring that they each have access to adequate resources to
-perform correctly, that competition for limited resources does not cause a
-deadlock where two or more jobs are unable to complete, resolving such
-situations where they do occur, and terminating jobs that, for any reason, are
-not performing as expected."
+Job Id *job-id*
-In a few words: It allows a vimscript programmer to concurrently spawn and
-control multiple processes without blocking the current Nvim instance.
+When a job starts it is assigned a number, unique for the life of the current
+Nvim session. Functions like |jobstart()| return job ids. Functions like
+|jobsend()|, |jobstop()|, |rpcnotify()|, and |rpcrequest()| take job ids.
-Nvim's job control was designed to be simple and familiar to vimscript
-programmers, instead of being very powerful but complex. Unlike Vim's
-facilities for calling with external commands, job control does not depend on
-available shells, instead relying on OS functionality for process management.
+The job's stdio streams are represented as a |channel|. It is possible to send
+and recieve raw bytes, or use |msgpack-rpc|.
+==============================================================================
+Usage *job-control-usage*
-Internally, Nvim job control is powered by libuv, which has a nice
-cross-platform API for managing processes. See https://github.com/libuv/libuv
-for details.
+To control jobs, use the "job…" family of functions: |jobstart()|,
+|jobsend()|, |jobstop()|.
-==============================================================================
-2. Usage *job-control-usage*
+Example: >
-Job control is achieved by calling a combination of the |jobstart()|,
-|jobsend()| and |jobstop()| functions. Here's an example:
->
- function! s:JobHandler(job_id, data, event) dict
+ function! s:OnEvent(job_id, data, event) dict
if a:event == 'stdout'
let str = self.shell.' stdout: '.join(a:data)
elseif a:event == 'stderr'
@@ -51,42 +42,36 @@ Job control is achieved by calling a combination of the |jobstart()|,
call append(line('$'), str)
endfunction
let s:callbacks = {
- \ 'on_stdout': function('s:JobHandler'),
- \ 'on_stderr': function('s:JobHandler'),
- \ 'on_exit': function('s:JobHandler')
+ \ 'on_stdout': function('s:OnEvent'),
+ \ 'on_stderr': function('s:OnEvent'),
+ \ 'on_exit': function('s:OnEvent')
\ }
let job1 = jobstart(['bash'], extend({'shell': 'shell 1'}, s:callbacks))
let job2 = jobstart(['bash', '-c', 'for i in {1..10}; do echo hello $i!; sleep 1; done'], extend({'shell': 'shell 2'}, s:callbacks))
+To test the above script, copy it to a file ~/foo.vim and run it: >
+ nvim -u ~/foo.vim
<
-To test the above, copy it to the file ~/jobcontrol.vim and start with a clean
-nvim instance:
->
- nvim -u NONE -S ~/jobcontrol.vim
-<
-Here's what is happening:
-
-- Two bash instances are spawned by |jobstart()| with their stdin/stdout/stderr
- connected to nvim.
-- The first shell is idle, waiting to read commands from its stdin.
-- The second shell is started with the -c argument, causing it to execute a
- command then exit. In this case, the command is a for loop that will print 0
- through 9 then exit.
-- The `JobHandler()` function is a callback passed to |jobstart()| to handle
- various job events. It takes care of displaying stdout/stderr received from
- the shells.
- *on_stdout* *on_stderr* *on_exit*
-- The arguments passed to `JobHandler()` are:
-
- 0: The job id
- 1: If the event is "stdout" or "stderr", a list with lines read from the
- corresponding stream. For "exit", it is the status returned by the
- program.
- 2: The event type, which is "stdout", "stderr" or "exit".
+Description of what happens:
+ - Two bash shells are spawned by |jobstart()| with their stdin/stdout/stderr
+ streams connected to nvim.
+ - The first shell is idle, waiting to read commands from its stdin.
+ - The second shell is started with -c which executes the command (a for-loop
+ printing 0 through 9) and then exits.
+ - `OnEvent()` callback is passed to |jobstart()| to handle various job
+ events. It displays stdout/stderr data received from the shells.
+
+For |on_stdout| and |on_stderr| see |channel-callback|.
+ *on_exit*
+Arguments passed to on_exit callback:
+ 0: |job-id|
+ 1: Exit-code of the process.
+ 2: Event type: "exit"
+
Note: Buffered stdout/stderr data which has not been flushed by the sender
- will not trigger the "stdout" callback (but if the process ends, the
- "exit" callback will be triggered).
+ will not trigger the on_stdout/on_stderr callback (but if the process
+ ends, the on_exit callback will be invoked).
For example, "ruby -e" buffers output, so small strings will be
buffered unless "auto-flushing" ($stdout.sync=true) is enabled. >
function! Receive(job_id, data, event)
@@ -97,54 +82,64 @@ Here's what is happening:
\ {'on_stdout': 'Receive'})
< https://github.com/neovim/neovim/issues/1592
-The options dictionary is passed as the "self" variable to the callback
-function. Here's a more object-oriented version of the above:
->
- let Shell = {}
+ Note 2:
+ Job event handlers may receive partial (incomplete) lines. For a given
+ invocation of on_stdout/on_stderr, `a:data` is not guaranteed to end
+ with a newline.
+ - `abcdefg` may arrive as `['abc']`, `['defg']`.
+ - `abc\nefg` may arrive as `['abc', '']`, `['efg']` or `['abc']`,
+ `['','efg']`, or even `['ab']`, `['c','efg']`.
+ Easy way to deal with this: initialize a list as `['']`, then append
+ to it as follows: >
+ let s:chunks = ['']
+ func! s:on_stdout(job_id, data, event) dict
+ let s:chunks[-1] .= a:data[0]
+ call extend(s:chunks, a:data[1:])
+ endf
+<
- function Shell.on_stdout(job_id, data) dict
- call append(line('$'), self.get_name().' stdout: '.join(a:data))
- endfunction
+The |jobstart-options| dictionary is passed as |self| to the callback.
+The above example could be written in this "object-oriented" style: >
- function Shell.on_stderr(job_id, data) dict
- call append(line('$'), self.get_name().' stderr: '.join(a:data))
- endfunction
+ let Shell = {}
- function Shell.on_exit(job_id, data) dict
- call append(line('$'), self.get_name().' exited')
+ function Shell.on_stdout(_job_id, data, event)
+ call append(line('$'),
+ \ printf('[%s] %s: %s', a:event, self.name, join(a:data[:-2])))
endfunction
- function Shell.get_name() dict
- return 'shell '.self.name
- endfunction
+ let Shell.on_stderr = function(Shell.on_stdout)
- function Shell.new(name, ...) dict
- let instance = extend(copy(g:Shell), {'name': a:name})
- let argv = ['bash']
- if a:0 > 0
- let argv += ['-c', a:1]
- endif
- let instance.id = jobstart(argv, instance)
- return instance
+ function Shell.on_exit(job_id, _data, event)
+ let msg = printf('job %d ("%s") finished', a:job_id, self.name)
+ call append(line('$'), printf('[%s] BOOM!', a:event))
+ call append(line('$'), printf('[%s] %s!', a:event, msg))
endfunction
- let s1 = Shell.new('1')
- let s2 = Shell.new('2', 'for i in {1..10}; do echo hello $i!; sleep 1; done')
-
+ function Shell.new(name, cmd)
+ let object = extend(copy(g:Shell), {'name': a:name})
+ let object.cmd = ['sh', '-c', a:cmd]
+ let object.id = jobstart(object.cmd, object)
+ $
+ return object
+ endfunction
-To send data to the job's stdin, one can use the |jobsend()| function, like
-this:
->
- :call jobsend(job1, "ls\n")
- :call jobsend(job1, "invalid-command\n")
- :call jobsend(job1, "exit\n")
+ let instance = Shell.new('bomb',
+ \ 'for i in $(seq 9 -1 1); do echo $i 1>&$((i % 2 + 1)); sleep 1; done')
+<
+To send data to the job's stdin, use |chansend()|: >
+ :call chansend(job1, "ls\n")
+ :call chansend(job1, "invalid-command\n")
+ :call chansend(job1, "exit\n")
+<
+A job may be killed with |jobstop()|: >
+ :call jobstop(job1)
<
A job may be killed at any time with the |jobstop()| function:
>
:call jobstop(job1)
<
-When |jobstop()| is called, `SIGTERM` will be sent to the job. If a job does
-not exit after 2 seconds, `SIGKILL` will be sent.
+Individual streams can be closed without killing the job, see |chanclose()|.
==============================================================================
vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 16c044a21d..038e90fab0 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -9,13 +9,13 @@ Key mapping, abbreviations and user-defined commands.
This subject is introduced in sections |05.3|, |24.7| and |40.1| of the user
manual.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Key mapping *key-mapping* *mapping* *macro*
Key mapping is used to change the meaning of typed keys. The most common use
-is to define a sequence commands for a function key. Example: >
+is to define a sequence of commands for a function key. Example: >
:map <F2> a<C-R>=strftime("%c")<CR><Esc>
@@ -41,7 +41,7 @@ modes.
:im[ap] {lhs} {rhs} |mapmode-i| *:im* *:imap*
:lm[ap] {lhs} {rhs} |mapmode-l| *:lm* *:lmap*
:cm[ap] {lhs} {rhs} |mapmode-c| *:cm* *:cmap*
-:tm[ap] {lhs} {rhs} |mapmode-t| *:tm* *:tmap*
+:tma[p] {lhs} {rhs} |mapmode-t| *:tma* *:tmap*
Map the key sequence {lhs} to {rhs} for the modes
where the map command applies. The result, including
{rhs}, is then further scanned for mappings. This
@@ -75,7 +75,7 @@ modes.
:iu[nmap] {lhs} |mapmode-i| *:iu* *:iunmap*
:lu[nmap] {lhs} |mapmode-l| *:lu* *:lunmap*
:cu[nmap] {lhs} |mapmode-c| *:cu* *:cunmap*
-:tu[nmap] {lhs} |mapmode-t| *:tu* *:tunmap*
+:tunma[p] {lhs} |mapmode-t| *:tunma* *:tunmap*
Remove the mapping of {lhs} for the modes where the
map command applies. The mapping may remain defined
for other modes where it applies.
@@ -111,7 +111,7 @@ modes.
:im[ap] |mapmode-i|
:lm[ap] |mapmode-l|
:cm[ap] |mapmode-c|
-:tm[ap] |mapmode-t|
+:tma[p] |mapmode-t|
List all key mappings for the modes where the map
command applies. Note that ":map" and ":map!" are
used most often, because they include the other modes.
@@ -126,7 +126,7 @@ modes.
:im[ap] {lhs} |mapmode-i| *:imap_l*
:lm[ap] {lhs} |mapmode-l| *:lmap_l*
:cm[ap] {lhs} |mapmode-c| *:cmap_l*
-:tm[ap] {lhs} |mapmode-t| *:tmap_l*
+:tma[p] {lhs} |mapmode-t| *:tmap_l*
List the key mappings for the key sequences starting
with {lhs} in the modes where the map command applies.
@@ -149,7 +149,7 @@ type "a", then "bar" will get inserted.
1.2 SPECIAL ARGUMENTS *:map-arguments*
-"<buffer>", "<nowait>", "<silent>", "<special>", "<script>", "<expr>" and
+"<buffer>", "<nowait>", "<silent>", "<script>", "<expr>" and
"<unique>" can be used in any order. They must appear right after the
command, before any other arguments.
@@ -175,7 +175,7 @@ that starts with ",". Then you need to type another character for Vim to know
whether to use the "," mapping or the longer one. To avoid this add the
<nowait> argument. Then the mapping will be used when it matches, Vim does
not wait for more characters to be typed. However, if the characters were
-already type they are used.
+already typed they are used.
*:map-<silent>* *:map-silent*
To define a mapping which will not be echoed on the command line, add
@@ -189,12 +189,6 @@ Prompts will still be given, e.g., for inputdialog().
Using "<silent>" for an abbreviation is possible, but will cause redrawing of
the command line to fail.
- *:map-<special>* *:map-special*
-Define a mapping with <> notation for special keys, even though the "<" flag
-may appear in 'cpoptions'. This is useful if the side effect of setting
-'cpoptions' is not desired. Example: >
- :map <special> <F12> /Header<CR>
-<
*:map-<script>* *:map-script*
If the first argument to one of these commands is "<script>" and it is used to
define a new mapping or abbreviation, the mapping will only remap characters
@@ -238,8 +232,10 @@ For this reason the following is blocked:
- Editing another buffer.
- The |:normal| command.
- Moving the cursor is allowed, but it is restored afterwards.
+- If the cmdline is changed, the old text and cursor position are restored.
If you want the mapping to do any of these let the returned characters do
-that.
+that. Alternatively use a |<Cmd>| mapping which doesn't have these
+restrictions.
You can use getchar(), it consumes typeahead if there is any. E.g., if you
have these mappings: >
@@ -278,6 +274,29 @@ again for using <expr>. This does work: >
Using 0x80 as a single byte before other text does not work, it will be seen
as a special key.
+ *<Cmd>* *:map-command*
+A command mapping is a mapping that directly executes a command. Command
+mappings are written by placing a command in between <Cmd> and <CR> in the
+rhs of a mapping (in any mode): >
+ noremap <f3> <Cmd>echo mode(1)<cr>
+<
+ *E5520*
+The command must be complete and ended with a <CR>. If the command is
+incomplete, an error is raised. |Command-line| mode is never entered.
+
+This is more flexible than using `:<c-u>` in visual and operator pending
+mode, or `<c-o>:` in insert mode, as the commands are exectued directly in the
+mode, and not normal mode. Also visual mode is not aborted. Commands can be
+invoked directly in cmdline mode, which is not simple otherwise (a timer has
+to be used). Unlike <expr> mappings, there are not any specific restrictions
+what the command can do, except for what is normally possible to do in every
+specific mode. The command should be executed the same way as if an
+(unrestricted) |autocmd| was invoked or an async event event was processed.
+
+Note: In select mode, |:map| or |:vmap| command mappings will be executed in
+visual mode. If a mapping is intended to work in select mode, it is
+recomendend to map it using |:smap|, possibly in addition to the same mapping
+with |:map| or |:xmap|.
1.3 MAPPING AND MODES *:map-modes*
*mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o* *mapmode-t*
@@ -443,17 +462,15 @@ There are two ways to map a special key:
1. The Vi-compatible method: Map the key code. Often this is a sequence that
starts with <Esc>. To enter a mapping like this you type ":map " and then
you have to type CTRL-V before hitting the function key. Note that when
- the key code for the key is in the termcap, it will automatically be
- translated into the internal code and become the second way of mapping
- (unless the 'k' flag is included in 'cpoptions').
+ the key code for the key is in the |terminfo| entry, it will automatically
+ be translated into the internal code and become the second way of mapping.
2. The second method is to use the internal code for the function key. To
enter such a mapping type CTRL-K and then hit the function key, or use
the form "#1", "#2", .. "#9", "#0", "<Up>", "<S-Down>", "<S-F7>", etc.
(see table of keys |key-notation|, all keys from <Up> can be used). The
first ten function keys can be defined in two ways: Just the number, like
"#2", and with "<F>", like "<F2>". Both stand for function key 2. "#0"
- refers to function key 10. The <> form cannot be used when 'cpoptions'
- includes the '<' flag.
+ refers to function key 10.
DETAIL: Vim first checks if a sequence from the keyboard is mapped. If it
isn't the terminal key codes are tried. If a terminal code is found it is
@@ -564,16 +581,17 @@ Upper and lowercase differences are ignored.
*map-comments*
It is not possible to put a comment after these commands, because the '"'
-character is considered to be part of the {lhs} or {rhs}.
+character is considered to be part of the {lhs} or {rhs}. However, one can
+use |", since this starts a new, empty command with a comment.
*map_bar* *map-bar*
Since the '|' character is used to separate a map command from the next
command, you will have to do something special to include a '|' in {rhs}.
There are three methods:
use works when example ~
- <Bar> '<' is not in 'cpoptions' :map _l :!ls <Bar> more^M
+ <Bar> always :map _l :!ls <Bar> more^M
\| 'b' is not in 'cpoptions' :map _l :!ls \| more^M
- ^V| always, in Vim and Vi :map _l :!ls ^V| more^M
+ ^V| always :map _l :!ls ^V| more^M
(here ^V stands for CTRL-V; to get one CTRL-V you have to type it twice; you
cannot use the <> notation "<C-V>" here).
@@ -628,8 +646,7 @@ out about, ^D is CTRL-D).
1.8 EXAMPLES *map-examples*
-A few examples (given as you type them, for "<CR>" you type four characters;
-the '<' flag must not be present in 'cpoptions' for this to work). >
+A few examples (as you type them: for "<CR>" you type four characters). >
:map <F3> o#include
:map <M-g> /foo<CR>cwbar<Esc>
@@ -661,7 +678,7 @@ option). After that it assumes that the 'q' is to be interpreted as such. If
you type slowly, or your system is slow, reset the 'timeout' option. Then you
might want to set the 'ttimeout' option.
- *map-precedence*
+ *map-precedence*
Buffer-local mappings (defined using |:map-<buffer>|) take precedence over
global mappings. When a buffer-local mapping is the same as a global mapping,
Vim will use the buffer-local mapping. In addition, Vim will use a complete
@@ -881,7 +898,6 @@ character is mostly ignored otherwise.
It is possible to move the cursor after an abbreviation: >
:iab if if ()<Left>
-This does not work if 'cpoptions' includes the '<' flag. |<>|
You can even do more complicated things. For example, to consume the space
typed after an abbreviation: >
@@ -1029,8 +1045,7 @@ functions used in one script use the same name as in other scripts. To avoid
this, they can be made local to the script.
*<SID>* *<SNR>* *E81*
-The string "<SID>" can be used in a mapping or menu. This requires that the
-'<' flag is not present in 'cpoptions'.
+The string "<SID>" can be used in a mapping or menu.
When executing the map command, Vim will replace "<SID>" with the special
key code <SNR>, followed by a number that's unique for the script, and an
underscore. Example: >
@@ -1213,6 +1228,7 @@ completion can be enabled:
-complete=locale locale names (as output of locale -a)
-complete=mapping mapping name
-complete=menu menus
+ -complete=messages |:messages| suboptions
-complete=option options
-complete=packadd optional package |pack-add| names
-complete=shellcmd Shell command
diff --git a/runtime/doc/mbyte.txt b/runtime/doc/mbyte.txt
index 2e2ca92656..531629fddc 100644
--- a/runtime/doc/mbyte.txt
+++ b/runtime/doc/mbyte.txt
@@ -14,7 +14,7 @@ For an introduction to the most common features, see |usr_45.txt| in the user
manual.
For changing the language of messages and menus see |mlang.txt|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
Getting started *mbyte-first*
diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
index c6c6f49026..96c28009c4 100644
--- a/runtime/doc/message.txt
+++ b/runtime/doc/message.txt
@@ -8,7 +8,7 @@ This file contains an alphabetical list of messages and error messages that
Vim produces. You can use this if you don't understand what the message
means. It is not complete though.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Old messages *:messages* *:mes* *message-history*
@@ -449,12 +449,6 @@ changed. To avoid the message reset the 'warn' option.
Something inside Vim went wrong and resulted in a NULL pointer. If you know
how to reproduce this problem, please report it. |bugs|
- *E172* >
- Only one file name allowed
-
-The ":edit" command only accepts one file name. When you want to specify
-several files for editing use ":next" |:next|.
-
*E41* *E82* *E83* *E342* >
Out of memory!
Out of memory! (allocating {number} bytes)
@@ -631,6 +625,9 @@ starts. It can be fixed in one of these ways:
- Just write the file again the next day. Or set your clock to the next day,
write the file twice and set the clock back.
+If you get W11 all the time, you may need to disable "Acronis Active
+Protection" or register Vim as a trusted service/application.
+
*W12* >
Warning: File "{filename}" has changed and the buffer was changed in Vim as well
@@ -750,6 +747,13 @@ a user-defined command.
You tried to set an option after startup that only allows changes during
startup.
+ *E943* >
+ Command table needs to be updated, run 'make cmdidxs'
+
+This can only happen when changing the source code, when adding a command in
+src/ex_cmds.h. The lookup table then needs to be updated, by running: >
+ make cmdidxs
+
==============================================================================
3. Messages *messages*
diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt
index 717ec9530c..8284d38fa4 100644
--- a/runtime/doc/mlang.txt
+++ b/runtime/doc/mlang.txt
@@ -11,7 +11,7 @@ multi-byte text see |multibyte|.
The basics are explained in the user manual: |usr_45.txt|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Messages *multilang-messages*
@@ -172,6 +172,7 @@ Send an e-mail to the Vim maintainer <maintainer@vim.org>.
special characters like "&" and "<Tab>" need to be
included. Spaces and dots need to be escaped with a
backslash, just like in other |:menu| commands.
+ Case in {english} is ignored.
See the $VIMRUNTIME/lang directory for examples.
diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt
index 99aa76bfe5..600eb3ab9e 100644
--- a/runtime/doc/motion.txt
+++ b/runtime/doc/motion.txt
@@ -26,7 +26,7 @@ The 'virtualedit' option can be set to make it possible to move the cursor to
positions where there is no character or within a multi-column character (like
a tab).
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Motions and operators *operator*
@@ -184,7 +184,7 @@ l or *l*
*$* *<End>* *<kEnd>*
$ or <End> To the end of the line. When a count is given also go
- [count - 1] lines downward |inclusive|.
+ [count - 1] lines downward. |inclusive| motion.
In Visual mode the cursor goes to just after the last
character in the line.
When 'virtualedit' is active, "$" may move the cursor
@@ -886,6 +886,7 @@ was made yet in the current file.
then the position can be near the end of what the
command changed. For example when inserting a word,
the position will be on the last character.
+ To jump to older changes use |g;|.
*'(* *`(*
'( `( To the start of the current sentence, like the |(|
diff --git a/runtime/doc/msgpack_rpc.txt b/runtime/doc/msgpack_rpc.txt
index 856476c6ae..11fad105b5 100644
--- a/runtime/doc/msgpack_rpc.txt
+++ b/runtime/doc/msgpack_rpc.txt
@@ -1,4 +1,3 @@
-*msgpack_rpc.txt* Nvim
NVIM REFERENCE MANUAL by Thiago de Arruda
@@ -6,7 +5,7 @@
RPC API for Nvim *RPC* *rpc* *msgpack-rpc*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *rpc-intro*
@@ -61,24 +60,24 @@ To get a formatted dump of the API using python (requires the `pyyaml` and
==============================================================================
3. Connecting *rpc-connecting*
-There are several ways to open a msgpack-rpc channel to an Nvim instance:
+See |channel-intro|, for various ways to open a channel. Most of the channel
+opening functions take an `rpc` key in the options dictionary, to enable rpc.
- 1. Through stdin/stdout when `nvim` is started with `--embed`. This is how
- applications can embed Nvim.
+Additionally, rpc channels can be opened by other processes connecting to
+TCP/IP sockets or named pipes listened to by nvim.
- 2. Through stdin/stdout of some other process spawned by |jobstart()|.
- Set the "rpc" key to |v:true| in the options dict to use the job's stdin
- and stdout as a single msgpack channel that is processed directly by
- Nvim. Then it is not possible to process raw data to or from the
- process's stdin and stdout. stderr can still be used, though.
+An rpc socket is automatically created with each instance. The socket
+ location is stored in |v:servername|. By default this is a named pipe
+with an automatically generated address. See |XXX|.
- 3. Through the socket automatically created with each instance. The socket
- location is stored in |v:servername|.
-
- 4. Through a TCP/IP socket. To make Nvim listen on a TCP/IP socket, set the
- |$NVIM_LISTEN_ADDRESS| environment variable before starting Nvim: >
+To make Nvim listen on a TCP/IP socket instead, set the
+ |$NVIM_LISTEN_ADDRESS| environment variable before starting Nvim: >
NVIM_LISTEN_ADDRESS=127.0.0.1:6666 nvim
-<
+<Also, more sockets and named pipes can be listened on using |serverstart()|.
+
+Note that localhost TCP sockets are generally less secure than named pipes,
+and can lead to vunerabilities like remote code execution.
+
Connecting to the socket is the easiest way a programmer can test the API,
which can be done through any msgpack-rpc client library or full-featured
|api-client|. Here's a Ruby script that prints 'hello world!' in the current
@@ -175,7 +174,7 @@ contains information that makes this task easier (see also |rpc-types|):
even more strongly-typed APIs.
- Functions that are considered to be methods that operate on instances of
Nvim special types (msgpack EXT) will have the `"method"` attribute set to
- `true`. The reciever type is the type of the first argument. The method
+ `true`. The receiver type is the type of the first argument. The method
names are prefixed with `nvim_` plus a shortened type name, e.g.
`nvim_buf_get_lines` represents the `get_lines` method of a Buffer instance.
- Global functions have `"method"` set to `false` and are prefixed with just
@@ -243,203 +242,4 @@ Even for statically compiled clients it is good practice to avoid hardcoding
the type codes, because a client may be built against one Nvim version but
connect to another with different type codes.
-==============================================================================
-6. Remote UIs *rpc-remote-ui*
-
-GUIs can be implemented as external processes communicating with Nvim over the
-RPC API. The UI model consists of a terminal-like grid with a single,
-monospace font size. Some elements (UI "widgets") can be drawn separately from
-the grid ("externalized").
-
-After connecting to Nvim (usually a spawned, embedded instance) use the
-|nvim_ui_attach| API method to tell Nvim that your program wants to draw the
-Nvim screen on a grid of width × height cells. `options` must be
-a dictionary with these (optional) keys:
- `rgb` Controls what color format to use.
- Set to true (default) to use 24-bit rgb
- colors.
- Set to false to use terminal color codes (at
- most 256 different colors).
- `ext_popupmenu` Externalize the popupmenu. |ui-ext-popupmenu|
- `ext_tabline` Externalize the tabline. |ui-ext-tabline|
- Externalized widgets will not be drawn by
- Nvim; only high-level data will be published
- in new UI event kinds.
-
-Nvim will then send msgpack-rpc notifications, with the method name "redraw"
-and a single argument, an array of screen updates (described below). These
-should be processed in order. Preferably the user should only be able to see
-the screen state after all updates in the same "redraw" event are processed
-(not any intermediate state after processing only a part of the array).
-
-Future versions of Nvim may add new update kinds and may append new parameters
-to existing update kinds. Clients must be prepared to ignore such extensions
-to be forward-compatible. |api-contract|
-
-Screen updates are tuples whose first element is the string name of the update
-kind.
-
-["resize", width, height]
- The grid is resized to `width` and `height` cells.
-
-["clear"]
- Clear the screen.
-
-["eol_clear"]
- Clear from the cursor position to the end of the current line.
-
-["cursor_goto", row, col]
- Move the cursor to position (row, col). Currently, the same cursor is
- used to define the position for text insertion and the visible cursor.
- However, only the last cursor position, after processing the entire
- array in the "redraw" event, is intended to be a visible cursor
- position.
-
-["update_fg", color]
-["update_bg", color]
-["update_sp", color]
- Set the default foreground, background and special colors
- respectively.
-
-["highlight_set", attrs]
- Set the attributes that the next text put on the screen will have.
- `attrs` is a dict with the keys below. Any absent key is reset
- to its default value. Color defaults are set by the `update_fg` etc
- updates. All boolean keys default to false.
-
- `foreground`: foreground color.
- `background`: backround color.
- `special`: color to use for underline and undercurl, when present.
- `reverse`: reverse video. Foreground and background colors are
- switched.
- `italic`: italic text.
- `bold`: bold text.
- `underline`: underlined text. The line has `special` color.
- `undercurl`: undercurled text. The curl has `special` color.
-
-["put", text]
- The (utf-8 encoded) string `text` is put at the cursor position
- (and the cursor is advanced), with the highlights as set by the
- last `highlight_set` update.
-
-["set_scroll_region", top, bot, left, right]
- Define the scroll region used by `scroll` below.
-
-["scroll", count]
- Scroll the text in the scroll region. The diagrams below illustrate
- what will happen, depending on the scroll direction. "=" is used to
- represent the SR(scroll region) boundaries and "-" the moved rectangles.
- Note that dst and src share a common region.
-
- If count is bigger than 0, move a rectangle in the SR up, this can
- happen while scrolling down.
->
- +-------------------------+
- | (clipped above SR) | ^
- |=========================| dst_top |
- | dst (still in SR) | |
- +-------------------------+ src_top |
- | src (moved up) and dst | |
- |-------------------------| dst_bot |
- | src (cleared) | |
- +=========================+ src_bot
-<
- If count is less than zero, move a rectangle in the SR down, this can
- happen while scrolling up.
->
- +=========================+ src_top
- | src (cleared) | |
- |------------------------ | dst_top |
- | src (moved down) and dst| |
- +-------------------------+ src_bot |
- | dst (still in SR) | |
- |=========================| dst_bot |
- | (clipped below SR) | v
- +-------------------------+
-<
-["set_title", title]
-["set_icon", icon]
- Set the window title, and icon (minimized) window title, respectively.
- In windowing systems not distinguishing between the two, "set_icon"
- can be ignored.
-
-["mouse_on"]
-["mouse_off"]
- Tells the client whether mouse support, as determined by |'mouse'|
- option, is considered to be active in the current mode. This is mostly
- useful for a terminal frontend, or other situations where nvim mouse
- would conflict with other usages of the mouse. It is safe for a client
- to ignore this and always send mouse events.
-
-["busy_on"]
-["busy_off"]
- Nvim started or stopped being busy, and possibly not responsible to user
- input. This could be indicated to the user by hiding the cursor.
-
-["suspend"]
- |:suspend| command or |Ctrl-Z| mapping is used. A terminal client (or other
- client where it makes sense) could suspend itself. Other clients can
- safely ignore it.
-
-["bell"]
-["visual_bell"]
- Notify the user with an audible or visual bell, respectively.
-
-["update_menu"]
- The menu mappings changed.
-
-["mode_info_set", cursor_style_enabled, mode_info]
-`cursor_style_enabled` is a boolean indicating if the UI should set the cursor
-style. `mode_info` is a list of mode property maps. The current mode is given
-by the `mode_idx` field of the `mode_change` event.
-
-Each mode property map may contain these keys:
- KEY DESCRIPTION ~
- `cursor_shape`: "block", "horizontal", "vertical"
- `cell_percentage`: Cell % occupied by the cursor.
- `blinkwait`, `blinkon`, `blinkoff`: See |cursor-blinking|.
- `hl_id`: Cursor highlight group.
- `hl_lm`: Cursor highlight group if 'langmap' is active.
- `short_name`: Mode code name, see 'guicursor'.
- `name`: Mode descriptive name.
- `mouse_shape`: (To be implemented.)
-
-Some keys are missing in some modes.
-
-["mode_change", mode, mode_idx]
-The mode changed. The first parameter `mode` is a string representing the
-current mode. `mode_idx` is an index into the array received in the
-`mode_info_set` event. UIs should change the cursor style according to the
-properties specified in the corresponding item. The set of modes reported will
-change in new versions of Nvim, for instance more submodes and temporary
-states might be represented as separate modes.
-
- *ui-ext-popupmenu*
-["popupmenu_show", items, selected, row, col]
- When `popupmenu_external` is set to true, nvim will not draw the
- popupmenu on the grid, instead when the popupmenu is to be displayed
- this update is sent. `items` is an array of the items to show, the
- items are themselves arrays of the form [word, kind, menu, info]
- as defined at |complete-items|, except that `word` is replaced by
- `abbr` if present. `selected` is the initially selected item, either a
- zero-based index into the array of items, or -1 if no item is
- selected. `row` and `col` is the anchor position, where the first
- character of the completed word will be.
-
-["popupmenu_select", selected]
- An item in the currently displayed popupmenu is selected. `selected`
- is either a zero-based index into the array of items from the last
- `popupmenu_show` event, or -1 if no item is selected.
-
-["popupmenu_hide"]
- The popupmenu is hidden.
-
- *ui-ext-tabline*
-["tabline_update", curtab, tabs]
- Tabline was updated. UIs should present this data in a custom tabline
- widget.
- curtab: Current Tabpage
- tabs: List of Dicts [{ "tab": Tabpage, "name": String }, ...]
-
-==============================================================================
- vim:tw=78:ts=8:noet:ft=help:norl:
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/nvim.txt b/runtime/doc/nvim.txt
index 29059f83d9..2420227f6c 100644
--- a/runtime/doc/nvim.txt
+++ b/runtime/doc/nvim.txt
@@ -6,6 +6,8 @@
Nvim *nvim* *nvim-intro*
+Nvim is based on Vim by Bram Moolenaar.
+
If you are new to Vim see |help.txt|, or type ":Tutor".
If you already use Vim see |nvim-from-vim| for a quickstart.
@@ -13,7 +15,7 @@ Nvim is emphatically a fork of Vim, not a clone: compatibility with Vim is
maintained where possible. See |vim_diff.txt| for the complete reference of
differences from Vim.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
Transitioning from Vim *nvim-from-vim*
diff --git a/runtime/doc/nvim_terminal_emulator.txt b/runtime/doc/nvim_terminal_emulator.txt
index 801ff75647..94e7899b6a 100644
--- a/runtime/doc/nvim_terminal_emulator.txt
+++ b/runtime/doc/nvim_terminal_emulator.txt
@@ -10,15 +10,18 @@ Nvim embeds a VT220/xterm terminal emulator based on libvterm. The terminal is
presented as a special buffer type, asynchronously updated from the virtual
terminal as data is received from the program connected to it.
-Terminal buffers behave mostly like normal 'nomodifiable' buffers, except:
-- Plugins can set 'modifiable' to modify text, but lines cannot be deleted.
-- 'scrollback' controls how many off-screen lines are kept.
-- Terminal output is followed if the cursor is on the last line.
+Terminal buffers behave like normal buffers, except:
+- With 'modifiable', lines can be edited but not deleted.
+- 'scrollback' controls how many lines are kept.
+- Output is followed if the cursor is on the last line.
+- 'modified' is the default. You can set 'nomodified' to avoid a warning when
+ closing the terminal buffer.
+- 'bufhidden' defaults to "hide".
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
-Spawning *terminal-emulator-spawning*
+Start *terminal-start*
There are 3 ways to create a terminal buffer:
@@ -35,13 +38,12 @@ There are 3 ways to create a terminal buffer:
autocmd VimEnter * nested split term://sh
< This is only mentioned for reference; use |:terminal| instead.
-When the terminal spawns the program, the buffer will start to mirror the
-terminal display and change its name to `term://{cwd}//{pid}:{cmd}`.
-The "term://..." scheme enables |:mksession| to "restore" a terminal buffer by
-restarting the {cmd} when the session is loaded.
+When the terminal starts, the buffer contents are updated and the buffer is
+named in the form of `term://{cwd}//{pid}:{cmd}`. This naming scheme is used
+by |:mksession| to restore a terminal buffer (by restarting the {cmd}).
==============================================================================
-Input *terminal-emulator-input*
+Input *terminal-input*
To send input, enter |Terminal-mode| using any command that would enter "insert
mode" in a normal buffer, such as |i| or |:startinsert|. In this mode all keys
@@ -83,9 +85,9 @@ Mouse input has the following behavior:
the terminal wont lose focus and the hovered window will be scrolled.
==============================================================================
-Configuration *terminal-emulator-configuration*
+Configuration *terminal-configuration*
-Options: 'scrollback'
+Options: 'modified', 'scrollback'
Events: |TermOpen|, |TermClose|
Highlight groups: |hl-TermCursor|, |hl-TermCursorNC|
@@ -99,17 +101,15 @@ global configuration.
You can change the defaults with a TermOpen autocommand: >
au TermOpen * setlocal list
-Terminal colors can be customized with these variables:
+TERMINAL COLORS ~
-- `{g,b}:terminal_color_$NUM`: The terminal color palette, where `$NUM` is the
- color index, between 0 and 255 inclusive. This setting only affects UIs with
- RGB capabilities; for normal terminals the color index is simply forwarded.
-
-The `{g,b}:terminal_color_$NUM` variables are processed only when the terminal
-starts (after |TermOpen|).
+The `{g,b}:terminal_color_$NUM` variables control the terminal color palette,
+where `$NUM` is the color index between 0 and 255 inclusive. This setting only
+affects UIs with RGB capabilities; for normal terminals the color index is
+just forwarded. The variables are read only during |TermOpen|.
==============================================================================
-Status Variables *terminal-emulator-status*
+Status Variables *terminal-status*
Terminal buffers maintain some information about the terminal in buffer-local
variables:
@@ -117,8 +117,8 @@ variables:
- *b:term_title* The settable title of the terminal, typically displayed in
the window title or tab title of a graphical terminal emulator. Programs
running in the terminal can set this title via an escape sequence.
-- *b:terminal_job_id* The nvim job ID of the job running in the terminal. See
- |job-control| for more information.
+- |'channel'| The nvim channel ID for the underlying PTY.
+ |chansend()| can be used to send input to the terminal.
- *b:terminal_job_pid* The PID of the top-level process running in the
terminal.
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index bb5cfb4a80..f4bf49c7c5 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -14,7 +14,7 @@ achieve special effects. These options come in three forms:
number has a numeric value
string has a string value
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Setting options *set-option* *E764*
@@ -22,12 +22,7 @@ achieve special effects. These options come in three forms:
*:se* *:set*
:se[t] Show all options that differ from their default value.
-:se[t] all Show all but terminal options.
-
-:se[t] termcap Show all terminal options. Note that in the GUI the
- key codes are not shown, because they are generated
- internally and can't be changed. Changing the terminal
- codes in the GUI is not useful either...
+:se[t] all Show all options.
*E518* *E519*
:se[t] {option}? Show value of {option}.
@@ -192,7 +187,7 @@ opt+=val" the expansion is done before the adding or removing.
Handling of local options *local-options*
Some of the options only apply to a window or buffer. Each window or buffer
-has its own copy of this option, thus can each have their own value. This
+has its own copy of this option, thus each can have its own value. This
allows you to set 'list' in one window but not in another. And set
'shiftwidth' to 3 in one buffer and 4 in another.
@@ -316,7 +311,7 @@ Note: In the future more global options can be made global-local. Using
Setting the filetype
-:setf[iletype] {filetype} *:setf* *:setfiletype*
+:setf[iletype] [FALLBACK] {filetype} *:setf* *:setfiletype*
Set the 'filetype' option to {filetype}, but only if
not done yet in a sequence of (nested) autocommands.
This is short for: >
@@ -327,6 +322,12 @@ Setting the filetype
setting the 'filetype' option twice, causing different
settings and syntax files to be loaded.
+ When the optional FALLBACK argument is present, a
+ later :setfiletype command will override the
+ 'filetype'. This is to used for filetype detections
+ that are just a guess. |did_filetype()| will return
+ false after this command.
+
*option-window* *optwin*
:bro[wse] se[t] *:set-browse* *:browse-set* *:opt* *:options*
:opt[ions] Open a window for viewing and setting all options.
@@ -353,11 +354,22 @@ On Unix systems the form "${HOME}" can be used too. The name between {} can
contain non-id characters then. Note that if you want to use this for the
"gf" command, you need to add the '{' and '}' characters to 'isfname'.
+NOTE: expanding environment variables and "~/" is only done with the ":set"
+command, not when assigning a value to an option with ":let".
+
+ *$HOME-windows*
On MS-Windows, if $HOME is not defined as an environment variable, then
at runtime Vim will set it to the expansion of $HOMEDRIVE$HOMEPATH.
+If $HOMEDRIVE is not set then $USERPROFILE is used.
-NOTE: expanding environment variables and "~/" is only done with the ":set"
-command, not when assigning a value to an option with ":let".
+This expanded value is not exported to the environment, this matters when
+running an external command: >
+ :echo system('set | findstr ^HOME=')
+and >
+ :echo luaeval('os.getenv("HOME")')
+should echo nothing (an empty string) despite exists('$HOME') being true.
+When setting $HOME to a non-empty string it will be exported to the
+subprocesses.
Note the maximum length of an expanded option is limited. How much depends on
@@ -716,6 +728,13 @@ A jump table for the options with a short description can be found at |Q_op|.
< Vim will guess the value. In the GUI this should work correctly,
in other cases Vim might not be able to guess the right value.
+ When the |t_RB| option is set, Vim will use it to request the background
+ color from the terminal. If the returned RGB value is dark/light and
+ 'background' is not dark/light, 'background' will be set and the
+ screen is redrawn. This may have side effects, make t_BG empty in
+ your .vimrc if you suspect this problem. The response to |t_RB| can
+ be found in |v:termrbgresp|.
+
When starting the GUI, the default value for 'background' will be
"light". When the value is not set in the gvimrc, and Vim detects
that the background is actually quite dark, 'background' is set to
@@ -964,8 +983,8 @@ A jump table for the options with a short description can be found at |Q_op|.
wildmode More matches in |cmdline-completion| available
(depends on the 'wildmode' setting).
- This is most useful, to fine tune when in insert mode the bell should
- be rung. For normal mode and ex commands, the bell is often rung to
+ This is most useful to fine tune when in Insert mode the bell should
+ be rung. For Normal mode and Ex commands, the bell is often rung to
indicate that an error occurred. It can be silenced by adding the
"error" keyword.
@@ -1194,6 +1213,12 @@ A jump table for the options with a short description can be found at |Q_op|.
< |Nvi| also has this option, but it only uses the first character.
See |cmdwin|.
+ *'channel'*
+'channel' number (default: 0)
+ local to buffer
+ |Channel| connected to the buffer. Currently only used by
+ |terminal-emulator|. Is 0 if no terminal is open. Cannot be changed.
+
*'charconvert'* *'ccv'* *E202* *E214* *E513*
'charconvert' 'ccv' string (default "")
global
@@ -1300,27 +1325,6 @@ A jump table for the options with a short description can be found at |Q_op|.
will additionally copy the text into register
'*'. See |clipboard|.
- *clipboard-autoselect*
- autoselect Works like the 'a' flag in 'guioptions': If present,
- then whenever Visual mode is started, or the Visual
- area extended, Vim tries to become the owner of the
- windowing system's global selection or put the
- selected text on the clipboard used by the selection
- register "*. See |guioptions_a| and |quotestar| for
- details. When the GUI is active, the 'a' flag in
- 'guioptions' is used, when the GUI is not active, this
- "autoselect" flag is used.
- Also applies to the modeless selection.
-
- *clipboard-autoselectplus*
- autoselectplus Like "autoselect" but using the + register instead of
- the * register. Compare to the 'P' flag in
- 'guioptions'.
-
- *clipboard-autoselectml*
- autoselectml Like "autoselect", but for the modeless selection
- only. Compare to the 'A' flag in 'guioptions'.
-
*'cmdheight'* *'ch'*
'cmdheight' 'ch' number (default 1)
global
@@ -1571,7 +1575,6 @@ A jump table for the options with a short description can be found at |Q_op|.
results in X being mapped to:
'B' included: "\^[" (^[ is a real <Esc>)
'B' excluded: "<Esc>" (5 characters)
- ('<' excluded in both cases)
*cpo-c*
c Searching continues at the end of any match at the
cursor position, but not further than the start of the
@@ -1621,15 +1624,6 @@ A jump table for the options with a short description can be found at |Q_op|.
J A |sentence| has to be followed by two spaces after
the '.', '!' or '?'. A <Tab> is not recognized as
white space.
- *cpo-k*
- k Disable the recognition of raw key codes in
- mappings, abbreviations, and the "to" part of menu
- commands. For example, if <Key> sends ^[OA (where ^[
- is <Esc>), the command ":map X ^[OA" results in X
- being mapped to:
- 'k' included: "^[OA" (3 characters)
- 'k' excluded: "<Key>" (one key code)
- Also see the '<' flag below.
*cpo-K*
K Don't wait for a key code to complete when it is
halfway through a mapping. This breaks mapping
@@ -1763,14 +1757,6 @@ A jump table for the options with a short description can be found at |Q_op|.
+ When included, a ":write file" command will reset the
'modified' flag of the buffer, even though the buffer
itself may still be different from its file.
- *cpo-<*
- < Disable the recognition of special key codes in |<>|
- form in mappings, abbreviations, and the "to" part of
- menu commands. For example, the command
- ":map X <Tab>" results in X being mapped to:
- '<' included: "<Tab>" (5 characters)
- '<' excluded: "^I" (^I is a real <Tab>)
- Also see the 'k' flag above.
*cpo->*
> When appending to a register, put a line break before
the appended text.
@@ -1821,12 +1807,6 @@ A jump table for the options with a short description can be found at |Q_op|.
Determines the order in which ":cstag" performs a search. See
|cscopetagorder|.
- *'cscopeverbose'* *'csverb'*
- *'nocscopeverbose'* *'nocsverb'*
-'cscopeverbose' 'csverb' boolean (default off)
- global
- Give messages when adding a cscope database. See |cscopeverbose|.
-
*'cursorbind'* *'crb'* *'nocursorbind'* *'nocrb'*
'cursorbind' 'crb' boolean (default off)
local to window
@@ -2397,7 +2377,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Only normal file name characters can be used, "/\*?[|<>" are illegal.
*'fillchars'* *'fcs'*
-'fillchars' 'fcs' string (default "vert:|,fold:-")
+'fillchars' 'fcs' string (default "")
global
{not available when compiled without the |+windows|
and |+folding| features}
@@ -2407,16 +2387,19 @@ A jump table for the options with a short description can be found at |Q_op|.
item default Used for ~
stl:c ' ' or '^' statusline of the current window
stlnc:c ' ' or '=' statusline of the non-current windows
- vert:c '|' vertical separators |:vsplit|
- fold:c '-' filling 'foldtext'
+ vert:c '│' or '|' vertical separators |:vsplit|
+ fold:c '·' or '-' filling 'foldtext'
diff:c '-' deleted lines of the 'diff' option
Any one that is omitted will fall back to the default. For "stl" and
"stlnc" the space will be used when there is highlighting, '^' or '='
otherwise.
+ If 'ambiwidth' is "double" then "vert" and "fold" default to
+ single-byte alternatives.
+
Example: >
- :set fillchars=stl:^,stlnc:=,vert:\|,fold:-,diff:-
+ :set fillchars=stl:^,stlnc:=,vert:│,fold:·,diff:-
< This is similar to the default, except that these characters will also
be used when there is highlighting.
@@ -2726,6 +2709,10 @@ A jump table for the options with a short description can be found at |Q_op|.
:s///g subst. one subst. all
:s///gg subst. all subst. one
+ DEPRECATED: Setting this option may break plugins that are not aware
+ of this option. Also, many users get confused that adding the /g flag
+ has the opposite effect of that it normally does.
+
*'grepformat'* *'gfm'*
'grepformat' 'gfm' string (default "%f:%l:%m,%f:%l%m,%f %l%m")
global
@@ -2756,14 +2743,10 @@ A jump table for the options with a short description can be found at |Q_op|.
*'guicursor'* *'gcr'* *E545* *E546* *E548* *E549*
'guicursor' 'gcr' string (default "n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20")
global
- Configures the cursor style for each mode. Works in the GUI and some
- terminals.
+ Configures the cursor style for each mode. Works in the GUI and many
+ terminals. See |tui-cursor-shape|.
- With tmux you might need this in ~/.tmux.conf (see terminal-overrides
- in the tmux(1) manual page): >
- set -ga terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'
-
-< To disable cursor-styling, reset the option: >
+ To disable cursor-styling, reset the option: >
:set guicursor=
< To enable mode shapes, "Cursor" highlight, and blinking: >
@@ -2994,7 +2977,7 @@ A jump table for the options with a short description can be found at |Q_op|.
that this flag must be added in the vimrc file, before
switching on syntax or filetype recognition (when the |gvimrc|
file is sourced the system menu has already been loaded; the
- ":syntax on" and ":filetype on" commands load the menu too).
+ `:syntax on` and `:filetype on` commands load the menu too).
*'go-g'*
'g' Grey menu items: Make menu items that are not active grey. If
'g' is not included inactive menu items are not shown at all.
@@ -3044,6 +3027,8 @@ A jump table for the options with a short description can be found at |Q_op|.
The format of this option is like that of 'statusline'.
'guitabtooltip' is used for the tooltip, see below.
+ The expression will be evaluated in the |sandbox| when set from a
+ modeline, see |sandbox-option|.
Only used when the GUI tab pages line is displayed. 'e' must be
present in 'guioptions'. For the non-GUI tab pages line 'tabline' is
@@ -3119,34 +3104,6 @@ A jump table for the options with a short description can be found at |Q_op|.
WARNING: It's easy to forget that you have changes in hidden buffers.
Think twice when using ":q!" or ":qa!".
- *'highlight'* *'hl'*
-'highlight' 'hl' Removed. |vim-differences|
- global
- The builtin |highlight-groups| cannot be changed.
-
- *'hlsearch'* *'hls'* *'nohlsearch'* *'nohls'*
-'hlsearch' 'hls' boolean (default on)
- global
- {not available when compiled without the
- |+extra_search| feature}
- When there is a previous search pattern, highlight all its matches.
- The type of highlighting used can be set with the 'l' occasion in the
- 'highlight' option. This uses the "Search" highlight group by
- default. Note that only the matching text is highlighted, any offsets
- are not applied.
- See also: 'incsearch' and |:match|.
- When you get bored looking at the highlighted matches, you can turn it
- off with |:nohlsearch|. This does not change the option value, as
- soon as you use a search command, the highlighting comes back.
- 'redrawtime' specifies the maximum time spent on finding matches.
- When the search pattern can match an end-of-line, Vim will try to
- highlight all of the matched text. However, this depends on where the
- search starts. This will be the first line in the window or the first
- line below a closed fold. A match in a previous line which is not
- drawn may not continue in a newly drawn line.
- You can specify whether the highlight status is restored on startup
- with the 'h' flag in 'shada' |shada-h|.
-
*'history'* *'hi'*
'history' 'hi' number (Vim default: 10000, Vi default: 0)
global
@@ -3169,6 +3126,27 @@ A jump table for the options with a short description can be found at |Q_op|.
This is useful if you have a non-Hebrew keyboard.
See |rileft.txt|.
+ *'hlsearch'* *'hls'* *'nohlsearch'* *'nohls'*
+'hlsearch' 'hls' boolean (default on)
+ global
+ {not available when compiled without the
+ |+extra_search| feature}
+ When there is a previous search pattern, highlight all its matches.
+ The |hl-Search| highlight group determines the highlighting. Note that
+ only the matching text is highlighted, any offsets are not applied.
+ See also: 'incsearch' and |:match|.
+ When you get bored looking at the highlighted matches, you can turn it
+ off with |:nohlsearch|. This does not change the option value, as
+ soon as you use a search command, the highlighting comes back.
+ 'redrawtime' specifies the maximum time spent on finding matches.
+ When the search pattern can match an end-of-line, Vim will try to
+ highlight all of the matched text. However, this depends on where the
+ search starts. This will be the first line in the window or the first
+ line below a closed fold. A match in a previous line which is not
+ drawn may not continue in a newly drawn line.
+ You can specify whether the highlight status is restored on startup
+ with the 'h' flag in 'shada' |shada-h|.
+
*'icon'* *'noicon'*
'icon' boolean (default off, on when title can be restored)
global
@@ -3323,8 +3301,18 @@ A jump table for the options with a short description can be found at |Q_op|.
Vim only searches for about half a second. With a complicated
pattern and/or a lot of text the match may not be found. This is to
avoid that Vim hangs while you are typing the pattern.
- The highlighting can be set with the 'i' flag in 'highlight'.
- See also: 'hlsearch'.
+ The |hl-IncSearch| highlight group determines the highlighting.
+ When 'hlsearch' is on, all matched strings are highlighted too while typing
+ a search command. See also: 'hlsearch'.
+ If you don't want turn 'hlsearch' on, but want to highlight all matches
+ while searching, you can turn on and off 'hlsearch' with autocmd.
+ Example: >
+ augroup vimrc-incsearch-highlight
+ autocmd!
+ autocmd CmdlineEnter /,\? :set hlsearch
+ autocmd CmdlineLeave /,\? :set nohlsearch
+ augroup END
+<
CTRL-L can be used to add one character from after the current match
to the command line. If 'ignorecase' and 'smartcase' are set and the
command line has no uppercase characters, the added character is
@@ -3695,7 +3683,7 @@ A jump table for the options with a short description can be found at |Q_op|.
< Minimum value is 2, maximum value is 1000.
*'linespace'* *'lsp'*
-'linespace' 'lsp' number (default 0, 1 for Win32 GUI)
+'linespace' 'lsp' number (default 0)
global
{only in the GUI}
Number of pixel lines inserted between characters. Useful if the font
@@ -3832,6 +3820,23 @@ A jump table for the options with a short description can be found at |Q_op|.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
+ *'makeencoding'* *'menc'*
+'makeencoding' 'menc' string (default "")
+ global or local to buffer |global-local|
+ {only available when compiled with the |+multi_byte|
+ feature}
+ {not in Vi}
+ Encoding used for reading the output of external commands. When empty,
+ encoding is not converted.
+ This is used for `:make`, `:lmake`, `:grep`, `:lgrep`, `:grepadd`,
+ `:lgrepadd`, `:cfile`, `:cgetfile`, `:caddfile`, `:lfile`, `:lgetfile`,
+ and `:laddfile`.
+
+ This would be mostly useful when you use MS-Windows. If |+iconv| is
+ enabled and GNU libiconv is used, setting 'makeencoding' to "char" has
+ the same effect as setting to the system locale encoding. Example: >
+ :set makeencoding=char " system locale is used
+<
*'makeprg'* *'mp'*
'makeprg' 'mp' string (default "make")
global or local to buffer |global-local|
@@ -3868,7 +3873,7 @@ A jump table for the options with a short description can be found at |Q_op|.
:au FileType c,cpp,java set mps+==:;
< For a more advanced way of using "%", see the matchit.vim plugin in
- the $VIMRUNTIME/macros directory. |add-local-help|
+ the $VIMRUNTIME/plugin directory. |add-local-help|
*'matchtime'* *'mat'*
'matchtime' 'mat' number (default 5)
@@ -4509,6 +4514,8 @@ A jump table for the options with a short description can be found at |Q_op|.
and |+postscript| features}
Expression used to print the PostScript produced with |:hardcopy|.
See |pexpr-option|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
*'printfont'* *'pfn'*
'printfont' 'pfn' string (default "courier")
@@ -4816,12 +4823,12 @@ A jump table for the options with a short description can be found at |Q_op|.
height with ":set scroll=0".
*'scrollback'* *'scbk'*
-'scrollback' 'scbk' number (default: 1000
+'scrollback' 'scbk' number (default: 10000
in normal buffers: -1)
local to buffer
Maximum number of lines kept beyond the visible screen. Lines at the
top are deleted if new lines exceed this limit.
- Only in |terminal-emulator| buffers. 'buftype'
+ Only in |terminal| buffers.
-1 means "unlimited" for normal buffers, 100000 otherwise.
Minimum is 1.
@@ -5153,10 +5160,10 @@ A jump table for the options with a short description can be found at |Q_op|.
security reasons.
*'shellcmdflag'* *'shcf'*
-'shellcmdflag' 'shcf' string (default: "-c"; Windows: "/c")
+'shellcmdflag' 'shcf' string (default: "-c"; Windows: "/s /c")
global
Flag passed to the shell to execute "!" and ":!" commands; e.g.,
- "bash.exe -c ls" or "cmd.exe /c dir". For Windows
+ `bash.exe -c ls` or `cmd.exe /s /c "dir"`. For Windows
systems, the default is set according to the value of 'shell', to
reduce the need to set this option by the user.
On Unix it can have more than one flag. Each white space separated
@@ -5277,7 +5284,7 @@ A jump table for the options with a short description can be found at |Q_op|.
to execute most external commands with cmd.exe.
*'shellxquote'* *'sxq'*
-'shellxquote' 'sxq' string (default: "")
+'shellxquote' 'sxq' string (default: "", Windows: "\"")
global
Quoting character(s), put around the command passed to the shell, for
the "!" and ":!" commands. Includes the redirection. See
@@ -5369,8 +5376,7 @@ A jump table for the options with a short description can be found at |Q_op|.
< Only printable single-cell characters are allowed, excluding <Tab> and
comma (in a future version the comma might be used to separate the
part that is shown at the end and at the start of a line).
- The characters are highlighted according to the '@' flag in
- 'highlight'.
+ The |hl-NonText| highlight group determines the highlighting.
Note that tabs after the showbreak will be displayed differently.
If you want the 'showbreak' to appear in between line numbers, add the
"n" flag to 'cpoptions'.
@@ -5425,10 +5431,7 @@ A jump table for the options with a short description can be found at |Q_op|.
'showmode' 'smd' boolean (Vim default: on, Vi default: off)
global
If in Insert, Replace or Visual mode put a message on the last line.
- Use the 'M' flag in 'highlight' to set the type of highlighting for
- this message.
- When |XIM| may be used the message will include "XIM". But this
- doesn't mean XIM is really active.
+ The |hl-ModeMsg| highlight group determines the highlighting.
*'showtabline'* *'stal'*
'showtabline' 'stal' number (default 1)
@@ -5445,14 +5448,13 @@ A jump table for the options with a short description can be found at |Q_op|.
See |tab-page| for more information about tab pages.
*'sidescroll'* *'ss'*
-'sidescroll' 'ss' number (default 0)
+'sidescroll' 'ss' number (default 1)
global
The minimal number of columns to scroll horizontally. Used only when
the 'wrap' option is off and the cursor is moved off of the screen.
When it is zero the cursor will be put in the middle of the screen.
- When using a slow terminal set it to a large number or 0. When using
- a fast terminal use a small number or 1. Not used for "zh" and "zl"
- commands.
+ When using a slow terminal set it to a large number or 0. Not used
+ for "zh" and "zl" commands.
*'sidescrolloff'* *'siso'*
'sidescrolloff' 'siso' number (default 0)
@@ -5691,7 +5693,7 @@ A jump table for the options with a short description can be found at |Q_op|.
word. The expression must evaluate to a List of
Lists, each with a suggestion and a score.
Example:
- [['the', 33], ['that', 44]]
+ [['the', 33], ['that', 44]] ~
Set 'verbose' and use |z=| to see the scores that the
internal methods use. A lower score is better.
This may invoke |spellsuggest()| if you temporarily
@@ -6217,7 +6219,6 @@ A jump table for the options with a short description can be found at |Q_op|.
When on, uses |highlight-guifg| and |highlight-guibg| attributes in
the terminal (thus using 24-bit color). Requires a ISO-8613-3
compatible terminal.
- Must be set at startup (in your |init.vim| or |--cmd|).
*'terse'* *'noterse'*
'terse' boolean (default off)
@@ -6272,7 +6273,7 @@ A jump table for the options with a short description can be found at |Q_op|.
for any key that can follow <c-f> in a mapping.
*'ttimeout'* *'nottimeout'*
-'ttimeout' boolean (default off)
+'ttimeout' boolean (default on)
global
This option and 'ttimeoutlen' determine the behavior when part of a
key code sequence has been received by the terminal UI. For example,
@@ -6287,18 +6288,18 @@ A jump table for the options with a short description can be found at |Q_op|.
complete.
*'ttimeoutlen'* *'ttm'*
-'ttimeoutlen' 'ttm' number (default -1)
+'ttimeoutlen' 'ttm' number (default 50)
global
The time in milliseconds that is waited for a key code
sequence to complete. Also used for CTRL-\ CTRL-N and CTRL-\ CTRL-G
when part of a command has been typed.
*'title'* *'notitle'*
-'title' boolean (default off, on when title can be restored)
+'title' boolean (default off)
global
When on, the title of the window will be set to the value of
'titlestring' (if it is not empty), or to:
- filename [+=-] (path) - VIM
+ filename [+=-] (path) - NVIM
Where:
filename the name of the file being edited
- indicates the file cannot be modified, 'ma' off
@@ -6306,7 +6307,7 @@ A jump table for the options with a short description can be found at |Q_op|.
= indicates the file is read-only
=+ indicates the file is read-only and modified
(path) is the path of the file being edited
- - VIM the server name |v:servername| or "VIM"
+ - NVIM the server name |v:servername| or "NVIM"
*'titlelen'*
'titlelen' number (default 85)
@@ -6322,11 +6323,10 @@ A jump table for the options with a short description can be found at |Q_op|.
'titlelen' is also used for the 'titlestring' option.
*'titleold'*
-'titleold' string (default "Thanks for flying Vim")
+'titleold' string (default "")
global
- This option will be used for the window title when exiting Vim if the
- original title cannot be restored. Only happens if 'title' is on or
- 'titlestring' is not empty.
+ If not empty, this option will be used to set the window title when
+ exiting. Only if 'title' is enabled.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
*'titlestring'*
@@ -6412,7 +6412,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Save the whole buffer for undo when reloading it. This applies to the
":e!" command and reloading for when the buffer changed outside of
Vim. |FileChangedShell|
- The save only happens when this options is negative or when the number
+ The save only happens when this option is negative or when the number
of lines is smaller than the value of this option.
Set this option to zero to disable undo for a reload.
@@ -6450,6 +6450,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Currently, these messages are given:
>= 1 When the shada file is read or written.
>= 2 When a file is ":source"'ed.
+ >= 3 UI info, terminal capabilities
>= 5 Every searched tags file and include file.
>= 8 Files for which a group of autocommands is executed.
>= 9 Every executed autocommand.
@@ -6485,7 +6486,7 @@ A jump table for the options with a short description can be found at |Q_op|.
security reasons.
*'viewoptions'* *'vop'*
-'viewoptions' 'vop' string (default: "folds,options,cursor")
+'viewoptions' 'vop' string (default: "folds,options,cursor,curdir")
global
{not available when compiled without the |+mksession|
feature}
@@ -6493,6 +6494,7 @@ A jump table for the options with a short description can be found at |Q_op|.
list of words. Each word enables saving and restoring something:
word save and restore ~
cursor cursor position in file and in window
+ curdir local current directory, if set with |:lcd|
folds manually created folds, opened/closed folds and local
fold options
options options and mappings local to a window or buffer (not
@@ -6775,19 +6777,19 @@ A jump table for the options with a short description can be found at |Q_op|.
*'winhighlight'* *'winhl'*
'winhighlight' 'winhl' string (default empty)
local to window
- Window-local highlights. Comma-delimited list of |group-name| pairs
- "{hl-builtin}:{hl-group},..." where each {hl-builtin} is a group (from
- |highlight-groups|) to be overridden by {hl-group} in the window where
- this option was set. Only builting ui highlights are supported, not
- syntax highlighting. For that purpose, use |:ownsyntax|.
+ Window-local highlights. Comma-delimited list of highlight
+ |group-name| pairs "{hl-builtin}:{hl},..." where each {hl-builtin} is
+ a built-in |highlight-groups| item to be overridden by {hl} group in
+ the window. Only built-in |highlight-groups| are supported, not
+ syntax highlighting (use |:ownsyntax| for that).
- Most highlights occuring within the frame of a window are supported.
Highlights of vertical separators are determined by the window to the
left of the separator. The highlight of a tabpage in |tabline| is
- determined by the last focused window in the tabpage. Highlights of
+ determined by the last-focused window of the tabpage. Highlights of
the popupmenu are determined by the current window. Highlights in the
- message area are not overridable. Example for overriding the
- backgrond color: >
+ message area cannot be overridden.
+
+ Example: show a different color for non-current windows: >
set winhighlight=Normal:MyNormal,NormalNC:MyNormalNC
<
*'winfixheight'* *'wfh'* *'nowinfixheight'* *'nowfh'*
@@ -6920,7 +6922,8 @@ A jump table for the options with a short description can be found at |Q_op|.
'writedelay' 'wd' number (default 0)
global
The number of milliseconds to wait for each character sent to the
- screen. When non-zero, characters are sent to the terminal one by
- one. For debugging purposes.
+ screen. When positive, characters are sent to the UI one by one.
+ When negative, all redrawn characters cause a delay, even if the
+ character already was displayed by the UI. For debugging purposes.
vim:tw=78:ts=8:ft=help:noet:norl:
diff --git a/runtime/doc/os_win32.txt b/runtime/doc/os_win32.txt
deleted file mode 100644
index 4b012712fc..0000000000
--- a/runtime/doc/os_win32.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-*os_win32.txt* Nvim
-
-
- NVIM REFERENCE MANUAL
-
-
- *win32* *Win32* *MS-Windows*
-This file documents the Win32 version of Nvim.
-
-==============================================================================
-1. Known problems *win32-problems*
-
-When doing file name completion, Vim also finds matches for the short file
-name. But Vim will still find and use the corresponding long file name. For
-example, if you have the long file name "this_is_a_test" with the short file
-name "this_i~1", the command ":e *1" will start editing "this_is_a_test".
-
-==============================================================================
-2. Startup *win32-startup*
-
-Current directory *win32-curdir*
-
-If Vim is started with a single file name argument, and it has a full path
-(starts with "x:\"), Vim assumes it was started from the file explorer and
-will set the current directory to where that file is. To avoid this when
-typing a command to start Vim, use a forward slash instead of a backslash.
-Example: >
-
- vim c:\text\files\foo.txt
-
-Will change to the "C:\text\files" directory. >
-
- vim c:/text\files\foo.txt
-
-Will use the current directory.
-
-
-Term option *win32-term*
-
-The only kind of terminal type that the Win32 version of Vim understands is
-"win32", which is built-in. If you set 'term' to anything else, you will
-probably get very strange behavior from Vim. Therefore Vim does not obtain
-the default value of 'term' from the environment variable "TERM".
-
-$PATH *win32-PATH*
-
-The directory of the Vim executable is appended to $PATH. This is mostly to
-make "!xxd" work, as it is in the Tools menu. And it also means that when
-executable() returns 1 the executable can actually be executed.
-
-Quotes in file names *win32-quotes*
-
-Quotes inside a file name (or any other command line argument) can be escaped
-with a backslash. E.g. >
- vim -c "echo 'foo\"bar'"
-
-Alternatively use three quotes to get one: >
- vim -c "echo 'foo"""bar'"
-
-The quotation rules are:
-
-1. A `"` starts quotation.
-2. Another `"` or `""` ends quotation. If the quotation ends with `""`, a `"`
- is produced at the end of the quoted string.
-
-Examples, with [] around an argument:
- "foo" -> [foo]
- "foo"" -> [foo"]
- "foo"bar -> [foobar]
- "foo" bar -> [foo], [bar]
- "foo""bar -> [foo"bar]
- "foo"" bar -> [foo"], [bar]
- "foo"""bar" -> [foo"bar]
-
-
-==============================================================================
-3. Using the mouse *win32-mouse*
-
-The Win32 version of Vim supports using the mouse. If you have a two-button
-mouse, the middle button can be emulated by pressing both left and right
-buttons simultaneously - but note that in the Win32 GUI, if you have the right
-mouse button pop-up menu enabled (see 'mouse'), you should err on the side of
-pressing the left button first. |mouse-using|
-
-When the mouse doesn't work, try disabling the "Quick Edit Mode" feature of
-the console.
-
-==============================================================================
-4. Win32 mini FAQ *win32-faq*
-
-Q. How do I change the font?
-A. In the GUI version, you can use the 'guifont' option. Example: >
- :set guifont=Lucida_Console:h15:cDEFAULT
-< In the console version, you need to set the font of the console itself.
- You cannot do this from within Vim.
-
-Q. I'm using Vim to edit a symbolically linked file on a Unix NFS file server.
- When I write the file, Vim does not "write through" the symlink. Instead,
- it deletes the symbolic link and creates a new file in its place. Why?
-A. On Unix, Vim is prepared for links (symbolic or hard). A backup copy of
- the original file is made and then the original file is overwritten. This
- assures that all properties of the file remain the same. On non-Unix
- systems, the original file is renamed and a new file is written. Only the
- protection bits are set like the original file. However, this doesn't work
- properly when working on an NFS-mounted file system where links and other
- things exist. The only way to fix this in the current version is not
- making a backup file, by ":set nobackup nowritebackup" |'writebackup'|
-
-Q. I'm using Vim to edit a file on a Unix file server through Samba. When I
- write the file, the owner of the file is changed. Why?
-A. When writing a file Vim renames the original file, this is a backup (in
- case writing the file fails halfway). Then the file is written as a new
- file. Samba then gives it the default owner for the file system, which may
- differ from the original owner.
- To avoid this set the 'backupcopy' option to "yes". Vim will then make a
- copy of the file for the backup, and overwrite the original file. The
- owner isn't changed then.
-
-Q. How do I get to see the output of ":make" while it's running?
-A. Basically what you need is to put a tee program that will copy its input
- (the output from make) to both stdout and to the errorfile. You can find a
- copy of tee (and a number of other GNU tools) at
- http://gnuwin32.sourceforge.net or http://unxutils.sourceforge.net
- Alternatively, try the more recent Cygnus version of the GNU tools at
- http://www.cygwin.com Other Unix-style tools for Win32 are listed at
- http://directory.google.com/Top/Computers/Software/Operating_Systems/Unix/Win32/
- When you do get a copy of tee, you'll need to add >
- :set shellpipe=\|\ tee
-< to your _vimrc.
-
- *:!start*
-Q. How can I run an external command or program asynchronously?
-A. When using :! to run an external command, you can run it with "start": >
- :!start winfile.exe<CR>
-< Using "start" stops Vim switching to another screen, opening a new console,
- or waiting for the program to complete; it indicates that you are running a
- program that does not affect the files you are editing. Programs begun
- with :!start do not get passed Vim's open file handles, which means they do
- not have to be closed before Vim.
- To avoid this special treatment, use ":! start".
- There are two optional arguments (see the next Q):
- /min the window will be minimized
- /b no console window will be opened
- You can use only one of these flags at a time. A second one will be
- treated as the start of the command.
-
-Q. How do I avoid getting a window for programs that I run asynchronously?
-A. You have two possible solutions depending on what you want:
- 1) You may use the /min flag in order to run program in a minimized state
- with no other changes. It will work equally for console and GUI
- applications.
- 2) You can use the /b flag to run console applications without creating a
- console window for them (GUI applications are not affected). But you
- should use this flag only if the application you run doesn't require any
- input. Otherwise it will get an EOF error because its input stream
- (stdin) would be redirected to \\.\NUL (stdout and stderr too).
-
- Example for a console application, run Exuberant ctags: >
- :!start /min ctags -R .
-< When it has finished you should see file named "tags" in your current
- directory. You should notice the window title blinking on your taskbar.
- This is more noticeable for commands that take longer.
- Now delete the "tags" file and run this command: >
- :!start /b ctags -R .
-< You should have the same "tags" file, but this time there will be no
- blinking on the taskbar.
- Example for a GUI application: >
- :!start /min notepad
- :!start /b notepad
-< The first command runs notepad minimized and the second one runs it
- normally.
-
- *windows-icon*
-Q. I don't like the Vim icon, can I change it?
-A. Yes, place your favorite icon in bitmaps/vim.ico in a directory of
- 'runtimepath'. For example ~/vimfiles/bitmaps/vim.ico.
-
-
- vim:tw=78:fo=tcq2:ts=8:ft=help:norl:
diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt
index f7f561dfa5..ab78b8b71c 100644
--- a/runtime/doc/pattern.txt
+++ b/runtime/doc/pattern.txt
@@ -9,7 +9,7 @@ Patterns and search commands *pattern-searches*
The very basics can be found in section |03.9| of the user manual. A few more
explanations are in chapter 27 |usr_27.txt|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Search commands *search-commands*
@@ -853,10 +853,13 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
\%V Match inside the Visual area. When Visual mode has already been
stopped match in the area that |gv| would reselect.
This is a |/zero-width| match. To make sure the whole pattern is
- inside the Visual area put it at the start and end of the pattern,
- e.g.: >
+ inside the Visual area put it at the start and just before the end of
+ the pattern, e.g.: >
+ /\%Vfoo.*ba\%Vr
+< This also works if only "foo bar" was Visually selected. This: >
/\%Vfoo.*bar\%V
-< Only works for the current buffer.
+< would match "foo bar" if the Visual selection continues after the "r".
+ Only works for the current buffer.
*/\%#* *cursor-position*
\%# Matches with the cursor position. Only works when matching in a
@@ -1055,12 +1058,16 @@ x A single character, with no special meaning, matches itself
":s/[/x/" searches for "[/x" and replaces it with nothing. It does
not search for "[" and replaces it with "x"!
+ *E944* *E945*
If the sequence begins with "^", it matches any single character NOT
in the collection: "[^xyz]" matches anything but 'x', 'y' and 'z'.
- If two characters in the sequence are separated by '-', this is
shorthand for the full list of ASCII characters between them. E.g.,
- "[0-9]" matches any decimal digit. Non-ASCII characters can be
- used, but the character values must not be more than 256 apart.
+ "[0-9]" matches any decimal digit. If the starting character exceeds
+ the ending character, e.g. [c-a], E944 occurs. Non-ASCII characters
+ can be used, but the character values must not be more than 256 apart
+ in the old regexp engine. For example, searching by [\u3000-\u4000]
+ after setting re=1 emits a E945 error. Prepending \%#=2 will fix it.
- A character class expression is evaluated to the set of characters
belonging to that character class. The following character classes
are supported:
diff --git a/runtime/doc/pi_health.txt b/runtime/doc/pi_health.txt
index 8354c0470f..bb688770fc 100644
--- a/runtime/doc/pi_health.txt
+++ b/runtime/doc/pi_health.txt
@@ -2,53 +2,45 @@
Author: TJ DeVries <devries.timothyj@gmail.com>
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
-Introduction *healthcheck* *health.vim-intro*
+Introduction *health*
-Troubleshooting user configuration problems is a time-consuming task that
-developers want to minimize. health.vim provides a simple framework for plugin
-authors to hook into, and for users to invoke, to check and report the user's
-configuration and environment. Type this command to try it: >
+health.vim is a minimal framework to help with troubleshooting user
+configuration. Nvim ships with healthchecks for configuration, performance,
+python support, ruby support, clipboard support, and more.
- :CheckHealth
-<
-For example, some users have broken or unusual Python setups, which breaks the
-|:python| command. |:CheckHealth| detects several common Python configuration
-problems and reports them. If the Neovim Python module is not installed, it
-shows a warning: >
+To run the healthchecks, use this command: >
- You have not installed the Neovim Python module
- You might want to try `pip install Neovim`
-<
-Plugin authors are encouraged to add healthchecks, see |health.vim-dev|.
+ :checkhealth
+<
+Plugin authors are encouraged to write new healthchecks. |health-dev|
==============================================================================
-Commands and functions *health.vim-manual*
-
-Commands
-------------------------------------------------------------------------------
- *:CheckHealth*
-:CheckHealth Run all healthchecks and show the output in a new
- tabpage. These healthchecks are included by default:
- - python2
- - python3
- - ruby
- - remote plugin
-
-:CheckHealth {plugins}
- Run healthchecks for one or more plugins. E.g. to run
+Commands *health-commands*
+
+ *:checkhealth* *:CheckHealth*
+:checkhealth Run all healthchecks.
+ *E5009*
+ Nvim depends on |$VIMRUNTIME| and 'runtimepath' to find
+ the standard "runtime files" for syntax highlighting,
+ filetype-specific behavior, and standard plugins
+ (including :checkhealth). If the runtime files cannot
+ be found then those features will not work.
+
+:checkhealth {plugins}
+ Run healthcheck(s) for one or more plugins. E.g. to run
only the standard Nvim healthcheck: >
- :CheckHealth nvim
+ :checkhealth nvim
< To run the healthchecks for the "foo" and "bar" plugins
(assuming these plugins are on your 'runtimepath' and
they have implemented health#foo#check() and
health#bar#check(), respectively): >
- :CheckHealth foo bar
+ :checkhealth foo bar
<
-Functions
-------------------------------------------------------------------------------
+==============================================================================
+Functions *health-functions*
health.vim functions are for creating new healthchecks. They mostly just do
some layout and formatting, to give users a consistent presentation.
@@ -59,51 +51,49 @@ health#report_start({name}) *health#report_start*
per section.
health#report_info({msg}) *health#report_info*
- Displays an informational message.
+ Reports an informational message.
health#report_ok({msg}) *health#report_ok*
- Displays a "success" message.
+ Reports a "success" message.
-health#report_warn({msg}, [{suggestions}]) *health#report_warn*
- Displays a warning. {suggestions} is an optional List of suggestions.
+health#report_warn({msg}, [{advice}]) *health#report_warn*
+ Reports a warning. {advice} is an optional List of suggestions.
-health#report_error({msg}, [{suggestions}]) *health#report_error*
- Displays an error. {suggestions} is an optional List of suggestions.
+health#report_error({msg}, [{advice}]) *health#report_error*
+ Reports an error. {advice} is an optional List of suggestions.
health#{plugin}#check() *health.user_checker*
- This is the form of a healthcheck definition. Call the above functions
- from this function, then |:CheckHealth| does the rest. Example: >
+ Healthcheck function for {plugin}. Called by |:checkhealth|
+ automatically. Example: >
function! health#my_plug#check() abort
silent call s:check_environment_vars()
silent call s:check_python_configuration()
endfunction
<
- The function will be found and called automatically when the user
- invokes |:CheckHealth|.
-
All output will be captured from the healthcheck. Use the
health#report_* functions so that your healthcheck has a format
consistent with the standard healthchecks.
==============================================================================
-Create a healthcheck *health.vim-dev*
+Create a healthcheck *health-dev*
-Healthchecks are functions that check the health of the system. Neovim has
-built-in checkers, found in $VIMRUNTIME/autoload/health/.
+Healthchecks are functions that check the user environment, configuration,
+etc. Nvim has built-in healthchecks in $VIMRUNTIME/autoload/health/.
-To add a new checker for your own plugin, simply define a
+To add a new healthcheck for your own plugin, simply define a
health#{plugin}#check() function in autoload/health/{plugin}.vim.
-|:CheckHealth| automatically finds and invokes such functions.
+|:checkhealth| automatically finds and invokes such functions.
-If your plugin is named "jslint", then its healthcheck function must be >
- health#jslint#check()
+If your plugin is named "foo", then its healthcheck function must be >
+ health#foo#check()
defined in this file on 'runtimepath': >
- autoload/health/jslint.vim
+ autoload/health/foo.vim
-Here's a sample to get started: >
- function! health#jslint#check() abort
+Copy this sample code into autoload/health/foo.vim and replace "foo" with your
+plugin name: >
+ function! health#foo#check() abort
call health#report_start('sanity checks')
" perform arbitrary checks
" ...
@@ -111,8 +101,8 @@ Here's a sample to get started: >
if looks_good
call health#report_ok('found required dependencies')
else
- call health#report_error('cannot find jslint',
- \ ['npm install --save jslint'])
+ call health#report_error('cannot find foo',
+ \ ['npm install --save foo'])
endif
endfunction
diff --git a/runtime/doc/pi_matchit.txt b/runtime/doc/pi_matchit.txt
index c711cd588f..652734f7bb 100644
--- a/runtime/doc/pi_matchit.txt
+++ b/runtime/doc/pi_matchit.txt
@@ -1,6 +1,6 @@
*pi_matchit.txt* Extended "%" matching
-For Vim version 6.3. Last change: 2015 May 21
+For Vim version 6.3. Last change: 2017 May 14
*matchit* *matchit.vim*
@@ -211,7 +211,7 @@ Examples:
In LaTeX, since "%" is used as the comment character, you can >
:let b:match_skip = 'r:%'
< Unfortunately, this will skip anything after "\%", an escaped "%". To
- allow for this, and also "\\%" (an excaped backslash followed by the
+ allow for this, and also "\\%" (an escaped backslash followed by the
comment character) you can >
:let b:match_skip = 'r:\(^\|[^\\]\)\(\\\\\)*%'
<
@@ -356,7 +356,8 @@ The back reference '\'.d refers to the same thing as '\'.b:match_table[d] in
The various |:vmap|s defined in the script (%, |g%|, |[%|, |]%|, |a%|) may
have undesired effects in Select mode |Select-mode-mapping|. At least, if you
want to replace the selection with any character in "ag%[]" there will be a
-pause of |'updatetime'| first.
+pause of |'updatetime'| first. E.g., "yV%" would normally work linewise, but
+the plugin mapping makes it characterwise.
It would be nice if "\0" were recognized as the entire pattern. That is, it
would be nice if "foo:\end\0" had the same effect as "\(foo\):\end\1".
diff --git a/runtime/doc/print.txt b/runtime/doc/print.txt
index 01de3a5290..3ffb52b5ae 100644
--- a/runtime/doc/print.txt
+++ b/runtime/doc/print.txt
@@ -6,7 +6,7 @@
Printing *printing*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *print-intro*
@@ -87,25 +87,25 @@ If the option is empty, then vim will use the system default printer for
Macintosh: mac-roman,
HPUX: hp-roman8)
global
-Sets the character encoding used when printing. This option tells VIM which
+Sets the character encoding used when printing. This option tells Vim which
print character encoding file from the "print" directory in 'runtimepath' to
use.
This option will accept any value from |encoding-names|. Any recognized names
-are converted to VIM standard names - see 'encoding' for more details. Names
-not recognized by VIM will just be converted to lower case and underscores
+are converted to Vim standard names - see 'encoding' for more details. Names
+not recognized by Vim will just be converted to lower case and underscores
replaced with '-' signs.
-If 'printencoding' is empty or VIM cannot find the file then it will use
-'encoding' (if VIM is compiled with |+multi_byte| and it is set an 8-bit
-encoding) to find the print character encoding file. If VIM is unable to find
+If 'printencoding' is empty or Vim cannot find the file then it will use
+'encoding' (if Vim is compiled with |+multi_byte| and it is set an 8-bit
+encoding) to find the print character encoding file. If Vim is unable to find
a character encoding file then it will use the "latin1" print character
encoding file.
-When 'encoding' is set to a multi-byte encoding, VIM will try to convert
+When 'encoding' is set to a multi-byte encoding, Vim will try to convert
characters to the printing encoding for printing (if 'printencoding' is empty
then the conversion will be to latin1). Conversion to a printing encoding
-other than latin1 will require VIM to be compiled with the |+iconv| feature.
+other than latin1 will require Vim to be compiled with the |+iconv| feature.
If no conversion is possible then printing will fail. Any characters that
cannot be converted will be replaced with upside down question marks.
@@ -186,7 +186,7 @@ header is used when this option is empty.
'printmbcharset' 'pmbcs' string (default "")
global
Sets the CJK character set to be used when generating CJK output from
-|:hardcopy|. The following predefined values are currently recognised by VIM:
+|:hardcopy|. The following predefined values are currently recognised by Vim:
Value Description ~
Chinese GB_2312-80
@@ -253,7 +253,7 @@ Japanese text you would do the following; >
If 'printmbcharset' is not one of the above values then it is assumed to
specify a custom multi-byte character set and no check will be made that it is
-compatible with the value for 'printencoding'. VIM will look for a file
+compatible with the value for 'printencoding'. Vim will look for a file
defining the character set in the "print" directory in 'runtimepath'.
*pmbfn-option*
@@ -403,10 +403,10 @@ There are currently a number of limitations with PostScript printing:
possible to get all the characters in an encoding to print by installing a
new version of the Courier font family.
-- Multi-byte support - Currently VIM will try to convert multi-byte characters
+- Multi-byte support - Currently Vim will try to convert multi-byte characters
to the 8-bit encoding specified by 'printencoding' (or latin1 if it is
empty). Any characters that are not successfully converted are shown as
- unknown characters. Printing will fail if VIM cannot convert the multi-byte
+ unknown characters. Printing will fail if Vim cannot convert the multi-byte
to the 8-bit encoding.
==============================================================================
@@ -417,11 +417,11 @@ you need to define your own PostScript font encoding vector. Details on how
to define a font encoding vector is beyond the scope of this help file, but
you can find details in the PostScript Language Reference Manual, 3rd Edition,
published by Addison-Wesley and available in PDF form at
-http://www.adobe.com/. The following describes what you need to do for VIM to
+http://www.adobe.com/. The following describes what you need to do for Vim to
locate and use your print character encoding.
i. Decide on a unique name for your encoding vector, one that does not clash
- with any of the recognized or standard encoding names that VIM uses (see
+ with any of the recognized or standard encoding names that Vim uses (see
|encoding-names| for a list), and that no one else is likely to use.
ii. Copy $VIMRUNTIME/print/latin1.ps to the print subdirectory in your
'runtimepath' and rename it with your unique name.
@@ -429,23 +429,23 @@ iii. Edit your renamed copy of latin1.ps, replacing all occurrences of latin1
with your unique name (don't forget the line starting %%Title:), and
modify the array of glyph names to define your new encoding vector. The
array must have exactly 256 entries or you will not be able to print!
-iv. Within VIM, set 'printencoding' to your unique encoding name and then
- print your file. VIM will now use your custom print character encoding.
+iv. Within Vim, set 'printencoding' to your unique encoding name and then
+ print your file. Vim will now use your custom print character encoding.
-VIM will report an error with the resource file if you change the order or
+Vim will report an error with the resource file if you change the order or
content of the first 3 lines, other than the name of the encoding on the line
starting %%Title: or the version number on the line starting %%Version:.
-[Technical explanation for those that know PostScript - VIM looks for a file
+[Technical explanation for those that know PostScript - Vim looks for a file
with the same name as the encoding it will use when printing. The file
defines a new PostScript Encoding resource called /VIM-name, where name is the
-print character encoding VIM will use.]
+print character encoding Vim will use.]
==============================================================================
5. PostScript CJK Printing *postscript-cjk-printing*
*E673* *E674* *E675*
-VIM supports printing of Chinese, Japanese, and Korean files. Setting up VIM
+Vim supports printing of Chinese, Japanese, and Korean files. Setting up Vim
to correctly print CJK files requires setting up a few more options.
Each of these countries has many standard character sets and encodings which
@@ -466,7 +466,7 @@ option allows you to specify different fonts to use when printing characters
which are syntax highlighted with the font styles normal, italic, bold and
bold-italic.
-No CJK fonts are supplied with VIM. There are some free Korean, Japanese, and
+No CJK fonts are supplied with Vim. There are some free Korean, Japanese, and
Traditional Chinese fonts available at:
http://examples.oreilly.com/cjkvinfo/adobe/samples/
@@ -481,7 +481,7 @@ CJK fonts can be large containing several thousand glyphs, and it is not
uncommon to find that they only contain a subset of a national standard. It
is not unusual to find the fonts to not include characters for codes in the
ASCII code range. If you find half-width Roman characters are not appearing
-in your printout then you should configure VIM to use the Courier font the
+in your printout then you should configure Vim to use the Courier font the
half-width ASCII characters with 'printmbfont'. If your font does not include
other characters then you will need to find another font that does.
@@ -489,7 +489,7 @@ Another issue with ASCII characters, is that the various national character
sets specify a couple of different glyphs in the ASCII code range. If you
print ASCII text using the national character set you may see some unexpected
characters. If you want true ASCII code printing then you need to configure
-VIM to output ASCII characters for the ASCII code range with 'printmbfont'.
+Vim to output ASCII characters for the ASCII code range with 'printmbfont'.
It is possible to define your own multi-byte character set although this
should not be attempted lightly. A discussion on the process if beyond the
@@ -508,13 +508,13 @@ print job completing.
There are a number of possible causes as to why the printing may have failed:
- Wrong version of the prolog resource file. The prolog resource file
- contains some PostScript that VIM needs to be able to print. Each version
- of VIM needs one particular version. Make sure you have correctly installed
+ contains some PostScript that Vim needs to be able to print. Each version
+ of Vim needs one particular version. Make sure you have correctly installed
the runtime files, and don't have any old versions of a file called prolog
in the print directory in your 'runtimepath' directory.
- Paper size. Some PostScript printers will abort printing a file if they do
- not support the requested paper size. By default VIM uses A4 paper. Find
+ not support the requested paper size. By default Vim uses A4 paper. Find
out what size paper your printer normally uses and set the appropriate paper
size with 'printoptions'. If you cannot find the name of the paper used,
measure a sheet and compare it with the table of supported paper sizes listed
@@ -645,7 +645,7 @@ complex print document creation.
N-UP PRINTING
-The psnup utility takes an existing PostScript file generated from VIM and
+The psnup utility takes an existing PostScript file generated from Vim and
convert it to an n-up version. The simplest way to create a 2-up printout is
to first create a PostScript file with: >
@@ -701,16 +701,16 @@ There are a couple of points to bear in mind:
==============================================================================
8. Formfeed Characters *printing-formfeed*
-By default VIM does not do any special processing of |formfeed| control
-characters. Setting the 'printoptions' formfeed item will make VIM recognize
+By default Vim does not do any special processing of |formfeed| control
+characters. Setting the 'printoptions' formfeed item will make Vim recognize
formfeed characters and continue printing the current line at the beginning
of the first line on a new page. The use of formfeed characters provides
rudimentary print control but there are certain things to be aware of.
-VIM will always start printing a line (including a line number if enabled)
+Vim will always start printing a line (including a line number if enabled)
containing a formfeed character, even if it is the first character on the
line. This means if a line starting with a formfeed character is the first
-line of a page then VIM will print a blank page.
+line of a page then Vim will print a blank page.
Since the line number is printed at the start of printing the line containing
the formfeed character, the remainder of the line printed on the new page
@@ -719,7 +719,7 @@ lines of a long line when wrap in 'printoptions' is enabled).
If the formfeed character is the last character on a line, then printing will
continue on the second line of the new page, not the first. This is due to
-VIM processing the end of the line after the formfeed character and moving
+Vim processing the end of the line after the formfeed character and moving
down a line to continue printing.
Due to the points made above it is recommended that when formfeed character
diff --git a/runtime/doc/provider.txt b/runtime/doc/provider.txt
index 50307ccbf3..4a76f1399e 100644
--- a/runtime/doc/provider.txt
+++ b/runtime/doc/provider.txt
@@ -8,7 +8,7 @@ Providers *provider*
Nvim delegates some features to dynamic "providers".
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
Python integration *provider-python*
@@ -20,7 +20,7 @@ Note: Only the Vim 7.3 API is supported; bindeval (Vim 7.4) is not.
PYTHON QUICKSTART ~
If you used a package manager to install Nvim, you might already have the
-required `neovim` Python package. Run |:CheckHealth| to see if your system is
+required `neovim` Python package. Run |:checkhealth| to see if your system is
up-to-date.
Following are steps to install the package with Python's `pip` tool.
@@ -33,20 +33,20 @@ To use Vim Python 2/3 plugins with Nvim:
- For Python 2 plugins, make sure an interpreter for Python 2.6 or 2.7 is
available in your `$PATH`, then install the `neovim` Python package systemwide: >
- $ sudo pip2 install --upgrade neovim
+ sudo pip2 install --upgrade neovim
<
or for the current user: >
- $ pip2 install --user --upgrade neovim
+ pip2 install --user --upgrade neovim
<
- For Python 3 plugins, make sure an interpreter for Python 3.3 or above is
available in your `$PATH`, then install the `neovim` Python package systemwide: >
- $ sudo pip3 install --upgrade neovim
+ sudo pip3 install --upgrade neovim
<
or for the current user: >
- $ pip3 install --user --upgrade neovim
+ pip3 install --user --upgrade neovim
<
Note: The `--upgrade` flag ensures you have the latest version even if
- a previous version was already installed.
+a previous version was already installed.
PYTHON PROVIDER CONFIGURATION ~
*g:python_host_prog*
@@ -88,12 +88,12 @@ Ruby integration *provider-ruby*
Nvim supports the Vim legacy |ruby-vim| interface via external Ruby
interpreters connected via |RPC|.
-Run |:CheckHealth| to see if your system is up-to-date.
+Run |:checkhealth| to see if your system is up-to-date.
RUBY QUICKSTART ~
To use Vim Ruby plugins with Nvim, just install the latest `neovim` RubyGem: >
- $ gem install neovim
+ gem install neovim
RUBY PROVIDER CONFIGURATION ~
*g:loaded_ruby_provider*
@@ -112,7 +112,30 @@ To use an absolute path (e.g. to an rbenv installation): >
To use the RVM "system" Ruby installation: >
let g:ruby_host_prog = 'rvm system do neovim-ruby-host'
<
+==============================================================================
+Node.js integration *provider-nodejs*
+
+Nvim supports Node.js |remote-plugin|s.
+https://github.com/neovim/node-client/
+https://nodejs.org/
+
+NODEJS QUICKSTART~
+
+To use javascript remote-plugins with Nvim, install the `neovim` npm package: >
+ npm install -g neovim
+<
+NODEJS PROVIDER CONFIGURATION~
+ *g:loaded_node_provider*
+To disable Node support: >
+ :let g:loaded_node_provider = 1
+<
+ *g:node_host_prog*
+Command to start the Node host. Setting this makes startup faster.
+By default, Nvim searches for `neovim-node-host` using "npm root -g", which
+can be slow. To avoid this, set g:node_host_prog to an absolute path: >
+ let g:node_host_prog = '/usr/local/bin/neovim-node-host'
+<
==============================================================================
Clipboard integration *provider-clipboard* *clipboard*
@@ -133,8 +156,8 @@ registers. Nvim looks for these clipboard tools, in order of priority:
- |g:clipboard|
- pbcopy/pbpaste (macOS)
- - xclip
- - xsel (newer alternative to xclip)
+ - xsel (if $DISPLAY is set)
+ - xclip (if $DISPLAY is set)
- lemonade (for SSH) https://github.com/pocke/lemonade
- doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/
- win32yank (Windows)
@@ -162,13 +185,11 @@ process has not died, the cached selection is applied.
==============================================================================
X11 selection mechanism *clipboard-x11* *x11-selection*
-The clipboard providers for X11 store text in what is known as "selections".
-Selections are "owned" by an application, so when the application is closed,
-the selection text is lost.
-
+X11 clipboard providers store text in "selections". Selections are owned by an
+application, so when the application gets closed, the selection text is lost.
The contents of selections are held by the originating application (e.g., upon
-a copy), and only passed on to another application when that other application
-asks for them (e.g., upon a paste).
+a copy), and only passed to another application when that other application
+requests them (e.g., upon a paste).
*quoteplus* *quote+*
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
index cad5bf98b5..f280286290 100644
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -6,7 +6,7 @@
This subject is introduced in section |30.1| of the user manual.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
=============================================================================
1. Using QuickFix commands *quickfix* *Quickfix* *E42*
@@ -31,11 +31,21 @@ From inside Vim an easy way to run a command and handle the output is with the
The 'errorformat' option should be set to match the error messages from your
compiler (see |errorformat| below).
+ *quickfix-ID*
+Each quickfix list has a unique identifier called the quickfix ID and this
+number will not change within a Vim session. The getqflist() function can be
+used to get the identifier assigned to a list. There is also a quickfix list
+number which may change whenever more than ten lists are added to a quickfix
+stack.
+
*location-list* *E776*
-A location list is similar to a quickfix list and contains a list of positions
-in files. A location list is associated with a window and each window can
-have a separate location list. A location list can be associated with only
-one window. The location list is independent of the quickfix list.
+A location list is a window-local quickfix list. You get one after commands
+like `:lvimgrep`, `:lgrep`, `:lhelpgrep`, `:lmake`, etc., which create a
+location list instead of a quickfix list as the corresponding `:vimgrep`,
+`:grep`, `:helpgrep`, `:make` do.
+A location list is associated with a window and each window can have a
+separate location list. A location list can be associated with only one
+window. The location list is independent of the quickfix list.
When a window with a location list is split, the new window gets a copy of the
location list. When there are no longer any references to a location list,
@@ -138,11 +148,15 @@ processing a quickfix or location list command, it will be aborted.
current window is used instead of the quickfix list.
*:cq* *:cquit*
-:cq[uit][!] Quit Vim with an error code, so that the compiler
- will not compile the same file again.
- WARNING: All changes in files are lost! Also when the
- [!] is not used. It works like ":qall!" |:qall|,
- except that Vim returns a non-zero exit code.
+:[count]cq[uit] Quit Nvim with an error code, or the code specified in
+ [count]. Useful when Nvim is called from another
+ program: e.g. `git commit` will abort the comitting
+ process, `fc` (built-in for shells like bash and zsh)
+ will not execute the command.
+
+ WARNING: All changes in files are lost. It works like
+ ":qall!" |:qall|, except that Nvim exits non-zero or
+ [count].
*:cf* *:cfile*
:cf[ile][!] [errorfile] Read the error file and jump to the first error.
@@ -151,6 +165,9 @@ processing a quickfix or location list command, it will be aborted.
keep Vim running while compiling. If you give the
name of the errorfile, the 'errorfile' option will
be set to [errorfile]. See |:cc| for [!].
+ If the encoding of the error file differs from the
+ 'encoding' option, you can use the 'makeencoding'
+ option to specify the encoding.
*:lf* *:lfile*
:lf[ile][!] [errorfile] Same as ":cfile", except the location list for the
@@ -162,6 +179,9 @@ processing a quickfix or location list command, it will be aborted.
:cg[etfile] [errorfile] *:cg* *:cgetfile*
Read the error file. Just like ":cfile" but don't
jump to the first error.
+ If the encoding of the error file differs from the
+ 'encoding' option, you can use the 'makeencoding'
+ option to specify the encoding.
:lg[etfile] [errorfile] *:lg* *:lgetfile*
@@ -172,6 +192,9 @@ processing a quickfix or location list command, it will be aborted.
:caddf[ile] [errorfile] Read the error file and add the errors from the
errorfile to the current quickfix list. If a quickfix
list is not present, then a new list is created.
+ If the encoding of the error file differs from the
+ 'encoding' option, you can use the 'makeencoding'
+ option to specify the encoding.
*:laddf* *:laddfile*
:laddf[ile] [errorfile] Same as ":caddfile", except the location list for the
@@ -308,6 +331,7 @@ use this code: >
endfunction
au QuickfixCmdPost make call QfMakeConv()
+Another option is using 'makeencoding'.
EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
*:cdo*
@@ -446,7 +470,11 @@ keep its height, ignoring 'winheight' and 'equalalways'. You can change the
height manually (e.g., by dragging the status line above it with the mouse).
In the quickfix window, each line is one error. The line number is equal to
-the error number. You can use ":.cc" to jump to the error under the cursor.
+the error number. The current entry is highlighted with the QuickFixLine
+highlighting. You can change it to your liking, e.g.: >
+ :hi QuickFixLine ctermbg=Yellow guibg=Yellow
+
+You can use ":.cc" to jump to the error under the cursor.
Hitting the <Enter> key or double-clicking the mouse on a line has the same
effect. The file containing the error is opened in the window above the
quickfix window. If there already is a window for that file, it is used
@@ -572,6 +600,9 @@ lists, use ":cnewer 99" first.
like |:cnext| and |:cprevious|, see above.
This command does not accept a comment, any "
characters are considered part of the arguments.
+ If the encoding of the program output differs from the
+ 'encoding' option, you can use the 'makeencoding'
+ option to specify the encoding.
*:lmak* *:lmake*
:lmak[e][!] [arguments]
@@ -631,6 +662,7 @@ read the error messages: >
au QuickfixCmdPost make call QfMakeConv()
(Example by Faque Cheng)
+Another option is using 'makeencoding'.
==============================================================================
5. Using :vimgrep and :grep *grep* *lid*
@@ -745,6 +777,9 @@ id-utils) in a similar way to its compiler integration (see |:make| above).
When 'grepprg' is "internal" this works like
|:vimgrep|. Note that the pattern needs to be
enclosed in separator characters then.
+ If the encoding of the program output differs from the
+ 'encoding' option, you can use the 'makeencoding'
+ option to specify the encoding.
*:lgr* *:lgrep*
:lgr[ep][!] [arguments] Same as ":grep", except the location list for the
@@ -769,6 +804,10 @@ id-utils) in a similar way to its compiler integration (see |:make| above).
\ | catch /E480:/
\ | endtry"
<
+ If the encoding of the program output differs from the
+ 'encoding' option, you can use the 'makeencoding'
+ option to specify the encoding.
+
*:lgrepa* *:lgrepadd*
:lgrepa[dd][!] [arguments]
Same as ":grepadd", except the location list for the
@@ -1358,7 +1397,7 @@ prints information about entering a directory in the form "Making all in dir".
Making all in dir2 ./dir1/dir2
This can be solved by printing absolute directories in the "enter directory"
- message or by printing "leave directory" messages..
+ message or by printing "leave directory" messages.
To avoid this problem, ensure to print absolute directory names and "leave
directory" messages.
@@ -1534,4 +1573,4 @@ by Vim.
- vim:tw=78:ts=8:ft=help:norl:
+ vim:noet:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt
index 128c70ee94..a0ca17cc4a 100644
--- a/runtime/doc/quickref.txt
+++ b/runtime/doc/quickref.txt
@@ -571,8 +571,7 @@ In Insert or Command-line mode:
*Q_op* Options
|:set| :se[t] show all modified options
-|:set| :se[t] all show all non-termcap options
-|:set| :se[t] termcap show all termcap options
+|:set| :se[t] all show all options
|:set| :se[t] {option} set boolean option (switch it on),
show string or number option
|:set| :se[t] no{option} reset boolean option (switch it off)
@@ -656,7 +655,6 @@ Short explanation of each option: *option-list*
'cscoperelative' 'csre' Use cscope.out path basename as prefix
'cscopetag' 'cst' use cscope for tag commands
'cscopetagorder' 'csto' determines ":cstag" search order
-'cscopeverbose' 'csverb' give messages when adding a cscope database
'cursorbind' 'crb' move cursor in window as it moves in other windows
'cursorcolumn' 'cuc' highlight the screen column of the cursor
'cursorline' 'cul' highlight the screen line of the cursor
@@ -722,7 +720,6 @@ Short explanation of each option: *option-list*
'helpheight' 'hh' minimum height of a new help window
'helplang' 'hlg' preferred help languages
'hidden' 'hid' don't unload buffer when it is |abandon|ed
-'highlight' 'hl' sets highlighting mode for various occasions
'hlsearch' 'hls' highlight matches with last search pattern
'history' 'hi' number of command-lines that are remembered
'hkmap' 'hk' Hebrew keyboard mapping
@@ -764,6 +761,7 @@ Short explanation of each option: *option-list*
'loadplugins' 'lpl' load plugin scripts when starting up
'magic' changes special characters in search patterns
'makeef' 'mef' name of the errorfile for ":make"
+'makeencoding' 'menc' encoding of external make/grep commands
'makeprg' 'mp' program to use for the ":make" command
'matchpairs' 'mps' pairs of characters that "%" can match
'matchtime' 'mat' tenths of a second to show matching paren
@@ -1255,6 +1253,7 @@ Context-sensitive completion on the command-line:
|:sfind| :sf[ind] {file} split window, find {file} in 'path'
and edit it
+|:terminal| :terminal {cmd} open a terminal window
|CTRL-W_]| CTRL-W ] split window and jump to tag under
cursor
|CTRL-W_f| CTRL-W f split window and edit file name under
diff --git a/runtime/doc/recover.txt b/runtime/doc/recover.txt
index 2b49af1c96..0533157072 100644
--- a/runtime/doc/recover.txt
+++ b/runtime/doc/recover.txt
@@ -15,7 +15,7 @@ You can recover most of your changes from the files that Vim uses to store
the contents of the file. Mostly you can recover your work with one command:
vim -r filename
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. The swap file *swap-file*
diff --git a/runtime/doc/remote.txt b/runtime/doc/remote.txt
index bdc763b85f..039d8b582e 100644
--- a/runtime/doc/remote.txt
+++ b/runtime/doc/remote.txt
@@ -6,7 +6,7 @@
Vim client-server communication *client-server*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Common functionality *clientserver*
@@ -87,7 +87,7 @@ Tell the remote server "BLA" to write all files and exit: >
vim --servername BLA --remote-send '<C-\><C-N>:wqa<CR>'
-SERVER NAME
+SERVER NAME *client-server-name*
By default Vim will try to register the name under which it was invoked (gvim,
egvim ...). This can be overridden with the --servername argument. If the
@@ -137,6 +137,7 @@ the description in |eval.txt| or use CTRL-] on the function name to jump to
the full explanation.
synopsis explanation ~
+ remote_startserver( name) run a server
remote_expr( server, string, idvar) send expression
remote_send( server, string, idvar) send key sequence
serverlist() get a list of available servers
diff --git a/runtime/doc/remote_plugin.txt b/runtime/doc/remote_plugin.txt
index cc2efd3d1f..eeb9cf8150 100644
--- a/runtime/doc/remote_plugin.txt
+++ b/runtime/doc/remote_plugin.txt
@@ -6,7 +6,7 @@
Nvim support for remote plugins *remote-plugin*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *remote-plugin-intro*
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index 0b3edc9bba..421ebab100 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -8,7 +8,7 @@ Repeating commands, Vim scripts and debugging *repeating*
Chapter 26 of the user manual introduces repeating |usr_26.txt|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Single repeats *single-repeat*
diff --git a/runtime/doc/russian.txt b/runtime/doc/russian.txt
index e2c44ce54f..8c6076146c 100644
--- a/runtime/doc/russian.txt
+++ b/runtime/doc/russian.txt
@@ -6,7 +6,7 @@
Russian language localization and support in Vim *russian* *Russian*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
===============================================================================
1. Introduction *russian-intro*
diff --git a/runtime/doc/scroll.txt b/runtime/doc/scroll.txt
index 52e5cc9f0c..99ebd26db3 100644
--- a/runtime/doc/scroll.txt
+++ b/runtime/doc/scroll.txt
@@ -16,7 +16,7 @@ upwards in the buffer, the text in the window moves downwards on your screen.
See section |03.7| of the user manual for an introduction.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Scrolling downwards *scroll-down*
@@ -211,7 +211,7 @@ past its buffer's limits.
However, if a 'scrollbind' window that has a relative offset that is past its
buffer's limits is given the cursor focus, the other 'scrollbind' windows must
jump to a location where the current window's relative offset is valid. This
-behavior can be changed by clearing the 'jump' flag from the 'scrollopt'
+behavior can be changed by clearing the "jump" flag from the 'scrollopt'
option.
*syncbind* *:syncbind* *:sync*
diff --git a/runtime/doc/sign.txt b/runtime/doc/sign.txt
index ced0608e8a..977d73b7b2 100644
--- a/runtime/doc/sign.txt
+++ b/runtime/doc/sign.txt
@@ -7,7 +7,7 @@
Sign Support Features *sign-support*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *sign-intro* *signs*
diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt
index 5c99db42ba..718b5d4c1f 100644
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -6,7 +6,7 @@
Spell checking *spell*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Quick start *spell-quickstart* *E756*
@@ -459,7 +459,7 @@ Vim uses a binary file format for spelling. This greatly speeds up loading
the word list and keeps it small.
*.aff* *.dic* *Myspell*
You can create a Vim spell file from the .aff and .dic files that Myspell
-uses. Myspell is used by OpenOffice.org and Mozilla. The OpenOffice .oxt
+uses. Myspell is used by OpenOffice.org and Mozilla. The OpenOffice .oxt
files are zip files which contain the .aff and .dic files. You should be able
to find them here:
http://extensions.services.openoffice.org/dictionary
@@ -704,7 +704,7 @@ Additionally the following items are recognized:
= Case must match exactly.
? Rare word.
! Bad (wrong) word.
- digit A region in which the word is valid. If no regions are
+ 1 to 9 A region in which the word is valid. If no regions are
specified the word is valid in all regions.
Example:
@@ -1594,7 +1594,7 @@ COMPOUNDSYLLABLE (Hunspell) *spell-COMPOUNDSYLLABLE*
KEY (Hunspell) *spell-KEY*
Define characters that are close together on the keyboard.
Used to give better suggestions. Not supported.
-
+
LANG (Hunspell) *spell-LANG*
This specifies language-specific behavior. This actually
moves part of the language knowledge into the program,
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
index 8581bcfb72..e9188ba641 100644
--- a/runtime/doc/starting.txt
+++ b/runtime/doc/starting.txt
@@ -6,7 +6,7 @@
Starting Vim *starting*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Vim arguments *vim-arguments*
@@ -53,7 +53,7 @@ filename One or more file names. The first one will be the current
< Starting in Ex mode: >
nvim -e -
nvim -E
-< Start editing in silent mode. See |-s-ex|.
+< Start editing in |silent-mode|.
*-t* *-tag*
-t {tag} A tag. "tag" is looked up in the tags file, the associated
@@ -200,7 +200,7 @@ argument.
*-E*
-E Start Vim in improved Ex mode |gQ|.
- *-s-ex*
+ *-s-ex* *silent-mode*
-s Silent or batch mode. Only when "-s" is preceded by the "-e"
argument. Otherwise see |-s|, which does take an argument
while this use of "-s" doesn't. To be used when Vim is used
@@ -214,14 +214,14 @@ argument.
:set to display option values.
When 'verbose' is non-zero messages are printed (for
debugging, to stderr).
- $TERM is not used.
+ |$TERM| is not used.
If Vim appears to be stuck try typing "qa!<Enter>". You don't
get a prompt thus you can't see Vim is waiting for you to type
something.
Initializations are skipped (except the ones given with the
"-u" argument).
Example: >
- vim -e -s < thefilter thefile
+ vim -es < thefilter thefile
<
*-b*
-b Binary mode. File I/O will only recognize <NL> to separate
@@ -249,14 +249,14 @@ argument.
for reading or writing a ShaDa file. Can be used to find
out what is happening upon startup and exit.
Example: >
- vim -V8 foobar
+ nvim -V8
-V[N]{filename}
- Like -V and set 'verbosefile' to {filename}. The result is
- that messages are not displayed but written to the file
- {filename}. {filename} must not start with a digit.
+ Like -V and set 'verbosefile' to {filename}. Messages are not
+ displayed; instead they are written to the file {filename}.
+ {filename} must not start with a digit.
Example: >
- vim -V20vimlog foobar
+ nvim -V20vimlog
<
*-D*
-D Debugging. Go to debugging mode when executing the first
@@ -349,13 +349,19 @@ argument.
*--api-info*
--api-info Print msgpack-encoded |api-metadata| and exit.
+ *--headless*
+--headless Do not start the built-in UI.
+ See |channel-stdio| for how to use stdio for other purposes
+ instead.
+ See also |silent-mode|, which does start a (limited) UI.
+
==============================================================================
2. Initialization *initialization* *startup*
At startup, Vim checks environment variables and files and sets values
accordingly. Vim proceeds in this order:
-1. Set the 'shell' option *SHELL* *COMSPEC* *TERM*
+1. Set the 'shell' option *SHELL* *COMSPEC*
The environment variable SHELL, if it exists, is used to set the
'shell' option. On Windows, the COMSPEC variable is used
if SHELL is not set.
@@ -433,15 +439,14 @@ accordingly. Vim proceeds in this order:
:runtime! filetype.vim
:runtime! ftplugin.vim
:runtime! indent.vim
-< This step is skipped if ":filetype ..." was called before now or if
- the "-u NONE" command line argument was given.
+< Skipped if ":filetype … off" was called or if the "-u NONE" command
+ line argument was given.
5. Enable syntax highlighting.
This does the same as the command: >
:runtime! syntax/syntax.vim
-< Note: This enables filetype detection even if ":filetype off" was
- called before now.
- This step is skipped if the "-u NONE" command line argument was given.
+< Skipped if ":syntax off" was called or if the "-u NONE" command
+ line argument was given.
6. Load the plugin scripts. *load-plugins*
This does the same as the command: >
@@ -629,54 +634,40 @@ though.
==============================================================================
3. $VIM and $VIMRUNTIME
*$VIM*
-The environment variable "$VIM" is used to locate various user files for Vim,
+The environment variable "$VIM" is used to locate various user files for Nvim,
such as the user startup script |init.vim|. This depends on the system, see
|startup|.
-To avoid the need for every user to set the $VIM environment variable, Vim
-will try to get the value for $VIM in this order:
-1. The value defined by the $VIM environment variable. You can use this to
- make Vim look in a specific directory for its support files. Example: >
- setenv VIM /home/paul/vim
-2. The path from 'helpfile' is used, unless it contains some environment
- variable too (the default is "$VIMRUNTIME/doc/help.txt": chicken-egg
- problem). The file name ("help.txt" or any other) is removed. Then
- trailing directory names are removed, in this order: "doc", "runtime" and
- "vim{version}" (e.g., "vim54").
-3. For MSDOS and Win32 Vim tries to use the directory name of the
- executable. If it ends in "/src", this is removed. This is useful if you
- unpacked the .zip file in some directory, and adjusted the search path to
- find the vim executable. Trailing directory names are removed, in this
- order: "runtime" and "vim{version}" (e.g., "vim54").
-4. For Unix the compile-time defined installation directory is used (see the
- output of ":version").
-
-Once Vim has done this once, it will set the $VIM environment variable. To
-change it later, use a ":let" command like this: >
- :let $VIM = "/home/paul/vim/"
-<
+Nvim will try to get the value for $VIM in this order:
+
+1. Environment variable $VIM, if it is set.
+2. Path derived from the 'helpfile' option, unless it contains some
+ environment variable too (default is "$VIMRUNTIME/doc/help.txt"). File
+ name ("help.txt", etc.) is removed. Trailing directory names are removed,
+ in this order: "doc", "runtime".
+3. Path derived from the location of the `nvim` executable.
+4. Compile-time defined installation directory (see output of ":version").
+
+After doing this once, Nvim sets the $VIM environment variable.
+
*$VIMRUNTIME*
The environment variable "$VIMRUNTIME" is used to locate various support
-files, such as the on-line documentation and files used for syntax
-highlighting. For example, the main help file is normally
-"$VIMRUNTIME/doc/help.txt".
-You don't normally set $VIMRUNTIME yourself, but let Vim figure it out. This
-is the order used to find the value of $VIMRUNTIME:
-1. If the environment variable $VIMRUNTIME is set, it is used. You can use
- this when the runtime files are in an unusual location.
-2. If "$VIM/vim{version}" exists, it is used. {version} is the version
- number of Vim, without any '-' or '.'. For example: "$VIM/vim54". This is
- the normal value for $VIMRUNTIME.
-3. If "$VIM/runtime" exists, it is used.
-4. The value of $VIM is used. This is for backwards compatibility with older
- versions.
+files, such as the documentation and syntax-highlighting files. For example,
+the main help file is normally "$VIMRUNTIME/doc/help.txt".
+
+Nvim will try to get the value for $VIMRUNTIME in this order:
+
+1. Environment variable $VIMRUNTIME, if it is set.
+2. Directory path "$VIM/vim{version}", if it exists, where {version} is the
+ Vim version number without '-' or '.'. For example: "$VIM/vim54".
+3. Directory path "$VIM/runtime", if it exists.
+4. Value of $VIM environment variable. This is for backwards compatibility
+ with older Vim versions.
5. If "../share/nvim/runtime" exists relative to |v:progpath|, it is used.
-6. When the 'helpfile' option is set and doesn't contain a '$', its value is
- used, with "doc/help.txt" removed from the end.
+6. Path derived from the 'helpfile' option (if it doesn't contain '$') with
+ "doc/help.txt" removed from the end.
-Once Vim has done this once, it will set the $VIMRUNTIME environment variable.
-To change it later, use a ":let" command like this: >
- :let $VIMRUNTIME = "/home/piet/vim/vim54"
+After doing this once, Nvim sets the $VIMRUNTIME environment variable.
In case you need the value of $VIMRUNTIME in a shell (e.g., for a script that
greps in the help files) you might be able to use this: >
@@ -895,7 +886,7 @@ The output of ":mkview" contains these items:
5. The scroll position and the cursor position in the file. Doesn't work very
well when there are closed folds.
6. The local current directory, if it is different from the global current
- directory.
+ directory and 'viewoptions' contains "curdir".
Note that Views and Sessions are not perfect:
- They don't restore everything. For example, defined functions, autocommands
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 07af856e6b..ff9773b136 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -20,7 +20,7 @@ In the User Manual:
|usr_06.txt| introduces syntax highlighting.
|usr_44.txt| introduces writing a syntax file.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Quick start *:syn-qstart*
@@ -39,10 +39,12 @@ fine. If it doesn't, try setting the VIM environment variable to the
directory where the Vim stuff is located. For example, if your syntax files
are in the "/usr/vim/vim50/syntax" directory, set $VIMRUNTIME to
"/usr/vim/vim50". You must do this in the shell, before starting Vim.
+This command also sources the |menu.vim| script when the GUI is running or
+will start soon. See |'go-M'| about avoiding that.
*:syn-on* *:syntax-on*
-The ":syntax enable" command will keep your current color settings. This
-allows using ":highlight" commands to set your preferred colors before or
+The `:syntax enable` command will keep your current color settings. This
+allows using `:highlight` commands to set your preferred colors before or
after using this command. If you want Vim to overrule your settings with the
defaults, use: >
:syntax on
@@ -788,12 +790,9 @@ See |mysyntaxfile-add| for installing script languages permanently.
APACHE *apache.vim* *ft-apache-syntax*
-The apache syntax file provides syntax highlighting depending on Apache HTTP
-server version, by default for 1.3.x. Set "apache_version" to Apache version
-(as a string) to get highlighting for another version. Example: >
+The apache syntax file provides syntax highlighting for Apache HTTP server
+version 2.2.3.
- :let apache_version = "2.0"
-<
*asm.vim* *asmh8300.vim* *nasm.vim* *masm.vim* *asm68k*
ASSEMBLY *ft-asm-syntax* *ft-asmh8300-syntax* *ft-nasm-syntax*
@@ -2108,6 +2107,16 @@ set "msql_minlines" to the value you desire. Example: >
:let msql_minlines = 200
+N1QL *n1ql.vim* *ft-n1ql-syntax*
+
+N1QL is a SQL-like declarative language for manipulating JSON documents in
+Couchbase Server databases.
+
+Vim syntax highlights N1QL statements, keywords, operators, types, comments,
+and special values. Vim ignores syntactical elements specific to SQL or its
+many dialects, like COLUMN or CHAR, that don't exist in N1QL.
+
+
NCF *ncf.vim* *ft-ncf-syntax*
There is one option for NCF syntax highlighting.
@@ -2616,9 +2625,9 @@ later, and part earlier) adds.
RESTRUCTURED TEXT *rst.vim* *ft-rst-syntax*
-You may set what syntax definitions should be used for code blocks via
+You may set what syntax definitions should be used for code blocks via >
let rst_syntax_code_list = ['vim', 'lisp', ...]
-
+<
REXX *rexx.vim* *ft-rexx-syntax*
@@ -3270,11 +3279,10 @@ improve screen updating rates (see |:syn-sync| for more on this). >
The g:vimsyn_embed option allows users to select what, if any, types of
embedded script highlighting they wish to have. >
- g:vimsyn_embed == 0 : don't embed any scripts
- g:vimsyn_embed =~ 'P' : support embedded python
+ g:vimsyn_embed == 0 : disable (don't embed any scripts)
+ g:vimsyn_embed == 'lPr' : support embedded lua, python and ruby
<
-By default, g:vimsyn_embed is a string supporting interpreters that your vim
-itself supports.
+This option is disabled by default.
*g:vimsyn_folding*
Some folding is now supported with syntax/vim.vim: >
@@ -4544,12 +4552,11 @@ is mostly used, because it looks better.
==============================================================================
12. Highlight command *:highlight* *:hi* *E28* *E411* *E415*
-There are three types of highlight groups:
+There are two types of highlight groups:
+- The built-in |highlight-groups|.
- The ones used for specific languages. For these the name starts with the
name of the language. Many of these don't have any attributes, but are
linked to a group of the second type.
-- The ones used for all syntax languages.
-- The ones used for the 'highlight' option.
*hitest.vim*
You can see all the groups currently active with this command: >
:so $VIMRUNTIME/syntax/hitest.vim
@@ -4696,23 +4703,13 @@ cterm={attr-list} *highlight-cterm*
ctermfg={color-nr} *highlight-ctermfg* *E421*
ctermbg={color-nr} *highlight-ctermbg*
The {color-nr} argument is a color number. Its range is zero to
- (not including) the number given by the termcap entry "Co".
+ (not including) the number of |tui-colors| available.
The actual color with this number depends on the type of terminal
and its settings. Sometimes the color also depends on the settings of
"cterm". For example, on some systems "cterm=bold ctermfg=3" gives
another color, on others you just get color 3.
- For an xterm this depends on your resources, and is a bit
- unpredictable. See your xterm documentation for the defaults. The
- colors for a color-xterm can be changed from the .Xdefaults file.
- Unfortunately this means that it's not possible to get the same colors
- for each user.
-
- The MSDOS standard colors are fixed (in a console window), so these
- have been used for the names. But the meaning of color names in X11
- are fixed, so these color settings have been used, to make the
- highlighting settings portable (complicated, isn't it?). The
- following names are recognized, with the color number used:
+ The following names are recognized, with the color number used:
*cterm-colors*
NR-16 NR-8 COLOR NAME ~
@@ -4759,18 +4756,18 @@ ctermbg={color-nr} *highlight-ctermbg*
Example: >
:highlight Normal ctermfg=grey ctermbg=darkblue
< When setting the "ctermbg" color for the Normal group, the
- 'background' option will be adjusted automatically. This causes the
- highlight groups that depend on 'background' to change! This means
- you should set the colors for Normal first, before setting other
- colors.
+ 'background' option will be adjusted automatically, under the
+ condition that the color is recognized and 'background' was not set
+ explicitly. This causes the highlight groups that depend on
+ 'background' to change! This means you should set the colors for
+ Normal first, before setting other colors.
When a colorscheme is being used, changing 'background' causes it to
be reloaded, which may reset all colors (including Normal). First
delete the "g:colors_name" variable when you don't want this.
When you have set "ctermfg" or "ctermbg" for the Normal group, Vim
- needs to reset the color when exiting. This is done with the "op"
- termcap entry |t_op|. If this doesn't work correctly, try setting the
- 't_op' option in your vimrc.
+ needs to reset the color when exiting. This is done with the
+ "orig_pair" |terminfo| entry.
*E419* *E420*
When Vim knows the normal foreground and background colors, "fg" and
"bg" can be used as color names. This only works after setting the
@@ -4922,7 +4919,7 @@ NonText '@' at the end of the window, characters from 'showbreak'
*hl-Normal*
Normal normal text
*hl-NormalNC*
-NormalNC normal text in non-current window
+NormalNC normal text in non-current windows
*hl-Pmenu*
Pmenu Popup menu: normal item.
*hl-PmenuSel*
@@ -5082,8 +5079,6 @@ defaults back: >
It is a bit of a wrong name, since it does not reset any syntax items, it only
affects the highlighting.
-This doesn't change the colors for the 'highlight' option.
-
Note that the syntax colors that you set in your vimrc file will also be reset
back to their Vim default.
Note that if you are using a color scheme, the colors defined by the color
@@ -5207,10 +5202,7 @@ To test your color setup, a file has been included in the Vim distribution.
To use it, execute this command: >
:runtime syntax/colortest.vim
-Some versions of xterm (and other terminals, like the Linux console) can
-output lighter foreground colors, even though the number of colors is defined
-at 8. Therefore Vim sets the "cterm=bold" attribute for light foreground
-colors, when 't_Co' is 8.
+Nvim uses |256-color| and |true-color| terminal capabilities whereever possible.
==============================================================================
18. When syntax is slow *:syntime*
diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt
index 8f1eb9d8cd..6be7cf9746 100644
--- a/runtime/doc/tabpage.txt
+++ b/runtime/doc/tabpage.txt
@@ -10,7 +10,7 @@ The commands which have been added to use multiple tab pages are explained
here. Additionally, there are explanations for commands that work differently
when used in combination with more than one tab page.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *tab-page-intro*
diff --git a/runtime/doc/tagsrch.txt b/runtime/doc/tagsrch.txt
index d5a4f4e627..f0ad2cfd43 100644
--- a/runtime/doc/tagsrch.txt
+++ b/runtime/doc/tagsrch.txt
@@ -8,7 +8,7 @@ Tags and special searches *tags-and-searches*
See section |29.1| of the user manual for an introduction.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Jump to a tag *tag-commands*
@@ -189,6 +189,7 @@ the same entry.
information in the tags file(s).
When [ident] is not given, the last tag name from the
tag stack is used.
+ See |tag-!| for [!].
With a '>' in the first column is indicated which is
the current position in the list (if there is one).
[ident] can be a regexp pattern, see |tag-regexp|.
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index cdff8760fc..075ffdac52 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -1,39 +1,181 @@
*term.txt* Nvim
- VIM REFERENCE MANUAL by Bram Moolenaar
+ NVIM REFERENCE MANUAL
-Terminal information
+Terminal UI *tui*
-Vim uses information about the terminal you are using to fill the screen and
-recognize what keys you hit. If this information is not correct, the screen
-may be messed up or keys may not be recognized. The actions which have to be
-performed on the screen are accomplished by outputting a string of
-characters.
+Nvim (except in |--headless| mode) uses information about the terminal you are
+using to present a built-in UI. If that information is not correct, the
+screen may be messed up or keys may not be recognized.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
Startup *startup-terminal*
-When Vim is started a default terminal type is assumed. for MS-DOS this is
-the pc terminal, for Unix an ansi terminal.
+Nvim (except in |--headless| mode) guesses a terminal type when it starts.
+|$TERM| is the primary hint that determines the terminal type.
- *termcap* *terminfo* *E557* *E558* *E559*
-On Unix the terminfo database or termcap file is used. This is referred to as
-"termcap" in all the documentation.
+ *terminfo* *E557* *E558* *E559*
+The terminfo database is used if available.
-Settings depending on terminal *term-dependent-settings*
+The Unibilium library (used by Nvim to read terminfo) allows you to override
+the system terminfo with one in $HOME/.terminfo/ directory, in part or in
+whole.
-If you want to set options or mappings, depending on the terminal name, you
-can do this best in your vimrc. Example: >
+Building your own terminfo is usually as simple as running this as
+a non-superuser:
+>
+ curl -LO http://invisible-island.net/datafiles/current/terminfo.src.gz
+ gunzip terminfo.src.gz
+ tic terminfo.src
+<
+ *$TERM*
+The $TERM environment variable must match the terminal you are using!
+Otherwise Nvim cannot know what sequences your terminal expects, and weird
+or sub-optimal behavior will result (scrolling quirks, wrong colors, etc.).
+
+$TERM is also important because it is mirrored by SSH to the remote session,
+unlike most other environment variables.
+
+ For this terminal Set $TERM to |builtin-terms|
+ -------------------------------------------------------------------------
+ iTerm (original) iterm, iTerm.app N
+ iTerm2 (new capabilities) iterm2, iTerm2.app Y
+ Konsole konsole-256color N
+ anything libvte-based vte, vte-256color Y
+ (e.g. GNOME Terminal) (aliases: gnome, gnome-256color)
+ tmux tmux, tmux-256color Y
+ screen screen, screen-256color Y
+ PuTTY putty, putty-256color Y
+ Terminal.app nsterm N
+ Linux virtual terminal linux, linux-256color Y
+
+ *builtin-terms* *builtin_terms*
+If a |terminfo| database is not available, or no entry for the terminal type is
+found in that database, Nvim will use a compiled-in mini-database of terminfo
+entries for "xterm", "putty", "screen", "tmux", "rxvt", "iterm", "interix",
+"linux", "st", "vte", "gnome", and "ansi".
+
+The lookup matches the initial portion of the terminal type, so (for example)
+"putty-256color" and "putty" will both be mapped to the built-in "putty"
+entry. The built-in terminfo entries describe the terminal as 256-colour
+capable if possible. See |tui-colors|.
+
+If no built-in terminfo record matches the terminal type, the built-in "ansi"
+terminfo record is used as a final fallback.
+
+The built-in mini-database is not combined with an external terminfo database,
+nor can it be used in preference to one. You can thus entirely override any
+omissions or out-of-date information in the built-in terminfo database by
+supplying an external one with entries for the terminal type.
- if &term == "xterm"
- ... xterm maps and settings ...
- elseif &term =~ "vt10."
- ... vt100, vt102 maps and settings ...
- endif
+Settings depending on terminal *term-dependent-settings*
+
+If you want to set terminal-dependent options or mappings, you can do this in
+your init.vim. Example: >
+
+ if $TERM =~ '^\(rxvt\|screen\|interix\|putty\)\(-.*\)\?$'
+ set notermguicolors
+ elseif $TERM =~ '^\(tmux\|iterm\|vte\|gnome\)\(-.*\)\?$'
+ set termguicolors
+ elseif $TERM =~ '^\(xterm\)\(-.*\)\?$'
+ if $XTERM_VERSION != ''
+ set termguicolors
+ elseif $KONSOLE_PROFILE_NAME != ''
+ set termguicolors
+ elseif $VTE_VERSION != ''
+ set termguicolors
+ else
+ set notermguicolors
+ endif
+ elseif $TERM =~ ...
+ ... and so forth ...
+ endif
+<
+ *scroll-region* *xterm-scroll-region*
+Where possible, Nvim will use the terminal's ability to set a scroll region in
+order to redraw faster when a window is scrolled. If the terminal's terminfo
+description describes an ability to set top and bottom scroll margins, that is
+used.
+
+This will not speed up scrolling in a window that is not the full width of the
+terminal. Xterm has an extra ability, not described by terminfo, to set left
+and right scroll margins as well. If Nvim detects that the terminal is Xterm,
+it will make use of this ability to speed up scrolling that is not the full
+width of the terminal.
+
+This ability is only present in genuine Xterm, not in the many terminal
+emulators that incorrectly describe themselves as xterm. Nvim's detection of
+genuine Xterm will not work over an SSH connection, because the environment
+variable, set by genuine Xterm, that it looks for is not automatically
+replicated over an SSH login session.
+
+ *tui-colors*
+Nvim uses 256 colours by default, ignoring |terminfo| for most terminal types,
+including "linux" (whose virtual terminals have had 256-colour support since
+4.8) and anything claiming to be "xterm". Also when $COLORTERM or $TERM
+contain the string "256".
+
+Nvim similarly assumes that any terminal emulator that sets $COLORTERM to any
+value, is capable of at least 16-colour operation.
+
+ *true-color* *xterm-true-color*
+Nvim emits true (24-bit) colours in the terminal, if 'termguicolors' is set.
+
+It uses the "setrgbf" and "setrgbb" |terminfo| extensions (proposed by Rüdiger
+Sonderfeld in 2013). If your terminfo definition is missing them, then Nvim
+will decide whether to add them to your terminfo definition, using the ISO
+8613-6:1994/ITU T.416:1993 control sequences for setting RGB colours (but
+modified to use semicolons instead of colons unless the terminal is known to
+follow the standard).
+
+Another convention, pioneered in 2016 by tmux, is the "Tc" terminfo extension.
+If terminfo has this flag, Nvim will add constructed "setrgbf" and "setrgbb"
+capabilities as if they had been in the terminfo definition.
+
+If terminfo does not (yet) have this flag, Nvim will fall back to $TERM and
+other environment variables. It will add constructed "setrgbf" and "setrgbb"
+capabilities in the case of the the "rxvt", "linux", "st", "tmux", and "iterm"
+terminal types, or when Konsole, genuine Xterm, a libvte terminal emulator
+version 0.36 or later, or a terminal emulator that sets the COLORTERM
+environment variable to "truecolor" is detected.
+
+ *xterm-resize*
+Nvim can resize the terminal display on some terminals that implement an
+extension pioneered by dtterm. |terminfo| does not have a flag for this
+extension. So Nvim simply assumes that (all) "dtterm", "xterm", "teraterm",
+"rxvt" terminal types, and Konsole, are capable of this.
+
+ *tui-cursor-shape*
+Nvim will adjust the shape of the cursor from a block to a line when in insert
+mode (or as specified by the 'guicursor' option), on terminals that support
+it. It uses the same |terminfo| extensions that were pioneered by tmux for
+this: "Ss" and "Se".
+
+If your terminfo definition is missing them, then Nvim will decide whether to
+add them to your terminfo definition, by looking at $TERM and other
+environment variables. For the "rxvt", "putty", "linux", "screen",
+"teraterm", and "iterm" terminal types, or when Konsole, a libvte-based
+terminal emulator, or genuine Xterm are detected, it will add constructed
+"Ss" and "Se" capabilities.
+
+Note: Sometimes it will appear that Nvim when run within tmux is not changing
+the cursor, but in fact it is tmux receiving instructions from Nvim to change
+the cursor and not knowing what to do in turn. tmux has to translate what it
+receives from Nvim into whatever control sequence is appropriate for the
+terminal that it is outputting to. It shares a common mechanism with Nvim, of
+using the "Ss" and "Se" capabilities from terminfo (for the output terminal)
+if they are present. Unlike Nvim, if they are not present in terminfo you
+must add them by setting "terminal-overrides" in ~/.tmux.conf .
+
+See the tmux(1) manual page for the details of how and what to do in the tmux
+configuration file. It will look something like: >
+ set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'
+<or (alas!) for Konsole specifically, something more complex like: >
+ set -ga terminal-overrides 'xterm*:\E]50;CursorShape=%?%p1%{3}%<%t%{0}%e%{1}%;%d\007'
<
*cs7-problem*
Note: If the terminal settings are changed after running Vim, you might have
@@ -69,20 +211,6 @@ them as a cursor key. When you type you normally are not that fast, so they
are recognized as individual typed commands, even though Vim receives the same
sequence of bytes.
- *xterm-8bit* *xterm-8-bit*
-Xterm can be run in a mode where it uses 8-bit escape sequences. The CSI code
-is used instead of <Esc>[. The advantage is that an <Esc> can quickly be
-recognized in Insert mode, because it can't be confused with the start of a
-special key.
-For the builtin termcap entries, Vim checks if the 'term' option contains
-"8bit" anywhere. It then uses 8-bit characters for the termcap entries, the
-mouse and a few other things. You would normally set $TERM in your shell to
-"xterm-8bit" and Vim picks this up and adjusts to the 8-bit setting
-automatically.
-When Vim receives a response to the "request version" sequence and it
-starts with CSI, it assumes that the terminal is in 8-bit mode and will
-convert all key sequences to their 8-bit variants.
-
==============================================================================
Window size *window-size*
@@ -93,53 +221,38 @@ On Unix systems, three methods are tried to get the window size:
- an ioctl call (TIOCGSIZE or TIOCGWINSZ, depends on your system)
- the environment variables "LINES" and "COLUMNS"
-- from the termcap entries "li" and "co"
+- from the |terminfo| entries "lines" and "columns"
If everything fails a default size of 24 lines and 80 columns is assumed. If
a window-resize signal is received the size will be set again. If the window
size is wrong you can use the 'lines' and 'columns' options to set the
-correct values.
-
-One command can be used to set the screen size:
-
- *:mod* *:mode*
-:mod[e]
-
-Detects the screen size and redraws the screen.
+correct values. See |:mode|.
==============================================================================
Slow and fast terminals *slow-fast-terminal*
*slow-terminal*
-If you have a fast terminal you may like to set the 'ruler' option. The
-cursor position is shown in the status line. If you are using horizontal
-scrolling ('wrap' option off) consider setting 'sidescroll' to a small
-number.
-
-If you have a slow terminal you may want to reset the 'showcmd' option.
-The command characters will not be shown in the status line. If the terminal
-scrolls very slowly, set the 'scrolljump' to 5 or so. If the cursor is moved
-off the screen (e.g., with "j") Vim will scroll 5 lines at a time. Another
-possibility is to reduce the number of lines that Vim uses with the command
-"z{height}<CR>".
+If you have a slow terminal you may want to reset the 'showcmd' and 'ruler'
+options. The command characters and cursor positions will not be shown in the
+status line (which involves a lot of cursor motions and attribute changes for
+every keypress or movement). If the terminal scrolls very slowly, set the
+'scrolljump' to 5 or so. If the cursor is moved off the screen (e.g., with
+"j") Vim will scroll 5 lines at a time. Another possibility is to reduce the
+number of lines that Vim uses with the command "z{height}<CR>".
If the characters from the terminal are arriving with more than 1 second
between them you might want to set the 'timeout' and/or 'ttimeout' option.
See the "Options" chapter |options|.
-If you are using a color terminal that is slow, use this command: >
+If you are using a color terminal that is slow when displaying lines beyond
+the end of a buffer, this is because Nvim is drawing the whitespace twice, in
+two sets of colours and attributes. To prevent this, use this command: >
hi NonText cterm=NONE ctermfg=NONE
-This avoids that spaces are sent when they have different attributes. On most
-terminals you can't see this anyway.
-
-If you are using Vim over a slow serial line, you might want to try running
-Vim inside the "screen" program. Screen will optimize the terminal I/O quite
-a bit.
-
-If you are testing termcap options, but you cannot see what is happening,
-you might want to set the 'writedelay' option. When non-zero, one character
-is sent to the terminal at a time (does not work for MS-DOS). This makes the
-screen updating a lot slower, making it possible to see what is happening.
+This draws the spaces with the default colours and attributes, which allows the
+second pass of drawing to be optimized away. Note: Although in theory the
+colours of whitespace are immaterial, in practice they change the colours of
+cursors and selections that cross them. This may have a visible, but minor,
+effect on some UIs.
==============================================================================
Using the mouse *mouse-using*
@@ -219,13 +332,12 @@ before using the mouse:
"g<RightMouse>" is "<C-RightMouse> ("CTRL-T")
*bracketed-paste-mode*
-Bracketed paste mode allows terminal emulators to distinguish between typed
-text and pasted text.
+Bracketed paste mode allows terminal applications to distinguish between typed
+text and pasted text. Thus you can paste text without Nvim trying to format or
+indent the text. See also https://cirw.in/blog/bracketed-paste
-For terminal emulators that support it, this mode is enabled by default. Thus
-you can paste text without Nvim giving any special meaning to it, e.g. it will
-not auto-indent the pasted text. See https://cirw.in/blog/bracketed-paste for
-technical details.
+Nvim enables bracketed paste by default. If it does not work in your terminal,
+try the 'paste' option instead.
*mouse-mode-table* *mouse-overview*
A short overview of what the mouse buttons do, when 'mousemodel' is "extend":
diff --git a/runtime/doc/tips.txt b/runtime/doc/tips.txt
index 9b34cd7599..011e0f0565 100644
--- a/runtime/doc/tips.txt
+++ b/runtime/doc/tips.txt
@@ -13,7 +13,7 @@ http://www.vim.org
Don't forget to browse the user manual, it also contains lots of useful tips
|usr_toc.txt|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
Editing C programs *C-editing*
@@ -113,7 +113,6 @@ screen, you can use CTRL-X CTRL-E and CTRL-X CTRL-Y to scroll the screen.
To make this easier, you could use these mappings: >
:inoremap <C-E> <C-X><C-E>
:inoremap <C-Y> <C-X><C-Y>
-(Type this literally, make sure the '<' flag is not in 'cpoptions').
You then lose the ability to copy text from the line above/below the cursor
|i_CTRL-E|.
@@ -129,8 +128,6 @@ If you like the scrolling to go a bit smoother, you can use these mappings: >
:map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
:map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>
-(Type this literally, make sure the '<' flag is not in 'cpoptions').
-
==============================================================================
Correcting common typing mistakes *type-mistakes*
@@ -282,9 +279,7 @@ For Emacs-style editing on the command-line: >
:cnoremap <Esc><C-B> <S-Left>
" forward one word
:cnoremap <Esc><C-F> <S-Right>
-
-NOTE: This requires that the '<' flag is excluded from 'cpoptions'. |<>|
-
+<
*format-bullet-list*
This mapping will format any bullet list. It requires that there is an empty
line above and below each list entry. The expression commands are used to
@@ -300,8 +295,7 @@ be able to give comments to the parts of the mapping. >
:execute m |" define the mapping
(<> notation |<>|. Note that this is all typed literally. ^W is "^" "W", not
-CTRL-W. You can copy/paste this into Vim if '<' is not included in
-'cpoptions'.)
+CTRL-W.)
Note that the last comment starts with |", because the ":execute" command
doesn't accept a comment directly.
diff --git a/runtime/doc/ui.txt b/runtime/doc/ui.txt
new file mode 100644
index 0000000000..6f6df2d7ae
--- /dev/null
+++ b/runtime/doc/ui.txt
@@ -0,0 +1,343 @@
+*ui.txt* Nvim
+
+
+ NVIM REFERENCE MANUAL
+
+
+Nvim UI protocol *ui*
+
+ Type |gO| to see the table of contents.
+
+==============================================================================
+UI Events *ui-events*
+
+GUIs can be implemented as external processes communicating with Nvim over the
+RPC API. The UI model consists of a terminal-like grid with a single,
+monospace font size. Some elements (UI "widgets") can be drawn separately from
+the grid ("externalized").
+
+ *ui-options*
+After connecting to Nvim (usually a spawned, embedded instance) use the
+|nvim_ui_attach| API method to tell Nvim that your program wants to draw the
+Nvim screen grid with a size of width × height cells. `options` must be
+a dictionary with these (optional) keys:
+ `rgb` Decides the color format.
+ Set true (default) for 24-bit RGB colors.
+ Set false for terminal colors (max of 256).
+ *ui-ext-options*
+ `ext_popupmenu` Externalize the popupmenu. |ui-popupmenu|
+ `ext_tabline` Externalize the tabline. |ui-tabline|
+ `ext_cmdline` Externalize the cmdline. |ui-cmdline|
+ `ext_wildmenu` Externalize the wildmenu. |ui-ext-wildmenu|
+
+Specifying a non-existent option is an error. To facilitate an ui that
+supports different versions of Nvim, the |api-metadata| key `ui_options`
+contains the list of supported options. Additionally Nvim currently requires
+that all connected UIs use the same set of widgets. Therefore the active
+widgets will be the intersection of the requested widget sets of all connected
+UIs. The "option_set" event will be used to specify which widgets actually are
+active.
+
+After attaching, Nvim will send msgpack-rpc notifications, with the method
+name "redraw" and a single argument, an array of screen update events. Update
+events are arrays whose first element is the event name and remaining elements
+are each tuples of event parameters. This allows multiple events of the same
+kind to be sent in a row without the event name being repeated. This batching
+is mostly used for "put", as each "put" event just puts contents in one screen
+cell, but clients must be prepared for multiple argument sets being batched
+for all event kinds.
+
+Events must be handled in order. The user should only see the updated screen
+state after all events in the same "redraw" batch are processed (not any
+intermediate state after processing only part of the array).
+
+Nvim sends |ui-global| and |ui-grid| events unconditionally; these suffice to
+implement a terminal-like interface.
+
+Nvim optionally sends screen elements "semantically" as structured events
+instead of raw grid-lines. Then the UI must decide how to present those
+elements itself; Nvim will not draw those elements on the grid. This is
+controlled by the |ui-ext-options|.
+
+Future versions of Nvim may add new update kinds and may append new parameters
+to existing update kinds. Clients must be prepared to ignore such extensions
+to be forward-compatible. |api-contract|
+
+==============================================================================
+Global Events *ui-global*
+
+["set_title", title]
+["set_icon", icon]
+ Set the window title, and icon (minimized) window title, respectively.
+ In windowing systems not distinguishing between the two, "set_icon"
+ can be ignored.
+
+["mode_info_set", cursor_style_enabled, mode_info]
+ `cursor_style_enabled` is a boolean indicating if the UI should set
+ the cursor style. `mode_info` is a list of mode property maps. The
+ current mode is given by the `mode_idx` field of the `mode_change`
+ event.
+
+ Each mode property map may contain these keys:
+
+ KEY DESCRIPTION ~
+ `cursor_shape`: "block", "horizontal", "vertical"
+ `cell_percentage`: Cell % occupied by the cursor.
+ `blinkwait`, `blinkon`, `blinkoff`: See |cursor-blinking|.
+ `hl_id`: Cursor highlight group.
+ `hl_lm`: Cursor highlight group if 'langmap' is active.
+ `short_name`: Mode code name, see 'guicursor'.
+ `name`: Mode descriptive name.
+ `mouse_shape`: (To be implemented.)
+
+ Some keys are missing in some modes.
+
+["option_set", name, value]
+ The value of ui related option `name` changed. The sent options are
+ listed below:
+
+ 'arabicshape'
+ 'ambiwith'
+ 'emoji'
+ 'guifont'
+ 'guifontset'
+ 'guifontwide'
+ 'linespace'
+ 'showtabline'
+ 'termguicolors'
+ `ext_*` (all |ui-ext-options|)
+
+ Options are not added to the list if their effects are already taken
+ care of. For instance, instead of forwarding the raw 'mouse' option
+ value, `mouse_on` and `mouse_off` directly indicate if mouse support
+ is active right now. Some options like 'ambiwith' have already taken
+ effect on the grid, where appropriate empty cells are added, however
+ an ui might still use these options when rendering raw text sent from
+ Nvim, like the text of the cmdline when |ui-ext-cmdline| is set.
+
+["mode_change", mode, mode_idx]
+ The mode changed. The first parameter `mode` is a string representing
+ the current mode. `mode_idx` is an index into the array received in
+ the `mode_info_set` event. UIs should change the cursor style
+ according to the properties specified in the corresponding item. The
+ set of modes reported will change in new versions of Nvim, for
+ instance more submodes and temporary states might be represented as
+ separate modes.
+
+["mouse_on"]
+["mouse_off"]
+ Tells the client whether mouse support, as determined by |'mouse'|
+ option, is considered to be active in the current mode. This is mostly
+ useful for a terminal frontend, or other situations where nvim mouse
+ would conflict with other usages of the mouse. It is safe for a client
+ to ignore this and always send mouse events.
+
+["busy_on"]
+["busy_off"]
+ Nvim started or stopped being busy, and possibly not responsive to
+ user input. This could be indicated to the user by hiding the cursor.
+
+["suspend"]
+ |:suspend| command or |Ctrl-Z| mapping is used. A terminal client (or other
+ client where it makes sense) could suspend itself. Other clients can
+ safely ignore it.
+
+["update_menu"]
+ The menu mappings changed.
+
+["bell"]
+["visual_bell"]
+ Notify the user with an audible or visual bell, respectively.
+
+==============================================================================
+Grid Events *ui-grid*
+
+["resize", width, height]
+ The grid is resized to `width` and `height` cells.
+
+["clear"]
+ Clear the grid.
+
+["eol_clear"]
+ Clear from the cursor position to the end of the current line.
+
+["cursor_goto", row, col]
+ Move the cursor to position (row, col). Currently, the same cursor is
+ used to define the position for text insertion and the visible cursor.
+ However, only the last cursor position, after processing the entire
+ array in the "redraw" event, is intended to be a visible cursor
+ position.
+
+["update_fg", color]
+["update_bg", color]
+["update_sp", color]
+ Set the default foreground, background and special colors
+ respectively.
+
+ *ui-event-highlight_set*
+["highlight_set", attrs]
+ Set the attributes that the next text put on the grid will have.
+ `attrs` is a dict with the keys below. Any absent key is reset
+ to its default value. Color defaults are set by the `update_fg` etc
+ updates. All boolean keys default to false.
+
+ `foreground`: foreground color.
+ `background`: backround color.
+ `special`: color to use for underline and undercurl, when present.
+ `reverse`: reverse video. Foreground and background colors are
+ switched.
+ `italic`: italic text.
+ `bold`: bold text.
+ `underline`: underlined text. The line has `special` color.
+ `undercurl`: undercurled text. The curl has `special` color.
+
+["put", text]
+ The (utf-8 encoded) string `text` is put at the cursor position
+ (and the cursor is advanced), with the highlights as set by the
+ last `highlight_set` update.
+
+["set_scroll_region", top, bot, left, right]
+ Define the scroll region used by `scroll` below.
+
+["scroll", count]
+ Scroll the text in the scroll region. The diagrams below illustrate
+ what will happen, depending on the scroll direction. "=" is used to
+ represent the SR(scroll region) boundaries and "-" the moved rectangles.
+ Note that dst and src share a common region.
+
+ If count is bigger than 0, move a rectangle in the SR up, this can
+ happen while scrolling down.
+>
+ +-------------------------+
+ | (clipped above SR) | ^
+ |=========================| dst_top |
+ | dst (still in SR) | |
+ +-------------------------+ src_top |
+ | src (moved up) and dst | |
+ |-------------------------| dst_bot |
+ | src (cleared) | |
+ +=========================+ src_bot
+<
+ If count is less than zero, move a rectangle in the SR down, this can
+ happen while scrolling up.
+>
+ +=========================+ src_top
+ | src (cleared) | |
+ |------------------------ | dst_top |
+ | src (moved down) and dst| |
+ +-------------------------+ src_bot |
+ | dst (still in SR) | |
+ |=========================| dst_bot |
+ | (clipped below SR) | v
+ +-------------------------+
+<
+==============================================================================
+Popupmenu Events *ui-popupmenu*
+
+Only sent if `ext_popupmenu` option is set in |ui-options|
+
+["popupmenu_show", items, selected, row, col]
+ Show |popupmenu-completion|. `items` is an array of completion items
+ to show; each item is an array of the form [word, kind, menu, info] as
+ defined at |complete-items|, except that `word` is replaced by `abbr`
+ if present. `selected` is the initially-selected item, a zero-based
+ index into the array of items (-1 if no item is selected). `row` and
+ `col` give the anchor position, where the first character of the
+ completed word will be.
+
+["popupmenu_select", selected]
+ Select an item in the current popupmenu. `selected` is a zero-based
+ index into the array of items from the last popupmenu_show event, or
+ -1 if no item is selected.
+
+["popupmenu_hide"]
+ Hide the popupmenu.
+
+==============================================================================
+Tabline Events *ui-tabline*
+
+Only sent if `ext_tabline` option is set in |ui-options|
+
+["tabline_update", curtab, tabs]
+ Tabline was updated. UIs should present this data in a custom tabline
+ widget.
+ curtab: Current Tabpage
+ tabs: List of Dicts [{ "tab": Tabpage, "name": String }, ...]
+
+==============================================================================
+Cmdline Events *ui-cmdline*
+
+Only sent if `ext_cmdline` option is set in |ui-options|
+
+["cmdline_show", content, pos, firstc, prompt, indent, level]
+ content: List of [attrs, string]
+ [[{}, "t"], [attrs, "est"], ...]
+
+ Triggered when the cmdline is displayed or changed.
+ The `content` is the full content that should be displayed in the
+ cmdline, and the `pos` is the position of the cursor that in the
+ cmdline. The content is divided into chunks with different highlight
+ attributes represented as a dict (see |ui-event-highlight_set|).
+
+ `firstc` and `prompt` are text, that if non-empty should be
+ displayed in front of the command line. `firstc` always indicates
+ built-in command lines such as `:` (ex command) and `/` `?` (search),
+ while `prompt` is an |input()| prompt. `indent` tells how many spaces
+ the content should be indented.
+
+ The Nvim command line can be invoked recursively, for instance by
+ typing `<c-r>=` at the command line prompt. The `level` field is used
+ to distinguish different command lines active at the same time. The
+ first invoked command line has level 1, the next recursively-invoked
+ prompt has level 2. A command line invoked from the |cmd-line-window|
+ has a higher level than than the edited command line.
+
+["cmdline_pos", pos, level]
+ Change the cursor position in the cmdline.
+
+["cmdline_special_char", c, shift, level]
+ Display a special char in the cmdline at the cursor position. This is
+ typically used to indicate a pending state, e.g. after |c_CTRL-V|. If
+ `shift` is true the text after the cursor should be shifted, otherwise
+ it should overwrite the char at the cursor.
+
+ Should be hidden at next cmdline_show.
+
+["cmdline_hide"]
+ Hide the cmdline.
+
+["cmdline_block_show", lines]
+ Show a block of context to the current command line. For example if
+ the user defines a |:function| interactively: >
+ :function Foo()
+ : echo "foo"
+ :
+<
+ `lines` is a list of lines of highlighted chunks, in the same form as
+ the "cmdline_show" `contents` parameter.
+
+["cmdline_block_append", line]
+ Append a line at the end of the currently shown block.
+
+["cmdline_block_hide"]
+ Hide the block.
+
+==============================================================================
+Wildmenu Events *ui-wildmenu*
+
+Only sent if `ext_wildmenu` option is set in |ui-options|
+
+["wildmenu_show", items]
+ Activate the wildmenu (command-line completion). `items` is an array
+ with the completion items.
+
+["wildmenu_select", selected]
+ Select an item in the current wildmenu. `selected` is a zero-based
+ index into the array of items from the last wildmenu_show event, or -1
+ if no item is selected.
+
+["wildmenu_hide"]
+ Hide the wildmenu.
+
+==============================================================================
+ vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/undo.txt b/runtime/doc/undo.txt
index cbce868cec..f8f6049119 100644
--- a/runtime/doc/undo.txt
+++ b/runtime/doc/undo.txt
@@ -8,7 +8,7 @@ Undo and redo *undo-redo*
The basics are explained in section |02.5| of the user manual.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Undo and redo commands *undo-commands*
diff --git a/runtime/doc/usr_02.txt b/runtime/doc/usr_02.txt
index b738cdc48b..a1e3d606ec 100644
--- a/runtime/doc/usr_02.txt
+++ b/runtime/doc/usr_02.txt
@@ -543,7 +543,7 @@ Summary: *help-summary* >
8) Ex-commands always start with ":", so to go to the :s command help: >
:help :s
-9) Commands specifically for debugging start with ">". To go to to the help
+9) Commands specifically for debugging start with ">". To go to the help
for the "cont" debug command: >
:help >cont
@@ -652,7 +652,7 @@ Summary: *help-summary* >
22) Autocommand events can be found by their name: >
:help BufWinLeave
< To see all possible events: >
- :help autocommands-events
+ :help autocommand-events
23) Command-line switches always start with "-". So for the help of the -f
command switch of Vim use: >
diff --git a/runtime/doc/usr_03.txt b/runtime/doc/usr_03.txt
index 5a7f0cb0e5..989914687f 100644
--- a/runtime/doc/usr_03.txt
+++ b/runtime/doc/usr_03.txt
@@ -353,7 +353,7 @@ The "?" command works like "/" but searches backwards: >
?word
The "N" command repeats the last search the opposite direction. Thus using
-"N" after a "/" command search backwards, using "N" after "?" searches
+"N" after a "/" command searches backwards, using "N" after "?" searches
forward.
@@ -508,7 +508,7 @@ only if it is at the beginning of a line.
The $ character matches the end of a line. Therefore, "was$" matches the
word was only if it is at the end of a line.
-Let's mark the places where "the" matches in this example line with "x"s:
+Let's mark the places where "/the" matches in this example line with "x"s:
the solder holding one of the chips melted and the ~
xxx xxx xxx
diff --git a/runtime/doc/usr_07.txt b/runtime/doc/usr_07.txt
index 3fc600d977..683c9879a7 100644
--- a/runtime/doc/usr_07.txt
+++ b/runtime/doc/usr_07.txt
@@ -221,7 +221,7 @@ and write the file with ":w". You edit several other files, and then use
":edit one.txt" to come back to "one.txt". If you now use `" Vim jumps to the
last line of the file. Using `. takes you to the position where you deleted
the character. Even when you move around in the file `" and `. will take you
-to the remembered position, at least until you make another change or leave
+to the remembered position. At least until you make another change or leave
the file.
@@ -233,8 +233,8 @@ another file and place marks there, these are specific for that file. Thus
each file has its own set of marks, they are local to the file.
So far we were using marks with a lowercase letter. There are also marks
with an uppercase letter. These are global, they can be used from any file.
-For example suppose that we are editing the file "foo.txt". Go to halfway of
-the file ("50%") and place the F mark there (F for foo): >
+For example suppose that we are editing the file "foo.txt". Go to halfway
+down the file ("50%") and place the F mark there (F for foo): >
50%mF
@@ -355,7 +355,7 @@ a sentence to the f register (f for First): >
"fyas
The "yas" command yanks a sentence like before. It's the "f that tells Vim
-the text should be place in the f register. This must come just before the
+the text should be placed in the f register. This must come just before the
yank command.
Now yank three whole lines to the l register (l for line): >
diff --git a/runtime/doc/usr_08.txt b/runtime/doc/usr_08.txt
index 575921fc4f..ef91bf9c0a 100644
--- a/runtime/doc/usr_08.txt
+++ b/runtime/doc/usr_08.txt
@@ -45,7 +45,7 @@ top one:
+----------------------------------+
What you see here is two windows on the same file. The line with "====" is
-that status line. It displays information about the window above it. (In
+the status line. It displays information about the window above it. (In
practice the status line will be in reverse video.)
The two windows allow you to view two parts of the same file. For example,
you could make the top window show the variable declarations of a program, and
diff --git a/runtime/doc/usr_09.txt b/runtime/doc/usr_09.txt
index 1ff3d93329..f53076a2ec 100644
--- a/runtime/doc/usr_09.txt
+++ b/runtime/doc/usr_09.txt
@@ -21,7 +21,7 @@ Table of contents: |usr_toc.txt|
==============================================================================
*09.1* Parts of the GUI
-You might have an icon on your desktop that starts gVim. Otherwise, one of
+You might have an icon on your desktop that starts gvim. Otherwise, one of
these commands should do it: >
gvim file.txt
@@ -60,7 +60,7 @@ THE WINDOW TITLE
At the very top is the window title. This is drawn by your window system.
Vim will set the title to show the name of the current file. First comes the
name of the file. Then some special characters and the directory of the file
-in parens. These special character can be present:
+in parens. These special characters can be present:
- The file cannot be modified (e.g., a help file)
+ The file contains changes
@@ -180,14 +180,14 @@ currently highlighted. In Vim this is the Visual area (this assumes you are
using the default option settings). You can paste this selection in another
application without any further action.
For example, in this text select a few words with the mouse. Vim will
-switch to Visual mode and highlight the text. Now start another gVim, without
+switch to Visual mode and highlight the text. Now start another gvim, without
a file name argument, so that it displays an empty window. Click the middle
mouse button. The selected text will be inserted.
The "current selection" will only remain valid until some other text is
-selected. After doing the paste in the other gVim, now select some characters
+selected. After doing the paste in the other gvim, now select some characters
in that window. You will notice that the words that were previously selected
-in the other gVim window are displayed differently. This means that it no
+in the other gvim window are displayed differently. This means that it no
longer is the current selection.
You don't need to select text with the mouse, using the keyboard commands for
@@ -200,10 +200,10 @@ Now for the other place with which text can be exchanged. We call this the
"real clipboard", to avoid confusion. Often both the "current selection" and
the "real clipboard" are called clipboard, you'll have to get used to that.
To put text on the real clipboard, select a few different words in one of
-the gVims you have running. Then use the Edit/Copy menu entry. Now the text
+the gvims you have running. Then use the Edit/Copy menu entry. Now the text
has been copied to the real clipboard. You can't see this, unless you have
-some application that shows the clipboard contents (e.g., KDE's klipper).
- Now select the other gVim, position the cursor somewhere and use the
+some application that shows the clipboard contents (e.g., KDE's Klipper).
+ Now select the other gvim, position the cursor somewhere and use the
Edit/Paste menu. You will see the text from the real clipboard is inserted.
@@ -211,7 +211,7 @@ USING BOTH
This use of both the "current selection" and the "real clipboard" might sound
a bit confusing. But it is very useful. Let's show this with an example.
-Use one gVim with a text file and perform these actions:
+Use one gvim with a text file and perform these actions:
- Select two words in Visual mode.
- Use the Edit/Copy menu to get these words onto the clipboard.
diff --git a/runtime/doc/usr_12.txt b/runtime/doc/usr_12.txt
index 9078f4748a..e87ed81c97 100644
--- a/runtime/doc/usr_12.txt
+++ b/runtime/doc/usr_12.txt
@@ -278,7 +278,7 @@ command: >
The line range "%" is used, thus this works on the whole file. The pattern
that the ":substitute" command matches with is "\s\+$". This finds white
space characters (\s), 1 or more of them (\+), before the end-of-line ($).
-Later will be explained how you write patterns like this |usr_27.txt|.
+Later will be explained how you write patterns like this, see |usr_27.txt|.
The "to" part of the substitute command is empty: "//". Thus it replaces
with nothing, effectively deleting the matched white space.
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index acb6fd0fa4..51d8143440 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -95,7 +95,7 @@ Then there is the ":let i += 1" command. This does the same thing as
to the same variable.
The example was given to explain the commands, but would you really want to
-make such a loop it can be written much more compact: >
+make such a loop, it can be written much more compact: >
:for i in range(1, 4)
: echo "count is" i
@@ -692,6 +692,7 @@ Other computation: *bitwise-function*
Variables: *var-functions*
type() type of a variable
islocked() check if a variable is locked
+ funcref() get a Funcref for a function reference
function() get a Funcref for a function name
getbufvar() get a variable value from a specific buffer
setbufvar() set a variable in a specific buffer
@@ -883,9 +884,11 @@ GUI: *gui-functions*
getfontname() get name of current font being used
getwinposx() X position of the GUI Vim window
getwinposy() Y position of the GUI Vim window
+ balloon_show() set the balloon content
Vim server: *server-functions*
serverlist() return the list of server names
+ remote_startserver() run a server
remote_send() send command characters to a Vim server
remote_expr() evaluate an expression in a Vim server
server2client() send a reply to a client of a Vim server
@@ -1541,7 +1544,7 @@ WHITE SPACE
Blank lines are allowed and ignored.
Leading whitespace characters (blanks and TABs) are always ignored. The
-whitespaces between parameters (e.g. between the 'set' and the 'cpoptions' in
+whitespaces between parameters (e.g. between the "set" and the "cpoptions" in
the example below) are reduced to one blank character and plays the role of a
separator, the whitespaces after the last (visible) character may or may not
be ignored depending on the situation, see below.
@@ -2224,8 +2227,8 @@ plugin for the mail filetype: >
endif
Two global variables are used:
-no_plugin_maps disables mappings for all filetype plugins
-no_mail_maps disables mappings for a specific filetype
+|no_plugin_maps| disables mappings for all filetype plugins
+|no_mail_maps| disables mappings for the "mail" filetype
USER COMMANDS
diff --git a/runtime/doc/usr_44.txt b/runtime/doc/usr_44.txt
index fcd6b71219..b06557b950 100644
--- a/runtime/doc/usr_44.txt
+++ b/runtime/doc/usr_44.txt
@@ -686,7 +686,7 @@ that included files do this too, you might have to reset "b:current_syntax" if
you include two files.
If you want your syntax file to work with Vim 5.x, add a check for v:version.
-See yacc.vim for an example.
+Find an syntax file in the Vim 7.2 distribution for an example.
Do not include anything that is a user preference. Don't set 'tabstop',
'expandtab', etc. These belong in a filetype plugin.
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index 8880b625e9..9232cd70c5 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -6,7 +6,7 @@
Various commands *various*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Various commands *various-cmds*
@@ -102,8 +102,7 @@ g8 Print the hex values of the bytes used in the
*:nu* *:number*
:[range]nu[mber] [count] [flags]
Same as :print, but precede each line with its line
- number. (See also 'highlight' and 'numberwidth'
- option).
+ number. (See also |hl-LineNr| and 'numberwidth').
See |ex-flags| for [flags].
*:#*
@@ -208,22 +207,18 @@ g8 Print the hex values of the bytes used in the
:sh[ell] Removed. |vim-differences| {Nvim}
*:terminal* *:te*
-:te[rminal][!] [{cmd}] Execute {cmd} with 'shell' in a new |terminal| buffer.
- Equivalent to: >
- :enew
- :call termopen('{cmd}')
- :startinsert
-<
- See |termopen()|.
+:te[rminal][!] [{cmd}] Execute {cmd} with 'shell' in a new |terminal-emulator|
+ buffer. Without {cmd}, start an interactive 'shell'.
- Without {cmd}, start an interactive shell.
+ Type |i| to enter |Terminal-mode|, then keys are sent to
+ the job running in the terminal. Type <C-\><C-N> to
+ leave Terminal-mode. |CTRL-\_CTRL-N|
- Creating the terminal buffer fails when changes have been
- made to the current buffer, unless 'hidden' is set.
+ Fails if changes have been made to the current buffer,
+ unless 'hidden' is set.
To enter |Terminal-mode| automatically: >
- autocmd BufEnter term://* startinsert
- autocmd BufLeave term://* stopinsert
+ autocmd TermOpen * startinsert
<
*:!cmd* *:!* *E34*
:!{cmd} Execute {cmd} with 'shell'. See also |:terminal|.
@@ -276,6 +271,21 @@ g8 Print the hex values of the bytes used in the
< The screen is not redrawn then, thus you have to use
CTRL-L or ":redraw!" if the command did display
something.
+ *:!start*
+:!start {cmd} (Windows only). Special-case of |:!| which works
+ asynchronously, for running a program that does not
+ affect the files you are editing.
+ Optional arguments (can only use one at a time):
+ /min window will be minimized
+ /b no console window will be opened
+ Note: If the process requires input, /b will get an
+ EOF error because its input stream (stdin) would be
+ redirected to \\.\NUL (stdout and stderr too).
+
+ Programs begun with :!start do not get passed Vim's
+ open file handles, which means they do not have to be
+ closed before Vim. To avoid this special treatment,
+ use ":! start".
*:!!*
:!! Repeat last ":!{cmd}".
@@ -311,7 +321,7 @@ N *+cindent* |'cindent'|, C indenting
N *+clientserver* Unix and Win32: Remote invocation |clientserver|
*+clipboard* |clipboard| support
N *+cmdline_compl* command line completion |cmdline-completion|
-N *+cmdline_hist* command line history |cmdline-history|
+S *+cmdline_hist* command line history |cmdline-history|
N *+cmdline_info* |'showcmd'| and |'ruler'|
N *+comments* |'comments'| support
B *+conceal* "conceal" support, see |conceal| |:syn-conceal| etc.
@@ -334,7 +344,7 @@ N *+gettext* message translations |multi-lang|
*+iconv* Compiled with the |iconv()| function
*+iconv/dyn* Likewise |iconv-dynamic| |/dyn|
N *+insert_expand* |insert_expand| Insert mode completion
-N *+jumplist* |jumplist|
+S *+jumplist* |jumplist|
B *+keymap* |'keymap'|
N *+lambda* |lambda| and |closure|
B *+langmap* |'langmap'|
@@ -383,14 +393,14 @@ N *+timers* the |timer_start()| function
N *+title* Setting the window 'title' and 'icon'
N *+toolbar* |gui-toolbar|
N *+user_commands* User-defined commands. |user-commands|
-N *+vertsplit* Vertically split windows |:vsplit|
+ *+vertsplit* Vertically split windows |:vsplit|
N *+virtualedit* |'virtualedit'|
S *+visual* Visual mode |Visual-mode| Always enabled since 7.4.200.
N *+visualextra* extra Visual mode commands |blockwise-operators|
N *+vreplace* |gR| and |gr|
N *+wildignore* |'wildignore'|
N *+wildmenu* |'wildmenu'|
-S *+windows* more than one window
+ *+windows* more than one window
m *+writebackup* |'writebackup'| is default on
m *+xim* X input method |xim|
*+xfontset* X fontset support |xfontset|
@@ -594,6 +604,13 @@ which it was defined is reported.
the keyword. Only works when the highlighted text is
not more than one line.
+ *gO*
+gO Show a filetype-specific, navigable "outline" of the
+ current buffer. For example, in a |help| buffer this
+ shows the table of contents.
+
+ Currently works in |help| and |:Man| buffers.
+
[N]gs *gs* *:sl* *:sleep*
:[N]sl[eep] [N] [m] Do nothing for [N] seconds. When [m] is included,
sleep for [N] milliseconds. The count for "gs" always
@@ -632,4 +649,4 @@ LessInitFunc in your vimrc, for example: >
endfunc
<
- vim:tw=78:ts=8:ft=help:norl:
+ vim:noet:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/vi_diff.txt b/runtime/doc/vi_diff.txt
index b8bfcaa586..917e0e6f80 100644
--- a/runtime/doc/vi_diff.txt
+++ b/runtime/doc/vi_diff.txt
@@ -6,7 +6,7 @@
Differences between Vim and Vi *vi-differences*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Limits *limits*
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 24410ddaac..3924dd4ebe 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -6,11 +6,10 @@
Differences between Nvim and Vim *vim-differences*
-Throughout the help files, differences between Nvim and Vim are indicated via
-the "{Nvim}" tag. This document is a complete and centralized list of all
-these differences.
+Nvim differs from Vim in many ways, big and small. This document is
+a complete and centralized reference of those differences.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Configuration *nvim-configuration*
@@ -33,8 +32,10 @@ these differences.
- 'backupdir' defaults to .,~/.local/share/nvim/backup (|xdg|)
- 'belloff' defaults to "all"
- 'complete' doesn't include "i"
+- 'cscopeverbose' is enabled
- 'directory' defaults to ~/.local/share/nvim/swap// (|xdg|), auto-created
- 'display' defaults to "lastline"
+- 'fillchars' defaults (in effect) to "vert:│,fold:·"
- 'formatoptions' defaults to "tcqj"
- 'history' defaults to 10000 (the maximum)
- 'hlsearch' is set by default
@@ -48,6 +49,7 @@ these differences.
- 'ruler' is set by default
- 'sessionoptions' doesn't include "options"
- 'showcmd' is set by default
+- 'sidescroll' defaults to 1
- 'smarttab' is set by default
- 'tabpagemax' defaults to 50
- 'tags' defaults to "./tags;,tags"
@@ -61,26 +63,46 @@ these differences.
MAJOR COMPONENTS ~
-Embedded terminal emulator |terminal-emulator|
-RPC API |RPC|
-Shared data |shada|
-XDG base directories |xdg|
+API |API|
+Lua scripting |lua|
Job control |job-control|
Remote plugins |remote-plugin|
-Python plugins |provider-python|
-Clipboard integration |provider-clipboard|
+Providers
+ Clipboard |provider-clipboard|
+ Python plugins |provider-python|
+ Ruby plugins |provider-ruby|
+Shared data |shada|
+Embedded terminal |terminal|
+VimL parser |nvim_parse_expression()|
+XDG base directories |xdg|
USER EXPERIENCE ~
-Working intuitively and consistently is a major goal of Nvim. Examples:
+Working intuitively and consistently is a major goal of Nvim.
+
+ *feature-compile*
+- Nvim always includes ALL features, in contrast to Vim (which ships with
+ various combinations of 100+ optional features). Think of it as a leaner
+ version of Vim's "HUGE" build. This reduces surface area for bugs, and
+ removes a common source of confusion and friction for users.
-- Nvim does not have `-X`, a platform-specific option "sometimes" available in
- Vim (with potential surprises: http://stackoverflow.com/q/14635295). Nvim
- avoids features that cannot be provided on all platforms--instead that is
- delegated to external plugins/extensions.
+- Nvim avoids features that cannot be provided on all platforms; instead that
+ is delegated to external plugins/extensions. E.g. the `-X` platform-specific
+ option is "sometimes" available in Vim (with potential surprises:
+ http://stackoverflow.com/q/14635295).
-- Test-only globals and functions such as test_autochdir(), test_settime(),
- etc., are not exposed (because they don't exist).
+- Vim's internal test functions (test_autochdir(), test_settime(), etc.) are
+ not exposed (nor implemented); instead Nvim has a robust API.
+
+- Behaviors, options, documentation are removed if they cost users more time
+ than they save.
+
+Usability details have been improved where the benefit outweighs any
+backwards-compatibility cost. Some examples:
+
+- |K| in help documents can be used like |CTRL-]|.
+- Directories for 'directory' and 'undodir' are auto-created.
+- Terminal features such as 'guicursor' are enabled where possible.
ARCHITECTURE ~
@@ -89,10 +111,13 @@ stability and allows those plugins to work without blocking the editor. Even
"legacy" Python and Ruby plugins which use the old Vim interfaces (|if_py| and
|if_ruby|) run out-of-process.
+Platform and I/O facilities are built upon libuv. Nvim benefits from libuv
+features and bug fixes, and other projects benefit from improvements to libuv
+by Nvim developers.
FEATURES ~
-"Outline": Type <M-]> in |:Man| and |:help| pages to see a document outline.
+"Outline": Type |gO| in |:Man| and |:help| pages to see a document outline.
|META| (ALT) chords are recognized, even in the terminal. Any |<M-| mapping
will work. Some examples: <M-1>, <M-2>, <M-BS>, <M-Del>, <M-Ins>, <M-/>,
@@ -119,14 +144,15 @@ Variables:
|v:windowid| is always available (for use by external UIs)
Commands:
- |:CheckHealth|
+ |:checkhealth|
|:drop| is available on all platforms
|:Man| is available by default, with many improvements such as completion
+ |:tchdir| tab-local |current-directory|
Functions:
|dictwatcheradd()| notifies a callback whenever a |Dict| is modified
|dictwatcherdel()|
- |execute()| works with |:redir|
+ |menu_get()|
|msgpackdump()|, |msgpackparse()| provide msgpack de/serialization
Events:
@@ -137,11 +163,23 @@ Events:
|TextYankPost|
Highlight groups:
+ |hl-NormalNC| highlights non-current windows
|hl-QuickFixLine|
|hl-Substitute|
|hl-TermCursor|
|hl-TermCursorNC|
|hl-Whitespace| highlights 'listchars' whitespace
+ |expr-highlight| highlight groups (prefixed with "Nvim")
+
+Command-line highlighting:
+ The expression prompt (|@=|, |c_CTRL-R_=|, |i_CTRL-R_=|) is highlighted
+ using a built-in VimL expression parser. |expr-highlight|
+ *E5408* *E5409*
+ |input()|, |inputdialog()| support custom highlighting. |input()-highlight|
+ *g:Nvim_color_cmdline*
+ (Experimental) Command-line (|:|) is colored by callback defined in
+ `g:Nvim_color_cmdline` (this callback is for testing only, and will be
+ removed in the future).
==============================================================================
4. Changed features *nvim-features-changed*
@@ -156,11 +194,22 @@ are always available and may be used simultaneously in separate plugins. The
`neovim` pip package must be installed to use Python plugins in Nvim (see
|provider-python|).
+Because of general |256-color| usage whereever possible, Nvim will even use
+256-colour capability on Linux virtual terminals. Vim uses only 8 colours
+plus bright foreground on Linux VTs.
+
+Vim combines what is in its |builtin-terms| with what it reads from termcap,
+and has a |ttybuiltin| setting to control how that combination works. Nvim
+uses either one or the other of an external |terminfo| entry or the built-in
+one. It does not attempt to mix data from the two.
+
|:!| does not support "interactive" commands. Use |:terminal| instead.
(GUI Vim has a similar limitation, see ":help gui-pty" in Vim.)
|system()| does not support writing/reading "backgrounded" commands. |E5677|
+|:redir| nested in |execute()| works.
+
Nvim may throttle (skip) messages from shell commands (|:!|, |:grep|, |:make|)
if there is too much output. No data is lost, this only affects display and
makes things faster. |:terminal| output is never throttled.
@@ -246,19 +295,27 @@ Lua interface (|if_lua.txt|):
- Lua has direct access to Nvim |API| via `vim.api`.
- Lua package.path and package.cpath are automatically updated according to
'runtimepath': |lua-require|.
-- Currently, most legacy Vim features are missing.
-|input()| and |inputdialog()| gained support for each other’s features (return
-on cancel and completion respectively) via dictionary argument (replaces all
+|input()| and |inputdialog()| support for each other’s features (return on
+cancel and completion respectively) via dictionary argument (replaces all
other arguments if used).
+|input()| and |inputdialog()| support user-defined cmdline highlighting.
+
+Highlight groups:
+ |hl-ColorColumn|, |hl-CursorColumn| are lower priority than most other
+ groups
+
+VimL (Vim script) compatibility:
+ `count` does not alias to |v:count|
+
==============================================================================
5. Missing legacy features *nvim-features-missing*
Some legacy Vim features are not implemented:
- |if_py|: vim.bindeval() and vim.Function() are not supported
-- |if_lua|: the `vim` object currently only supports `vim.api`
+- |if_lua|: the `vim` object is missing most legacy methods
- *if_perl*
- *if_mzscheme*
- *if_tcl*
@@ -266,7 +323,7 @@ Some legacy Vim features are not implemented:
==============================================================================
6. Removed features *nvim-features-removed*
-These features are in Vim, but have been intentionally removed from Nvim.
+These Vim features were intentionally removed from Nvim.
*'cp'* *'nocompatible'* *'nocp'* *'compatible'*
Nvim is always "non-compatible" with Vi.
@@ -278,11 +335,33 @@ Ed-compatible mode:
":set noedcompatible" is ignored
":set edcompatible" is an error
- *t_xx* *:set-termcap* *termcap-options* *t_AB* *t_Sb* *t_vb* *t_SI*
+ *t_xx* *termcap-options* *t_AB* *t_Sb* *t_vb* *t_SI*
Nvim does not have special `t_XX` options nor <t_XX> keycodes to configure
terminal capabilities. Instead Nvim treats the terminal as any other UI. For
example, 'guicursor' sets the terminal cursor style if possible.
+ *:set-termcap*
+Start Nvim with 'verbose' level 3 to see the terminal capabilities. >
+ nvim -V3
+<
+ *'term'* *E529* *E530* *E531*
+'term' reflects the terminal type derived from |$TERM| and other environment
+checks. For debugging only; not reliable during startup. >
+ :echo &term
+"builtin_x" means one of the |builtin-terms| was chosen, because the expected
+terminfo file was not found on the system.
+
+ *termcap*
+Nvim never uses the termcap database, only |terminfo| and |builtin-terms|.
+
+ *xterm-8bit* *xterm-8-bit*
+Xterm can be run in a mode where it uses true 8-bit CSI. Supporting this
+requires autodetection of whether the terminal is in UTF-8 mode or non-UTF-8
+mode, as the 8-bit CSI character has to be written differently in each case.
+Vim issues a "request version" sequence to the terminal at startup and looks
+at how the terminal is sending CSI. Nvim does not issue such a sequence and
+always uses 7-bit control sequences.
+
'ttyfast':
":set ttyfast" is ignored
":set nottyfast" is an error
@@ -298,7 +377,6 @@ MS-DOS support:
Test functions:
test_alloc_fail()
test_autochdir()
- test_disable_char_avail()
test_garbagecollect_now()
test_null_channel()
test_null_dict()
@@ -306,16 +384,17 @@ Test functions:
test_null_list()
test_null_partial()
test_null_string()
+ test_override()
test_settime()
Other options:
'antialias'
- 'cpoptions' ("g", "w", "H", "*", "-", "j", and all POSIX flags were removed)
+ 'cpoptions' (g j k H w < * - and all POSIX flags were removed)
'encoding' ("utf-8" is always used)
'esckeys'
'guioptions' "t" flag was removed
*'guipty'* (Nvim uses pipes and PTYs consistently on all platforms.)
- 'highlight' (the builtin |highlight-groups| cannot be changed)
+ 'highlight' (Names of builtin |highlight-groups| cannot be changed.)
*'imactivatefunc'* *'imaf'*
*'imactivatekey'* *'imak'*
*'imstatusfunc'* *'imsf'*
@@ -324,7 +403,6 @@ Other options:
'shelltype'
*'shortname'* *'sn'* *'noshortname'* *'nosn'*
*'swapsync'* *'sws'*
- *'term'* *E529* *E530* *E531*
*'termencoding'* *'tenc'* (Vim 7.4.852 also removed this for Windows)
'textauto'
'textmode'
diff --git a/runtime/doc/visual.txt b/runtime/doc/visual.txt
index e9f5bf91f8..176ce562d8 100644
--- a/runtime/doc/visual.txt
+++ b/runtime/doc/visual.txt
@@ -11,7 +11,7 @@ operator. It is the only way to select a block of text.
This is introduced in section |04.4| of the user manual.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Using Visual mode *visual-use*
@@ -25,8 +25,7 @@ Using Visual mode consists of three parts:
3. Type an operator command.
The highlighted characters will be operated upon.
-The 'highlight' option can be used to set the display mode to use for
-highlighting in Visual mode.
+The |hl-Visual| group determines the highlighting of the visual selection.
The 'virtualedit' option can be used to allow positioning the cursor to
positions where there is no actual character.
@@ -271,7 +270,7 @@ mode. For example, if you would like the "/" command not to extend the Visual
area, but instead take the highlighted text and search for that: >
:vmap / y/<C-R>"<CR>
(In the <> notation |<>|, when typing it you should type it literally; you
-need to remove the 'B' and '<' flags from 'cpoptions'.)
+need to remove the 'B' flag from 'cpoptions'.)
If you want to give a register name using the """ command, do this just before
typing the operator character: "v{move-around}"xd".
@@ -375,7 +374,7 @@ Here is an example, to replace the selected text with the output of "date": >
:vmap _a <Esc>`>a<CR><Esc>`<i<CR><Esc>!!date<CR>kJJ
(In the <> notation |<>|, when typing it you should type it literally; you
-need to remove the 'B' and '<' flags from 'cpoptions')
+need to remove the 'B' flag from 'cpoptions')
What this does is:
<Esc> stop Visual mode
@@ -392,7 +391,7 @@ selected text: >
:vmap X y/<C-R>"<CR>
(In the <> notation |<>|, when typing it you should type it literally; you
-need to remove the 'B' and '<' flags from 'cpoptions')
+need to remove the 'B' flag from 'cpoptions')
Note that special characters (like '.' and '*') will cause problems.
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index 1941ac0972..e83377471c 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -13,7 +13,7 @@ differently when used in combination with more than one window.
The basics are explained in chapter 7 and 8 of the user manual |usr_07.txt|
|usr_08.txt|.
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *windows-intro* *window*
@@ -106,18 +106,10 @@ This option can be local to the window, so that you can have a different
status line in each window.
Normally, inversion is used to display the status line. This can be changed
-with the 's' character in the 'highlight' option. For example, "sb" sets it to
-bold characters. If no highlighting is used for the status line ("sn"), the
-'^' character is used for the current window, and '=' for other windows. If
-the mouse is supported and enabled with the 'mouse' option, a status line can
-be dragged to resize windows.
-
-Note: If you expect your status line to be in reverse video and it isn't,
-check if the 'highlight' option contains "si". In version 3.0, this meant to
-invert the status line. Now it should be "sr", reverse the status line, as
-"si" now stands for italic! If italic is not available on your terminal, the
-status line is inverted anyway; you will only see this problem on terminals
-that have termcap codes for italics.
+with the |hl-StatusLine| highlight group. If no highlighting is used for the
+status line, the '^' character is used for the current window, and '=' for
+other windows. If 'mouse' is enabled, a status line can be dragged to resize
+windows.
==============================================================================
3. Opening and closing a window *opening-window* *E36*
@@ -319,8 +311,9 @@ CTRL-W CTRL-C *CTRL-W_CTRL-C*
*:hide*
:hid[e]
:{count}hid[e]
- Quit the current window, unless it is the last window on the
- screen. For {count} see |:quit|.
+ Without {count}: Quit the current window, unless it is the
+ last window on the screen.
+ If {count} is given quit the {count} window.
The buffer becomes hidden (unless there is another window
editing it or 'bufhidden' is `unload`, `delete` or `wipe`).
@@ -523,6 +516,9 @@ CTRL-W > Increase current window width by N (default 1).
:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
CTRL-W | Set current window width to N (default: widest possible).
+ *:mod* *:mode*
+:mod[e] Detects the screen size and redraws the screen.
+
You can also resize a window by dragging a status line up or down with the
mouse. Or by dragging a vertical separator line left or right. This only
works if the version of Vim that is being used supports the mouse and the
@@ -591,7 +587,8 @@ The minimal height and width of a window is set with 'winminheight' and
41. :buffers list of buffers
The meaning of [N] depends on the command:
- [N] is number of buffers to go forward/backward on ?2, ?3, and ?4
+ [N] is the number of buffers to go forward/backward on 2/12/22/32,
+ 3/13/23/33, and 4/14/24/34
[N] is an argument number, defaulting to current argument, for 1 and 21
[N] is a buffer number, defaulting to current buffer, for 11 and 31
[N] is a count for 19 and 39
@@ -674,6 +671,8 @@ can also get to them with the buffer list commands, like ":bnext".
- If the file is not open in a window edit the file in the
current window. If the current buffer can't be |abandon|ed,
the window is split first.
+ - Windows that are not in the argument list or are not full
+ width will be closed if possible.
The |argument-list| is set, like with the |:next| command.
The purpose of this command is that it can be used from a
program that wants Vim to edit another file, e.g., a debugger.
@@ -997,6 +996,9 @@ list of buffers. |unlisted-buffer|
displayed in a window |hidden-buffer|
- a buffer with 'modifiable' off
= a readonly buffer
+ R a terminal buffer with a running job
+ F a terminal buffer with a finished job
+ ? a terminal buffer without a job: `:terminal NONE`
+ a modified buffer
x a buffer with read errors
@@ -1241,6 +1243,9 @@ help Contains a help file. Will only be created with the |:help|
and can't be changed. The 'buflisted' option will be reset
for a help buffer.
+terminal A terminal window buffer, see |terminal|. The contents cannot
+ be read or changed until the job ends.
+
directory Displays directory contents. Can be used by a file explorer
plugin. The buffer is created with these settings: >
:setlocal buftype=nowrite