Vvars
Nvim :help
pages, generated
from source
using the tree-sitter-vimdoc parser.
Predefined variables
Some variables can be set by the user, but the type cannot be changed.
v:argv argv-variable
v:argv
The command line arguments Vim was invoked with. This is a
list of strings. The first item is the Vim command.
See
v:progpath for the command with full path.
v:cmdarg cmdarg-variable
v:cmdarg
The extra arguments ("++p", "++enc=", "++ff=") given to a file
read/write command. This is set before an autocommand event
for a file read/write command is triggered. There is a
leading space to make it possible to append this variable
directly after the read/write command.
Note: "+cmd" isn't
included here, because it will be executed anyway.
v:cmdbang cmdbang-variable
v:cmdbang
Set like v:cmdarg for a file read/write command. When a "!"
was used the value is 1, otherwise it is 0. Note that this
can only be used in autocommands. For user commands
<bang>
can be used.
v:collate collate-variable
v:collate
The current locale setting for collation order of the runtime
environment. This allows Vim scripts to be aware of the
current locale encoding. Technical: it's the value of
LC_COLLATE. When not using a locale the value is "C".
This variable can not be set directly, use the
:language
command.
See
multi-lang.
v:count count-variable
v:count
The count given for the last Normal mode command. Can be used
to get the count before a mapping. Read-only. Example:
:map _x :<C-U>echo "the count is " .. v:count<CR>
Note: The
<C-U>
is required to remove the line range that you
get when typing ':' after a count.
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.
v:ctype ctype-variable
v:ctype
The current locale setting for characters of the runtime
environment. This allows Vim scripts to be aware of the
current locale encoding. Technical: it's the value of
LC_CTYPE. When not using a locale the value is "C".
This variable can not be set directly, use the
:language
command.
See
multi-lang.
v:dying dying-variable
v:dying
Normally zero. When a deadly signal is caught it's set to
one. When multiple signals are caught the number increases.
Can be used in an autocommand to check if Vim didn't
terminate normally.
Example:
:au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif
Note: if another deadly signal is caught when v:dying is one,
VimLeave autocommands will not be executed.
v:errmsg errmsg-variable
v:errmsg
Last given error message.
Modifiable (can be set).
Example:
let v:errmsg = ""
silent! next
if v:errmsg != ""
" ... handle error
v:errors errors-variable assert-return
v:errors
Errors found by assert functions, such as
assert_true().
This is a list of strings.
The assert functions append an item when an assert fails.
The return value indicates this: a one is returned if an item
was added to v:errors, otherwise zero is returned.
To remove old results make it empty:
let v:errors = []
If v:errors is set to anything but a list it is made an empty
list by the assert function.
v:event event-variable
v:event
Dictionary of event data for the current
autocommand. Valid
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.
DirChanged or
TextYankPost.
KEY DESCRIPTION
abort Whether the event triggered during
an aborting condition (e.g.
c_Esc or
c_CTRL-C for
CmdlineLeave).
chan
channel-id
info Dict of arbitrary event data.
cmdlevel Level of cmdline.
cmdtype Type of cmdline,
cmdline-char.
cwd Current working directory.
inclusive Motion is
inclusive, else exclusive.
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".
regcontents Text stored in the register as a
readfile()-style list of lines.
regname Requested register (e.g "x" for "xyy)
or the empty string for an unnamed
operation.
regtype Type of register as returned by
getregtype().
visual Selection is visual (as opposed to,
e.g., via motion).
completed_item Current selected complete item on
CompleteChanged, Is
{}
when no complete
item selected.
height Height of popup menu on
CompleteChanged
width Width of popup menu on
CompleteChanged
row Row count of popup menu on
CompleteChanged,
relative to screen.
col Col count of popup menu on
CompleteChanged,
relative to screen.
size Total number of completion items on
CompleteChanged.
scrollbar Is
v:true if popup menu have scrollbar, or
v:false if not.
changed_window Is
v:true if the event fired while
changing window (or tab) on
DirChanged.
status Job status or exit code, -1 means "unknown".
TermClose
reason Reason for completion being done.
CompleteDone
complete_word The word that was selected, empty if abandoned complete.
complete_type See
complete_info_mode
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
or
expr7 when used with numeric operators). Read-only.
v:fcs_choice fcs_choice-variable
v:fcs_choice
What should happen after a
FileChangedShell event was
triggered. Can be used in an autocommand to tell Vim what to
do with the affected buffer:
reload Reload the buffer (does not work if
the file was deleted).
edit Reload the buffer and detect the
values for options such as
'fileformat',
'fileencoding',
'binary'
(does not work if the file was
deleted).
ask Ask the user what to do, as if there
was no autocommand. Except that when
only the timestamp changed nothing
will happen.
<empty>
Nothing, the autocommand should do
everything that needs to be done.
The default is empty. If another (invalid) value is used then
Vim behaves like it is empty, there is no warning message.
v:fcs_reason fcs_reason-variable
v:fcs_reason
The reason why the
FileChangedShell event was triggered.
Can be used in an autocommand to decide what to do and/or what
to set v:fcs_choice to. Possible values:
deleted file no longer exists
conflict file contents, mode or timestamp was
changed and buffer is modified
changed file contents has changed
mode mode of file changed
time only file timestamp changed
v:fname_out fname_out-variable
v:fname_out
The name of the output file. Only valid while
evaluating:
option used for
'charconvert' resulting converted file [1]
'diffexpr' output of diff
'patchexpr' resulting patched file
[1] When doing conversion for a write command (e.g., ":w
file") it will be equal to v:fname_in. When doing conversion
for a read command (e.g., ":e file") it will be a temporary
file and different from v:fname_in.
v:hlsearch hlsearch-variable
v:hlsearch
Variable that indicates whether search highlighting is on.
Setting it makes sense only if
'hlsearch' is enabled. Setting
this variable to zero acts like the
:nohlsearch command,
setting it to one acts like
let &hlsearch = &hlsearch
v:lang lang-variable
v:lang
The current locale setting for messages of the runtime
environment. This allows Vim scripts to be aware of the
current language. Technical: it's the value of LC_MESSAGES.
The value is system dependent.
This variable can not be set directly, use the
:language
command.
It can be different from
v:ctype when messages are desired
in a different language than what is used for character
encoding. See
multi-lang.
v:lc_time lc_time-variable
v:lc_time
The current locale setting for time messages of the runtime
environment. This allows Vim scripts to be aware of the
current language. Technical: it's the value of LC_TIME.
This variable can not be set directly, use the
:language
command. See
multi-lang.
v:maxcol maxcol-variable
v:maxcol
Maximum line length. Depending on where it is used it can be
screen columns, characters or bytes. The value currently is
2147483647 on all systems.
v:mouse_lnum mouse_lnum-variable
v:mouse_lnum
Line number for a mouse click obtained with
getchar().
This is the text line number, not the screen line number. The
value is zero when there was no mouse button click.
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
or
expr7 when used with numeric operators). Read-only.
In some places
v:null
can be used for a List, Dict, etc.
that is not set. That is slightly different than an empty
List, Dict, etc.
v:oldfiles oldfiles-variable
v:oldfiles
List of file names that is loaded from the
shada file on
startup. These are the files that Vim remembers marks for.
The length of the List is limited by the ' argument of the
'shada' option (default is 100).
When the
shada file is not used the List is empty.
Also see
:oldfiles and
c_#<.
The List can be modified, but this has no effect on what is
stored in the
shada file later. If you use values other
than String this will cause trouble.
v:operator operator-variable
v:operator
The last operator given in Normal mode. This is a single
character except for commands starting with
<g>
or
<z>
,
in which case it is two characters. Best used alongside
v:prevcount and
v:register. Useful if you want to cancel
Operator-pending mode and then use the operator, e.g.:
:omap O <Esc>:call MyMotion(v:operator)<CR>
The value remains set until another operator is entered, thus
don't expect it to be empty.
v:operator is not set for
:delete,
:yank or other Ex
commands.
Read-only.
v:option_old option_old-variable
v:option_old
Old value of the option. Valid while executing an
OptionSet
autocommand. Depending on the command used for setting and the
kind of option this is either the local old value or the
global old value.
v:prevcount prevcount-variable
v:prevcount
The count given for the last but one Normal mode command.
This is the v:count value of the previous command. Useful if
you want to cancel Visual or Operator-pending mode and then
use the count, e.g.:
:vmap % <Esc>:call MyFilter(v:prevcount)<CR>
Read-only.
v:register register-variable
v:register
The name of the register in effect for the current normal mode
command (regardless of whether that command actually used a
register). Or for the currently executing normal mode mapping
(use this in custom commands that take a register).
If none is supplied it is the default register '"', unless
'clipboard' contains "unnamed" or "unnamedplus", then it is
"*" or '+'.
Also see
getreg() and
setreg()
v:scrollstart scrollstart-variable
v:scrollstart
String describing the script or function that caused the
screen to scroll up. It's only set when it is empty, thus the
first reason is remembered. It is set to "Unknown" for a
typed command.
This can be used to find out why your script causes the
hit-enter prompt.
$NVIM
$NVIM is set by
terminal and
jobstart(), and is thus
a hint that the current environment is a subprocess of Nvim.
Example:
if $NVIM
echo nvim_get_chan_info(v:parent)
endif
Note the contents of $NVIM may change in the future.
v:shell_error shell_error-variable
v:shell_error
Result of the last shell command. When non-zero, the last
shell command had an error. When zero, there was no problem.
This only works when the shell returns the error code to Vim.
The value -1 is often used when the command could not be
executed. Read-only.
Example:
!mv foo bar
if v:shell_error
echo 'could not rename "foo" to "bar"!'
endif
v:stderr stderr-variable
v:stderr
channel-id corresponding to stderr. The value is always 2;
use this variable to make your code more descriptive.
Unlike stdin and stdout (see
stdioopen()), stderr is always
open for writing. Example:
:call chansend(v:stderr, "error: toaster empty\n")
v:swapchoice swapchoice-variable
v:swapchoice
SwapExists autocommands can set this to the selected choice
for handling an existing swapfile:
'o' Open read-only
'e' Edit anyway
'r' Recover
'd' Delete swapfile
'q' Quit
'a' Abort
The value should be a single-character string. An empty value
results in the user being asked, as would happen when there is
no SwapExists autocommand. The default is empty.
v:swapcommand swapcommand-variable
v:swapcommand
Normal mode command to be executed after a file has been
opened. Can be used for a
SwapExists autocommand to have
another Vim open the file and jump to the right place. For
example, when jumping to a tag the value is ":tag tagname\r".
For ":edit +cmd file" the value is ":cmd\r".
v:termresponse termresponse-variable
v:termresponse
The value of the most recent OSC or DCS control sequence
received by Nvim from the terminal. This can be read in a
TermResponse event handler after querying the terminal using
another escape sequence.
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
expr7 when used with numeric operators). Read-only.
v:version version-variable
v:version
Vim version number: major version times 100 plus minor
version. Vim 5.0 is 500, Vim 5.1 is 501.
Read-only.
Use
has() to check the Nvim (not Vim) version:
:if has("nvim-0.2.1")
v:virtnum virtnum-variable
v:virtnum
Virtual line number for the
'statuscolumn' expression.
Negative when drawing the status column for virtual lines, zero
when drawing an actual buffer line, and positive when drawing
the wrapped part of a buffer line.
Read-only.