Skip to main content
Deno 2 is finally here ๐ŸŽ‰๏ธ
Learn more
Module

x/denops_std/function/mod.ts

๐Ÿ“š Standard module for denops.vim
Go to Latest
import * as denopsStd from "https://deno.land/x/denops_std@v4.1.5/function/mod.ts";

A module to provide functions of Vim and Neovim native functions.

import { Denops } from "../mod.ts";
import * as fn from "../function/mod.ts";

export async function main(denops: Denops): Promise<void> {
  // fn holds functions exists in both Vim and Neovim
  console.log(fn.or(denops, 0, 1));
}

See vim/mod.ts or nvim/mod.ts if you need Vim or Neovim specific functions.

Functions

Return the absolute value of {expr}. When {expr} evaluates to a Float abs() returns a Float. When {expr} can be converted to a Number abs() returns a Number. Otherwise abs() gives an error message and returns -1. Examples:

Return the arc cosine of {expr} measured in radians, as a Float in the range of [0, pi]. {expr} must evaluate to a Float or a Number in the range [-1, 1]. Otherwise acos() returns "nan". Examples:

Append the item {expr} to List or Blob {object}. Returns the resulting List or Blob. Examples:

Bitwise AND on the two arguments. The arguments are converted to a number. A List, Dict or Float argument causes an error. Also see or() and xor(). Example:

When {text} is a List: Append each item of the List as a text line below line {lnum} in the current buffer. Otherwise append {text} as one text line below line {lnum} in the current buffer. Any type of item is accepted and converted to a String. {lnum} can be zero to insert a line before the first one. {lnum} is used like with getline(). Returns 1 for failure ({lnum} out of range or out of memory), 0 for success. In Vim9 script an invalid argument or negative number results in an error. Example:

Like append() but append the text in buffer {buf}.

The result is the number of files in the argument list. See arglist. If {winid} is not supplied, the argument list of the current window is used. If {winid} is -1, the global argument list is used. Otherwise {winid} specifies the window of which the argument list is used: either the window number or the window ID. Returns -1 if the {winid} argument is invalid.

The result is the current index in the argument list. 0 is the first file. argc() - 1 is the last one. See arglist.

Return the argument list ID. This is a number which identifies the argument list being used. Zero is used for the global argument list. See arglist. Returns -1 if the arguments are invalid.

The result is the **{nr}**th file in the argument list. See arglist. "argv(0)" is the first one. Example:

Return the arc sine of {expr} measured in radians, as a Float in the range of [-pi/2, pi/2]. {expr} must evaluate to a Float or a Number in the range [-1, 1]. Returns "nan" if {expr} is outside the range [-1, 1]. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Assert if x is Position by raising an AssertError when it's not.

Assert if x is ScreenPos by raising an AssertError when it's not.

Return the principal value of the arc tangent of {expr}, in the range [-pi/2, +pi/2] radians, as a Float. {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Return the arc tangent of {expr1} / {expr2}, measured in radians, as a Float in the range [-pi, pi]. {expr1} and {expr2} must evaluate to a Float or a Number. Returns 0.0 if {expr1} or {expr2} is not a Float or a Number. Examples:

Put up a file requester. This only works when "has("browse")" returns TRUE (only in some GUI versions). The input fields are: {save} when TRUE, select file to write {title} title for the requester {initdir} directory to start browsing in {default} default file name An empty string is returned when the "Cancel" button is hit, something went wrong, or browsing is not possible.

Put up a directory requester. This only works when "has("browse")" returns TRUE (only in some GUI versions). On systems where a directory browser is not supported a file browser is used. In that case: select a file in the directory to be used. The input fields are: {title} title for the requester {initdir} directory to start browsing in When the "Cancel" button is hit, something went wrong, or browsing is not possible, an empty string is returned.

Add a buffer to the buffer list with name {name} (must be a String). If a buffer for file {name} already exists, return that buffer number. Otherwise return the buffer number of the newly created buffer. When {name} is an empty string then a new buffer is always created. The buffer will not have 'buflisted' set and not be loaded yet. To add some text to the buffer use this: let bufnr = bufadd('someName') call bufload(bufnr) call setbufline(bufnr, 1, ['some', 'text']) Returns 0 on error. Can also be used as a |method|: let bufnr = 'somename'->bufadd()

The result is a Number, which is |TRUE| if a buffer called {buf} exists. If the {buf} argument is a number, buffer numbers are used.

The result is a Number, which is |TRUE| if a buffer called {buf} exists and is listed (has the 'buflisted' option set). The {buf} argument is used like with |bufexists()|.

Ensure the buffer {buf} is loaded. When the buffer name refers to an existing file then the file is read. Otherwise the buffer will be empty. If the buffer was already loaded then there is no change. If the buffer is not related to a file the no file is read (e.g., when 'buftype' is "nofile"). If there is an existing swap file for the file of the buffer, there will be no dialog, the buffer will be loaded anyway. The {buf} argument is used like with |bufexists()|.

The result is a Number, which is |TRUE| if a buffer called {buf} exists and is loaded (shown in a window or hidden). The {buf} argument is used like with |bufexists()|.

The result is the name of a buffer. Mostly as it is displayed by the :ls command, but not using special names such as "[No Name]". If {buf} is omitted the current buffer is used. If {buf} is a Number, that buffer number's name is given. Number zero is the alternate buffer for the current window. If {buf} is a String, it is used as a |file-pattern| to match with the buffer names. This is always done like 'magic' is set and 'cpoptions' is empty. When there is more than one match an empty string is returned. "" or "%" can be used for the current buffer, "#" for the alternate buffer. A full match is preferred, otherwise a match at the start, end or middle of the buffer name is accepted. If you only want a full match then put "^" at the start and "$" at the end of the pattern. Listed buffers are found first. If there is a single match with a listed buffer, that one is returned. Next unlisted buffers are searched for. If the {buf} is a String, but you want to use it as a buffer number, force it to be a Number by adding zero to it: :echo bufname("3" + 0) Can also be used as a |method|: echo bufnr->bufname()

The result is the number of a buffer, as it is displayed by the :ls command. For the use of {buf}, see |bufname()| above. If the buffer doesn't exist, -1 is returned. Or, if the {create} argument is present and TRUE, a new, unlisted, buffer is created and its number is returned. Example: let newbuf = bufnr('Scratch001', 1) Using an empty name uses the current buffer. To create a new buffer with an empty name use |bufadd()|. bufnr("$") is the last buffer: :let last_buffer = bufnr("$") The result is a Number, which is the highest buffer number of existing buffers. Note that not all buffers with a smaller number necessarily exist, because ":bwipeout" may have removed them. Use bufexists() to test for the existence of a buffer.

The result is a Number, which is the |window-ID| of the first window associated with buffer {buf}. For the use of {buf}, see |bufname()| above. If buffer {buf} doesn't exist or there is no such window, -1 is returned. Example:

Like |bufwinid()| but return the window number instead of the |window-ID|. If buffer {buf} doesn't exist or there is no such window, -1 is returned. Example:

Return the line number that contains the character at byte count {byte} in the current buffer. This includes the end-of-line character, depending on the 'fileformat' option for the current buffer. The first character has byte count one. Also see |line2byte()|, |go| and |:goto|.

Return byte index of the {nr}'th character in the String {expr}. Use zero for the first character, it then returns zero. If there are no multibyte characters the returned value is equal to {nr}. Composing characters are not counted separately, their byte length is added to the preceding base character. See byteidxcomp() below for counting composing characters separately. Example :

Like byteidx(), except that a composing character is counted as a separate character. Example:

Call function {func} with the items in List {arglist} as arguments. {func} can either be a Funcref or the name of a function. a:firstline and a:lastline are set to the cursor line. Returns the return value of the called function. {dict} is for functions with the "dict" attribute. It will be used to set the local variable "self". Dictionary-function

Return the smallest integral value greater than or equal to {expr} as a Float (round up). {expr} must evaluate to a Float or a Number. Examples:

Return the number of the most recent change. This is the same number as what is displayed with :undolist and can be used with the :undo command. When a change was made it is the number of that change. After redo it is the number of the redone change. After undo it is one less than the number of the undone change. Returns 0 if the undo list is empty.

Return Number value of the first char in {string}. Examples:

Return the character class of the first character in {string}. The character class is one of: 0 blank 1 punctuation 2 word character 3 emoji other specific Unicode class The class is used in patterns and word motions. Returns 0 if {string} is not a String.

Same as col() but returns the character index of the column position given with {expr} instead of the byte position.

Return the character index of the byte at {idx} in {string}. The index of the first character is zero. If there are no multibyte characters the returned value is equal to {idx}. When {countcc} is omitted or FALSE, then composing characters are not counted separately, their byte length is added to the preceding base character. When {countcc} is TRUE, then composing characters are counted as separate characters. Returns -1 if the arguments are invalid or if {idx} is greater than the index of the last byte in {string}. An error is given if the first argument is not a string, the second argument is not a number or when the third argument is present and is not zero or one. See byteidx() and byteidxcomp() for getting the byte index from the character index. Examples:

Change the current working directory to {dir}. The scope of the directory change depends on the directory of the current window: - If the current window has a window-local directory (:lcd), then changes the window local directory. - Otherwise, if the current tabpage has a local directory (:tcd) then changes the tabpage local directory. - Otherwise, changes the global directory. {dir} must be a String. If successful, returns the previous working directory. Pass this to another chdir() to restore the directory. On failure, returns an empty string.

Get the amount of indent for line {lnum} according the C indenting rules, as with 'cindent'. The indent is counted in spaces, the value of 'tabstop' is relevant. {lnum} is used just like in getline(). When {lnum} is invalid -1 is returned. See C-indenting.

Clears all matches previously defined for the current window by matchadd() and the :match commands. If {win} is specified, use the window with this number or window ID instead of the current window.

The result is a Number, which is the byte index of the column position given with {expr}. The accepted positions are: . the cursor position $ the end of the cursor line (the result is the number of bytes in the cursor line plus one) 'x position of mark x (if the mark is not set, 0 is returned) v In Visual mode: the start of the Visual area (the cursor is the end). When not in Visual mode returns the cursor position. Differs from |'<| in that it's updated right away. Additionally {expr} can be [lnum, col]: a |List| with the line and column number. Most useful when the column is "$", to get the last column of a specific line. When "lnum" or "col" is out of range then col() returns zero. To get the line number use |line()|. To get both use |getpos()|. For the screen column position use |virtcol()|. For the character position use |charcol()|. Note that only marks in the current file can be used. Examples: col(".") column of cursor col("$") length of cursor line plus one col("'t") column of mark t col("'" .. markname) column of mark markname The first column is 1. Returns 0 if {expr} is invalid. For an uppercase mark the column may actually be in another buffer. For the cursor position, when 'virtualedit' is active, the column is one higher if the cursor is after the end of the line. This can be used to obtain the column in Insert mode: :imap :let save_ve = &ve <C-O>:set ve=all <C-O>:echo col(".") .. "\n" \let &ve = save_ve GetPos()->col()

Set the matches for Insert mode completion. Can only be used in Insert mode. You need to use a mapping with CTRL-R = (see i_CTRL-R). It does not work after CTRL-O or with an expression mapping. {startcol} is the byte offset in the line where the completed text start. The text up to the cursor is the original text that will be replaced by the matches. Use col('.') for an empty string. "col('.') - 1" will replace one character by a match. {matches} must be a List. Each List item is one match. See complete-items for the kind of items that are possible. "longest" in 'completeopt' is ignored. Note that the after calling this function you need to avoid inserting anything that would cause completion to stop. The match can be selected with CTRL-N and CTRL-P as usual with Insert mode completion. The popup menu will appear if specified, see ins-completion-menu. Example:

Add {expr} to the list of matches. Only to be used by the function specified with the 'completefunc' option. Returns 0 for failure (empty string or out of memory), 1 when the match was added, 2 when the match was already in the list. See complete-functions for an explanation of {expr}. It is the same as one item in the list that 'omnifunc' would return.

Check for a key typed while looking for completion matches. This is to be used when looking for matches takes some time. Returns TRUE when searching for matches is to be aborted, zero otherwise. Only to be used by the function specified with the 'completefunc' option.

Returns a Dictionary with information about Insert mode completion. See ins-completion. The items are: mode Current completion mode name string. See complete_info_mode for the values. pum_visible TRUE if popup menu is visible. See pumvisible(). items List of completion matches. Each item is a dictionary containing the entries "word", "abbr", "menu", "kind", "info" and "user_data". See complete-items. selected Selected item index. First index is zero. Index is -1 if no item is selected (showing typed text only, or the last completion after no item is selected when using the <Up> or <Down> keys) inserted Inserted string. [NOT IMPLEMENTED YET]

confirm() offers the user a dialog, from which a choice can be made. It returns the number of the choice. For the first choice this is 1. Note: confirm() is only supported when compiled with dialog support, see +dialog_con and +dialog_gui.

Make a copy of {expr}. For Numbers and Strings this isn't different from using {expr} directly. When {expr} is a List a shallow copy is created. This means that the original List can be changed without changing the copy, and vice versa. But the items are identical, thus changing an item changes the contents of both Lists. A Dictionary is copied in a similar way as a List. Also see deepcopy(). Can also be used as a method:

Return the cosine of {expr}, measured in radians, as a Float. {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Return the hyperbolic cosine of {expr} as a Float in the range [1, inf]. {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Return the number of times an item with value {expr} appears in String, List or Dictionary {comp}.

Checks for the existence of a cscope connection. If no parameters are specified, then the function returns: 0, if cscope was not available (not compiled in), or if there are no cscope connections; 1, if there is at least one cscope connection.

Positions the cursor at the column (byte count) {col} in the line {lnum}. The first column is one.

Specifically used to interrupt a program being debugged. It will cause process {pid} to get a SIGTRAP. Behavior for other processes is undefined. See terminal-debugger. only available on MS-Windows

Make a copy of {expr}. For Numbers and Strings this isn't different from using {expr} directly. When {expr} is a List a full copy is created. This means that the original List can be changed without changing the copy, and vice versa. When an item is a List or Dictionary, a copy for it is made, recursively. Thus changing an item in the copy does not change the contents of the original List. A Dictionary is copied in a similar way as a List.

Without {flags} or with {flags} empty: Deletes the file by the name {fname}.

Delete lines {first} to {last} (inclusive) from buffer {buf}. If {last} is omitted then delete line {first} only. On success 0 is returned, on failure 1 is returned.

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 editing another buffer to set 'filetype' and load a syntax file.

Returns the number of filler lines above line {lnum}. These are the lines that were inserted at this point in another diff'ed window. These filler lines are shown in the display but don't exist in the buffer. {lnum} is used like with |getline()|. Thus "." is the current line, "'m" mark m, etc. Returns 0 if the current window is not in diff mode.

Returns the highlight ID for diff mode at line {lnum} column {col} (byte index). When the current line does not have a diff change zero is returned. {lnum} is used like with getline(). Thus "." is the current line, "'m" mark m, etc. {col} is 1 for the leftmost column, {lnum} is 1 for the first line. The highlight ID can be used with synIDattr() to obtain syntax information about the highlighting.

Return the digraph of {chars}. This should be a string with exactly two characters. If {chars} are not just two characters, or the digraph of {chars} does not exist, an error is given and an empty string is returned.

Return a list of digraphs. If the {listall} argument is given and it is TRUE, return all digraphs, including the default digraphs. Otherwise, return only user-defined digraphs.

Add digraph {chars} to the list. {chars} must be a string with two characters. {digraph} is a string with one UTF-8 encoded character. Be careful, composing characters are NOT ignored. This function is similar to :digraphs command, but useful to add digraphs start with a white space.

Similar to digraph_set() but this function can add multiple digraphs at once. {digraphlist} is a list composed of lists, where each list contains two strings with {chars} and {digraph} as in digraph_set(). Example:

Return the Number 1 if {expr} is empty, zero otherwise.

  • A List or Dictionary is empty when it does not have any items.
  • A String is empty when its length is zero.
  • A Number and Float are empty when their value is zero.
  • v:false, v:none and v:null are empty, v:true is not.
  • A Job is empty when it failed to start.
  • A Channel is empty when it is closed.
  • A Blob is empty when its length is zero.
f
ensurePosition
deprecated

Ensure if x is Position by raising an AssertError when it's not.

f
ensureScreenPos
deprecated

Ensure if x is ScreenPos by raising an AssertError when it's not.

Return all of environment variables as dictionary. You can check if an environment variable exists like this:

Escape the characters in {chars} that occur in {string} with a backslash. Example:

Evaluate {string} and return the result. Especially useful to turn the result of string() back into the original value. This works for Numbers, Floats, Strings, Blobs and composites of them. Also works for Funcrefs that refer to existing functions.

Returns 1 when inside an event handler. That is that Vim got interrupted while waiting for the user to type a character, e.g., when dropping a file on Vim. This means interactive commands cannot be used. Otherwise zero is returned.

This function checks if an executable with the name {expr} exists. {expr} must be the name of the program without any arguments. executable() uses the value of $PATH and/or the normal searchpath for programs. On MS-Windows the ".exe", ".bat", etc. can optionally be included. Then the extensions in $PATHEXT are tried. Thus if "foo.exe" does not exist, "foo.exe.bat" can be found. If $PATHEXT is not set then ".com;.exe;.bat;.cmd" is used. A dot by itself can be used in $PATHEXT to try using the name without an extension. When 'shell' looks like a Unix shell, then the name is also tried without adding an extension. On MS-Windows it only checks if the file exists and is not a directory, not if it's really executable. On MS-Windows an executable in the same directory as Vim is normally found. Since this directory is added to $PATH it should also work to execute it win32-PATH. This can be disabled by setting the $NoDefaultCurrentDirectoryInExePath environment variable. The result is a Number: 1 exists 0 does not exist -1 not implemented on this system exepath() can be used to get the full path of an executable.

Execute an Ex command or commands and return the output as a string. {command} can be a string or a List. In case of a List the lines are executed one by one. This is equivalent to:

If {expr} is an executable and is either an absolute path, a relative path or found in $PATH, return the full path. Note that the current directory is used when {expr} starts with "./", which may be a problem for Vim:

The result is a Number, which is |TRUE| if {expr} is defined, zero otherwise.

Return the exponential of {expr} as a Float in the range [0, inf]. {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Expand wildcards and the following special keywords in {string}. 'wildignorecase' applies.

Expand special items in String {string} like what is done for an Ex command such as :edit. This expands special keywords, like with expand(), and environment variables, anywhere in {string}. "~user" and "~/path" are only expanded at the start.

{expr1} and {expr2} must be both Lists or both Dictionaries.

Characters in {string} are queued for processing as if they come from a mapping or were typed by the user.

The result is a Number, which is TRUE when a file with the name {file} exists, and can be read. If {file} doesn't exist, or is a directory, the result is FALSE. {file} is any expression, which is used as a String. If you don't care about the file being readable you can use glob(). {file} is used as-is, you may want to expand wildcards first:

The result is a Number, which is 1 when a file with the name {file} exists, and can be written. If {file} doesn't exist, or is not writable, the result is 0. If {file} is a directory, and we can write to it, the result is 2.

{expr1} must be a List, String, Blob or Dictionary. For each item in {expr1} evaluate {expr2} and when the result is zero or false remove the item from the List or Dictionary. Similarly for each byte in a Blob and each character in a String.

Find directory {name} in {path}. Supports both downwards and upwards recursive directory searches. See file-searching for the syntax of {path}.

Just like finddir(), but find a file instead of a directory. Uses 'suffixesadd'. Example:

Flatten {list} up to {maxdepth} levels. Without {maxdepth} the result is a List without nesting, as if {maxdepth} is a very large number. The {list} is changed in place, use flattennew() if you do not want that. In Vim9 script flatten() cannot be used, you must always use flattennew().

Convert {expr} to a Number by omitting the part after the decimal point. {expr} must evaluate to a Float or a Number. Returns 0 if {expr} is not a Float or a Number. When the value of {expr} is out of range for a Number the result is truncated to 0x7fffffff or -0x7fffffff (or when 64-bit Number support is enabled, 0x7fffffffffffffff or -0x7fffffffffffffff). NaN results in -0x80000000 (or when 64-bit Number support is enabled, -0x8000000000000000). Examples:

Return the largest integral value less than or equal to {expr} as a Float (round down). {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Return the remainder of {expr1} / {expr2}, even if the division is not representable. Returns {expr1} - i * {expr2} for some integer i such that if {expr2} is non-zero, the result has the same sign as {expr1} and magnitude less than the magnitude of {expr2}. If {expr2} is zero, the value returned is zero. The value returned is a Float. {expr1} and {expr2} must evaluate to a Float or a Number. Returns 0.0 if {expr1} or {expr2} is not a Float or a Number. Examples:

Escape {string} for use as file name command argument. All characters that have a special meaning, such as '%' and '|' are escaped with a backslash. For most systems the characters escaped are " \t\n*?[{`$\\%#'\"|!<". For systems where a backslash appears in a filename, it depends on the value of 'isfname'. A leading '+' and '>' is also escaped (special after :edit and :write). And a "-" by itself (special after :cd). Returns an empty string on error. Example:

Modify file name {fname} according to {mods}. {mods} is a string of characters like it is used for file names on the command line. See filename-modifiers. Example:

The result is a Number. If the line {lnum} is in a closed fold, the result is the number of the first line in that fold. If the line {lnum} is not in a closed fold, -1 is returned. {lnum} is used like with getline(). Thus "." is the current line, "'m" mark m, etc.

The result is a Number. If the line {lnum} is in a closed fold, the result is the number of the last line in that fold. If the line {lnum} is not in a closed fold, -1 is returned. {lnum} is used like with getline(). Thus "." is the current line, "'m" mark m, etc.

The result is a Number, which is the foldlevel of line {lnum} in the current buffer. For nested folds the deepest level is returned. If there is no fold at line {lnum}, zero is returned. It doesn't matter if the folds are open or closed. When used while updating folds (from 'foldexpr') -1 is returned for lines where folds are still to be updated and the foldlevel is unknown. As a special case the level of the previous line is usually available. {lnum} is used like with getline(). Thus "." is the current line, "'m" mark m, etc.

Returns a String, to be displayed for a closed fold. This is the default function used for the 'foldtext' option and should only be called from evaluating 'foldtext'. It uses the v:foldstart, v:foldend and v:folddashes variables. The returned string looks like this:

Returns the text that is displayed for the closed fold at line {lnum}. Evaluates 'foldtext' in the appropriate context. When there is no closed fold at {lnum} an empty string is returned. {lnum} is used like with getline(). Thus "." is the current line, "'m" mark m, etc. Useful when exporting folded text, e.g., to HTML. not available when compiled without the +folding feature

Get the full command name from a short abbreviated command name; see 20.2 for details on command abbreviations.

Just like function(), but the returned Funcref will lookup the function by reference, not by name. This matters when the function {name} is redefined later.

Return a Funcref variable that refers to function {name}. {name} can be the name of a user defined function or an internal function.

Cleanup unused Lists, Dictionaries, Channels and Jobs that have circular references.

Get item {idx} from List {list}. When this item is not available return {default}. Return zero when {default} is omitted. Preferably used as a method:

Get information about buffers as a List of Dictionaries.

Return a |List| with the lines starting from {lnum} to {end} (inclusive) in the buffer {buf}. If {end} is omitted, a |List| with only the line {lnum} is returned.

The result is the value of option or local buffer variable {varname} in buffer {buf}. Note that the name without "b:" must be used. The {varname} argument is a string. When {varname} is empty returns a Dictionary with all the buffer-local variables. When {varname} is equal to "&" returns a Dictionary with all the buffer-local options. Otherwise, when {varname} starts with "&" returns the value of a buffer-local option. This also works for a global or buffer-local option, but it doesn't work for a global variable, window-local variable or window-local option. For the use of {buf}, see bufname() above. When the buffer or variable doesn't exist {def} or an empty string is returned, there is no error message. Examples:

Returns the changelist for the buffer {buf}. For the use of {buf}, see bufname() above. If buffer {buf} doesn't exist, an empty list is returned.

Get a single character from the user or input stream. If [expr] is omitted, wait until a character is available. If [expr] is 0, only get a character when one is available. Return zero otherwise. If [expr] is 1, only check if a character is available, it is not consumed. Return zero if no character available. If you prefer always getting a string use getcharstr().

The result is a Number which is the state of the modifiers for the last obtained character with getchar() or in another way. These values are added together: 2 shift 4 control 8 alt (meta) 16 meta (when it's different from ALT) 32 mouse double click 64 mouse triple click 96 mouse quadruple click (== 32 + 64) 128 command (Macintosh only) Only the modifiers that have not been included in the character itself are obtained. Thus Shift-a results in "A" without a modifier. Returns 0 if no modifiers are used.

Get the position for String {expr}. Same as getpos() but the column number in the returned List is a character index instead of a byte index. If getpos() returns a very large column number, equal to v:maxcol, then getcharpos() will return the character index of the last character.

Return the current character search information as a {dict} with the following entries:

Get a single character from the user or input stream as a string. If [expr] is omitted, wait until a character is available. If [expr] is 0 or false, only get a character when one is available. Return an empty string otherwise. If [expr] is 1 or true, only check if a character is available, it is not consumed. Return an empty string if no character is available. Otherwise this works like getchar(), except that a number result is converted to a string.

Return the type of the current command-line completion. Only works when the command line is being edited, thus requires use of c_CTRL-\_e or c_CTRL-R_=. See :command-completion for the return string. Also see getcmdtype(), setcmdpos(), getcmdline() and setcmdline(). Returns an empty string when completion is not defined.

Return the current command-line. Only works when the command line is being edited, thus requires use of c_CTRL-\_e or c_CTRL-R_=. Example:

Return the position of the cursor in the command line as a byte count. The first column is 1. Only works when editing the command line, thus requires use of c_CTRL-\_e or c_CTRL-R_= or an expression mapping. Returns 0 otherwise. Also see getcmdtype(), setcmdpos(), getcmdline() and setcmdline().

Return the screen position of the cursor in the command line as a byte count. The first column is 1. Instead of getcmdpos(), it adds the prompt position. Only works when editing the command line, thus requires use of c_CTRL-\_e or c_CTRL-R_= or an expression mapping. Returns 0 otherwise. Also see getcmdpos(), setcmdpos(), getcmdline() and setcmdline().

Return the current command-line type. Possible return values are: : normal Ex command > debug mode command debug-mode / forward search command ? backward search command @ input() command - :insert or :append command = i_CTRL-R_= Only works when editing the command line, thus requires use of c_CTRL-\_e or c_CTRL-R_= or an expression mapping. Returns an empty string otherwise. Also see getcmdpos(), setcmdpos() and getcmdline().

Return the current command-line-window type. Possible return values are the same as getcmdtype(). Returns an empty string when not in the command-line window.

Return a list of command-line completion matches. The String {type} argument specifies what for. The following completion types are supported:

Get the position of the cursor. This is like getpos('.'), but includes an extra "curswant" item in the list: [0, lnum, col, off, curswant] ~ The "curswant" number is the preferred column when moving the cursor vertically. After |$| command it will be a very large number equal to |v:maxcol|. Also see |getcursorcharpos()| and |getpos()|. The first "bufnum" item is always zero. The byte position of the cursor is returned in 'col'. To get the character position, use |getcursorcharpos()|.

Same as getcurpos() but the column number in the returned List is a character index instead of a byte index.

The result is a String, which is the name of the current working directory. 'autochdir' is ignored.

Return the value of environment variable {name}. The {name} argument is a string, without a leading '$'. Example:

Without an argument returns the name of the normal font being used. Like what is used for the Normal highlight group hl-Normal. With an argument a check is done whether String {name} is a valid font name. If not then an empty string is returned. Otherwise the actual font name is returned, or {name} if the GUI does not support obtaining the real name. Only works when the GUI is running, thus not in your vimrc or gvimrc file. Use the GUIEnter autocommand to use this function just after the GUI has started. Note that the GTK GUI accepts any font name, thus checking for a valid name does not work.

The result is a String, which is the read, write, and execute permissions of the given file {fname}. If {fname} does not exist or its directory cannot be read, an empty string is returned. The result is of the form "rwxrwxrwx", where each group of "rwx" flags represent, in turn, the permissions of the owner of the file, the group the file belongs to, and other users. If a user does not have a given permission the flag for this is replaced with the string "-". Examples:

The result is a Number, which is the size in bytes of the given file {fname}. If {fname} is a directory, 0 is returned. If the file {fname} can't be found, -1 is returned. If the size of {fname} is too big to fit in a Number then -2 is returned.

The result is a Number, which is the last modification time of the given file {fname}. The value is measured as seconds since 1st Jan 1970, and may be passed to strftime(). See also localtime() and strftime(). If the file {fname} can't be found -1 is returned.

The result is a String, which is a description of the kind of file of the given file {fname}. If {fname} does not exist an empty string is returned. Here is a table over different kinds of files and their results: Normal file "file" Directory "dir" Symbolic link "link" Block device "bdev" Character device "cdev" Socket "socket" FIFO "fifo" All other "other" Example:

Returns the jumplist for the specified window.

Without {end} the result is a String, which is line {lnum} from the current buffer. Example: getline(1) When {lnum} is a String that doesn't start with a digit, |line()| is called to translate the String into a Number. To get the line under the cursor: getline(".") When {lnum} is a number smaller than 1 or bigger than the number of lines in the buffer, an empty string is returned.

Returns a List with all the entries in the location list for window {nr}. {nr} can be the window number or the window-ID. When {nr} is zero the current window is used.

Without the {buf} argument returns a List with information about all the global marks. mark

Returns a List with all matches previously defined for the current window by matchadd() and the :match commands. getmatches() is useful in combination with setmatches(), as setmatches() can restore a list of matches saved by getmatches(). If {win} is specified, use the window with this number or window ID instead of the current window. If {win} is invalid, an empty list is returned. Example:

Returns a Dictionary with the last known position of the mouse. This can be used in a mapping for a mouse click or in a filter of a popup window. The items are: screenrow screen row screencol screen column winid Window ID of the click winrow row inside "winid" wincol column inside "winid" line text line inside "winid" column text column inside "winid" All numbers are 1-based.

Return a Number which is the process ID of the Vim process. On Unix and MS-Windows this is a unique number, until Vim exits.

Get the position for String {expr}. For possible values of {expr} see |line()|. For getting the cursor position see |getcurpos()|. The result is a |List| with four numbers: [bufnum, lnum, col, off] "bufnum" is zero, unless a mark like '0 or 'A is used, then it is the buffer number of the mark. "lnum" and "col" are the position in the buffer. The first column is 1. The "off" number is zero, unless 'virtualedit' is used. Then it is the offset in screen columns from the start of the character. E.g., a position within a or after the last character. Note that for '< and '> Visual mode matters: when it is "V" (visual line mode) the column of '< is zero and the column of '> is a large number equal to |v:maxcol|. The column number in the returned List is the byte position within the line. To get the character position in the line, use |getcharpos()|. A very large column number equal to |v:maxcol| can be returned, in which case it means "after the end of the line". If {expr} is invalid, returns a list with all zeros. This can be used to save and restore the position of a mark: let save_a_mark = getpos("'a") ... call setpos("'a", save_a_mark) Also see |getcharpos()|, |getcurpos()| and |setpos()|.

Returns a List with all the current quickfix errors. Each list item is a dictionary with these entries: bufnr number of buffer that has the file name, use bufname() to get the name module module name lnum line number in the buffer (first line is 1) end_lnum end of line number if the item is multiline col column number (first column is 1) end_col end of column number if the item has range vcol TRUE: "col" is visual column FALSE: "col" is byte index nr error number pattern search pattern used to locate the error text description of the error type type of the error, 'E', '1', etc. valid TRUE: recognized error message

The result is a String, which is the contents of register {regname}. Example:

Returns detailed information about register {regname} as a Dictionary with the following entries: regcontents List of lines contained in register {regname}, like |getreg|({regname}, 1, 1). regtype the type of register {regname}, as in |getregtype()|. isunnamed Boolean flag, v:true if this register is currently pointed to by the unnamed register. points_to for the unnamed register, gives the single letter name of the register currently pointed to (see |quotequote|). For example, after deleting a line with dd, this field will be "1", which is the register that got the deleted text. The {regname} argument is a string. If {regname} is invalid or not set, an empty Dictionary will be returned. If {regname} is "" or "@", the unnamed register '"' is used. If {regname} is not specified, |v:register| is used. The returned Dictionary can be passed to |setreg()|. In |Vim9-script| {regname} must be one character. Can also be used as a |method|: GetRegname()->getreginfo()

The result is a String, which is type of register {regname}. The value will be one of: "v" for characterwise text "V" for linewise text "<CTRL-V>{width}" for blockwise-visual text "" for an empty or unknown register <CTRL-V> is one character with value 0x16. The {regname} argument is a string. If {regname} is "", the unnamed register '"' is used. If {regname} is not specified, v:register is used. In Vim9-script {regname} must be one character.

If {tabnr} is not specified, then information about all the tab pages is returned as a List. Each List item is a Dictionary. Otherwise, {tabnr} specifies the tab page number and information about that one is returned. If the tab page does not exist an empty List is returned.

Get the value of a tab-local variable {varname} in tab page {tabnr}. t:var Tabs are numbered starting with one. The {varname} argument is a string. When {varname} is empty a dictionary with all tab-local variables is returned. Note that the name without "t:" must be used. When the tab or variable doesn't exist {def} or an empty string is returned, there is no error message.

Get the value of window-local variable {varname} in window {winnr} in tab page {tabnr}. The {varname} argument is a string. When {varname} is empty a dictionary with all window-local variables is returned. When {varname} is equal to "&" get the values of all window-local options in a Dictionary. Otherwise, when {varname} starts with "&" get the value of a window-local option. Note that {varname} must be the name without "w:". Tabs are numbered starting with one. For the current tabpage use getwinvar(). {winnr} can be the window number or the window-ID. When {winnr} is zero the current window is used. This also works for a global option, buffer-local option and window-local option, but it doesn't work for a global variable or buffer-local variable. When the tab, window or variable doesn't exist {def} or an empty string is returned, there is no error message. Examples:

The result is a Dict, which is the tag stack of window {winnr}. {winnr} can be the window number or the window-ID. When {winnr} is not specified, the current window is used. When window {winnr} doesn't exist, an empty Dict is returned.

Returns information about windows as a List with Dictionaries.

The result is a List with two numbers, the result of getwinposx() and getwinposy() combined: [x-pos, y-pos] {timeout} can be used to specify how long to wait in msec for a response from the terminal. When omitted 100 msec is used. Use a longer time for a remote terminal. When using a value less than 10 and no response is received within that time, a previously reported position is returned, if available. This can be used to poll for the position and do some work in the meantime:

The result is a Number, which is the X coordinate in pixels of the left hand side of the GUI Vim window. Also works for an xterm (uses a timeout of 100 msec). The result will be -1 if the information is not available. The value can be used with :winpos.

The result is a Number, which is the Y coordinate in pixels of the top of the GUI Vim window. Also works for an xterm (uses a timeout of 100 msec). The result will be -1 if the information is not available. The value can be used with :winpos.

Like gettabwinvar() for the current tabpage. Examples:

Expand the file wildcards in {expr}. See wildcards for the use of special characters.

Convert a file pattern, as used by glob(), into a search pattern. The result can be used to match with a string that is a file name. E.g.

Perform glob() for String {expr} on all directories in {path} and concatenate the results. Example:

Returns 1 if {feature} is supported, 0 otherwise. The {feature} argument is a feature name like "nvim-0.2.1" or "win32", see below. See also |exists()|.

The result is a Number, which is TRUE if Dictionary {dict} has an entry with key {key}. FALSE otherwise. The {key} argument is a string. In Vim9 script a number is also accepted (and converted to a string) but no other types. In legacy script the usual automatic conversion to string is done.

The result is a Number: 1 when the window has set a local directory via :lcd 2 when the tab-page has set a local directory via :tcd 0 otherwise.

The result is a Number, which is TRUE if there is a mapping that contains {what} in somewhere in the rhs (what it is mapped to) and this mapping exists in one of the modes indicated by {mode}. The arguments {what} and {mode} are strings. When {abbr} is there and it is TRUE use abbreviations instead of mappings. Don't forget to specify Insert and/or Command-line mode. Both the global mappings and the mappings local to the current buffer are checked for a match. If no matching mapping is found FALSE is returned. The following characters are recognized in {mode}: n Normal mode v Visual and Select mode x Visual mode s Select mode o Operator-pending mode i Insert mode l Language-Argument ("r", "f", "t", etc.) c Command-line mode When {mode} is omitted, "nvo" is used.

Add the String {item} to the history {history} which can be one of: "cmd" or ":" command line history "search" or "/" search pattern history "expr" or "=" typed expression history "input" or "@" input line history "debug" or ">" debug command history empty the current or last used history The {history} string does not need to be the whole name, one character is sufficient. If {item} does already exist in the history, it will be shifted to become the newest entry. The result is a Number: TRUE if the operation was successful, otherwise FALSE is returned.

Clear {history}, i.e. delete all its entries. See hist-names for the possible values of {history}.

The result is a String, the entry with Number {index} from {history}. See hist-names for the possible values of {history}, and :history-indexing for {index}. If there is no such entry, an empty String is returned. When {index} is omitted, the most recent item from the history is used.

The result is the Number of the current entry in {history}. See hist-names for the possible values of {history}. If an error occurred, -1 is returned.

The result is a Number, which is TRUE if a highlight group called {name} exists. This is when the group has been defined in some way. Not necessarily when highlighting has been defined for it, it may also have been used for a syntax item.

The result is a Number, which is the ID of the highlight group with name {name}. When the highlight group doesn't exist, zero is returned. This can be used to retrieve information about the highlight group. For example, to get the background color of the "Comment" group:

The result is a String, which is the name of the machine on which Vim is currently running. Machine names greater than 256 characters long are truncated.

The result is a String, which is the text {string} converted from encoding {from} to encoding {to}. When the conversion completely fails an empty string is returned. When some characters could not be converted they are replaced with "?". The encoding names are whatever the iconv() library function can accept, see ":!man 3 iconv". Most conversions require Vim to be compiled with the +iconv feature. Otherwise only UTF-8 to latin1 conversion and back can be done. This can be used to display messages with special characters, no matter what 'encoding' is set to. Write the message in UTF-8 and use:

The result is a Number, which is indent of line {lnum} in the current buffer. The indent is counted in spaces, the value of 'tabstop' is relevant. {lnum} is used just like in getline(). When {lnum} is invalid -1 is returned. In Vim9 script an error is given.

Find {expr} in {object} and return its index. See indexof() for using a lambda to select the item.

The result is a String, which is whatever the user typed on the command-line. The {prompt} argument is either a prompt string, or a blank string (for no prompt). A '\n' can be used in the prompt to start a new line. The highlighting set with |:echohl| is used for the prompt. The input is entered just like a command-line, with the same editing commands and mappings. There is a separate history for lines typed for input(). Example: :if input("Coffee or beer? ") == "beer" : echo "Cheers!" :endif

{textlist} must be a |List| of strings. This |List| is displayed, one string per line. The user will be prompted to enter a number, which is returned. The user can also select an item by clicking on it with the mouse, if the mouse is enabled in the command line ('mouse' is "a" or includes "c"). For the first string 0 is returned. When clicking above the first item a negative number is returned. When clicking on the prompt one more than the length of {textlist} is returned. Make sure {textlist} has less than 'lines' entries, otherwise it won't work. It's a good idea to put the entry number at the start of the string. And put a prompt in the first item. Example: let color = inputlist(['Select color:', '1. red', \ '2. green', '3. blue'])

Restore typeahead that was saved with a previous |inputsave()|. Should be called the same number of times inputsave() is called. Calling it more often is harmless though. Returns TRUE when there is nothing to restore, FALSE otherwise.

Preserve typeahead (also from mappings) and clear it, so that a following prompt gets input from the user. Should be followed by a matching inputrestore() after the prompt. Can be used several times, in which case there must be just as many inputrestore() calls. Returns TRUE when out of memory, FALSE otherwise.

This function acts much like the |input()| function with but two exceptions: a) the user's response will be displayed as a sequence of asterisks ("*") thereby keeping the entry secret, and b) the user's response will not be recorded on the input |history| stack. The result is a String, which is whatever the user actually typed on the command-line in response to the issued prompt. NOTE: Command-line completion is not supported.

When {object} is a List or a Blob insert {item} at the start of it.

Interrupt script execution. It works more or less like the user typing CTRL-C, most commands won't execute and control returns to the user. This is useful to abort execution from lower down, e.g. in an autocommand. Example:

Bitwise invert. The argument is converted to a number. A List, Dict or Float argument causes an error. Example:

The result is a Number, which is TRUE when a directory with the name {directory} exists. If {directory} doesn't exist, or isn't a directory, the result is FALSE. {directory} is any expression, which is used as a String.

Return 1 if {expr} is a positive infinity, or -1 a negative infinity, otherwise 0.

The result is a Number, which is TRUE when {expr} is the name of a locked variable. The string argument {expr} must be the name of a variable, List item or Dictionary entry, not the variable itself! Example:

Return TRUE if {expr} is a float with value NaN.

Return true if the value is Position.

Return true if the value is ScreenPos.

Check if the value is valid BuiltinCompletion

Return a List with all the key-value pairs of {dict}. Each List item is a list with two items: the key of a {dict} entry and the value of this entry. The List is in arbitrary order. Also see keys() and values(). Example:

Join the items in {list} together into one String. When {sep} is specified it is put in between the items. If {sep} is omitted a single space is used. Note that {sep} is not added at the end. You might want to add it there too:

This parses a JSON formatted string and returns the equivalent in Vim values. See json_encode() for the relation between JSON and Vim values. The decoding is permissive:

  • A trailing comma in an array and object is ignored, e.g. "[1, 2, ]" is the same as "[1, 2]".
  • Integer keys are accepted in objects, e.g. {1:2} is the same as {"1":2}.
  • More floating point numbers are recognized, e.g. "1." for "1.0", or "001.2" for "1.2". Special floating point values "Infinity", "-Infinity" and "NaN" (capitalization ignored) are accepted.
  • Leading zeroes in integer numbers are ignored, e.g. "012" for "12" or "-012" for "-12".
  • Capitalization is ignored in literal names null, true or false, e.g. "NULL" for "null", "True" for "true".
  • Control characters U+0000 through U+001F which are not escaped in strings are accepted, e.g. " " (tab character in string) for "\t".
  • An empty JSON expression or made of only spaces is accepted and results in v:none.
  • Backslash in an invalid 2-character sequence escape is ignored, e.g. "\a" is decoded as "a".
  • A correct surrogate pair in JSON strings should normally be a 12 character sequence such as "\uD834\uDD1E", but json_decode() silently accepts truncated surrogate pairs such as "\uD834" or "\uD834\u"

Encode {expr} as JSON and return this as a string. The encoding is specified in: https://tools.ietf.org/html/rfc7159.html Vim values are converted as follows: Number decimal number Float floating point number Float nan "NaN" Float inf "Infinity" Float -inf "-Infinity" String in double quotes (possibly null) Funcref not possible, error List as an array (possibly null); when used recursively: [] Dict as an object (possibly null); when used recursively: {} Blob as an array of the individual bytes v:false "false" v:true "true" v:none "null" v:null "null" Note that NaN and Infinity are passed on as values. This is missing in the JSON standard, but several implementations do allow it. If not then you will get an error. If a string contains an illegal character then the replacement character 0xfffd is used.

Return a List with all the keys of {dict}. The List is in arbitrary order. Also see items() and values().

Turn the internal byte representation of keys into a form that can be used for :map. E.g.

The result is a Number, which is the length of the argument. When {expr} is a String or a Number the length in bytes is used, as with strlen(). When {expr} is a List the number of items in the List is returned. When {expr} is a Blob the number of bytes is returned. When {expr} is a Dictionary the number of entries in the Dictionary is returned. Otherwise an error is given and returns zero.

Call function {funcname} in the run-time library {libname} with single argument {argument}. This is useful to call functions in a library that you especially made to be used with Vim. Since only one argument is possible, calling standard library functions is rather limited. The result is the String returned by the function. If the function returns NULL, this will appear as an empty string "" to Vim. If the function returns a number, use libcallnr()! If {argument} is a number, it is passed to the function as an int; if {argument} is a string, it is passed as a null-terminated string. This function will fail in restricted-mode.

Just like libcall(), but used for a function that returns an int instead of a string. only in Win32 on some Unix versions, when the +libcall feature is present Examples:

The result is a Number, which is the line number of the file position given with {expr}. The {expr} argument is a string. The accepted positions are: . the cursor position $ the last line in the current buffer 'x position of mark x (if the mark is not set, 0 is returned) w0 first line visible in current window (one if the display isn't updated, e.g. in silent Ex mode) w$ last line visible in current window (this is one less than "w0" if no lines are visible) v In Visual mode: the start of the Visual area (the cursor is the end). When not in Visual mode returns the cursor position. Differs from |'<| in that it's updated right away. Note that a mark in another file can be used. The line number then applies to another buffer. To get the column number use |col()|. To get both use |getpos()|. With the optional {winid} argument the values are obtained for that window instead of the current window. Returns 0 for invalid values of {expr} and {winid}. Examples: line(".") line number of the cursor line(".", winid) idem, in window "winid" line("'t") line number of mark t line("'" .. marker) line number of mark marker

Return the byte count from the start of the buffer for line {lnum}. This includes the end-of-line character, depending on the 'fileformat' option for the current buffer. The first line returns 1. 'encoding' matters, 'fileencoding' is ignored. This can also be used to get the byte count for the line just below the last line: line2byte(line("$") + 1) This is the buffer size plus one. If 'fileencoding' is empty it is the file size plus one. {lnum} is used like with |getline()|. When {lnum} is invalid, or the |+byte_offset| feature has been disabled at compile time, -1 is returned. Also see |byte2line()|, |go| and |:goto|.

Get the amount of indent for line {lnum} according the lisp indenting rules, as with 'lisp'. The indent is counted in spaces, the value of 'tabstop' is relevant. {lnum} is used just like in getline(). When {lnum} is invalid -1 is returned. In Vim9 script an error is given.

Convert each number in {list} to a character string can concatenate them all. Examples:

Return the current time, measured as seconds since 1st Jan 1970. See also strftime(), strptime() and getftime().

Return the natural logarithm (base e) of {expr} as a Float. {expr} must evaluate to a Float or a Number in the range (0, inf]. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Return the logarithm of Float {expr} to base 10 as a Float. {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

{expr1} must be a List, String, Blob or Dictionary. When {expr1} is a List or Dictionary, replace each item in {expr1} with the result of evaluating {expr2}. For a Blob each byte is replaced. For a String, each character, including composing characters, is replaced. If the item type changes you may want to use mapnew() to create a new List or Dictionary. This is required when using Vim9 script.

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 {dict} is TRUE a dictionary is returned, see below. To get a list of all mappings see maplist().

Check if there is a mapping that matches with {name} in mode {mode}. See maparg() for {mode} and special names in {name}. When {abbr} is there and it is TRUE use abbreviations instead of mappings. A match happens with a mapping that starts with {name} and with a mapping which is equal to the start of {name}.

Restore a mapping from a dictionary, possibly returned by maparg() or maplist(). A buffer mapping, when dict.buffer is true, is set on the current buffer; it is up to the caller to ensure that the intended buffer is the current buffer. This feature allows copying mappings from one buffer to another. The dict.mode value may restore a single mapping that covers more than one mode, like with mode values of '!', ' ', 'nox', or 'v'.

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.

Defines a pattern to be highlighted in the current window (a "match"). It will be highlighted with {group}. Returns an identification number (ID), which can be used to delete the match using matchdelete(). The ID is bound to the window. Matching is case sensitive and magic, unless case sensitivity or magicness are explicitly overridden in {pattern}. The 'magic', 'smartcase' and 'ignorecase' options are not used. The "Conceal" value is special, it causes the match to be concealed.

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.

Selects the {nr} match item, as set with a :match, :2match or :3match command. Return a List with two elements: The name of the highlight group used The pattern used. When {nr} is not 1, 2 or 3 returns an empty List. When there is no match item set returns ['', '']. This is useful to save and restore a :match. Highlighting matches using the :match commands are limited to three matches. matchadd() does not have this limitation.

Deletes a match with ID {id} previously defined by matchadd() or one of the :match commands. Returns 0 if successful, otherwise -1. See example for matchadd(). All matches can be deleted in one operation by clearmatches(). If {win} is specified, use the window with this number or window ID instead of the current window.

Same as match(), but return the index of first character after the match. Example:

If {list} is a list of strings, then returns a List with all the strings in {list} that fuzzy match {str}. The strings in the returned list are sorted based on the matching score.

Same as matchfuzzy(), but returns the list of matched strings, the list of character positions where characters in {str} matches and a list of matching scores. You can use byteidx() to convert a character position to a byte position.

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. in :substitute. When an optional submatch didn't match an empty string is used. Example:

Same as match(), but return the matched string. Example:

Same as matchstr(), but return the matched string, the start position and the end position of the match. Example:

Return the maximum value of all items in {expr}. Example:

Return information about the specified menu {name} in mode {mode}. The menu name should be specified without the shortcut character ('&'). If {name} is "", then the top-level menu names are returned.

Return the minimum value of all items in {expr}. Example:

Create directory {name}.

Return a string that indicates the current mode. If [expr] is supplied and it evaluates to a non-zero Number or a non-empty String (|non-zero-arg|), then the full mode is returned, otherwise only the first letter is returned. Also see |state()|.

Return the line number of the first line at or below {lnum} that is not blank. Example:

Return a string with a single character, which has the number value {expr}. Examples:

Bitwise OR on the two arguments. The arguments are converted to a number. A List, Dict or Float argument causes an error. Also see and() and xor(). Example:

Shorten directory names in the path {path} and return the result. The tail, the file name, is kept as-is. The other components in the path are reduced to {len} letters in length. If {len} is omitted or smaller than 1 then 1 is used (single letters). Leading '~' and '.' characters are kept. Examples:

Evaluate Perl expression {expr} in scalar context and return its result converted to Vim data structures. If value can't be converted, it is returned as a string Perl representation. Note: If you want an array or hash, {expr} must return a reference to it. Example:

Return the power of {x} to the exponent {y} as a Float. {x} and {y} must evaluate to a Float or a Number. Returns 0.0 if {x} or {y} is not a Float or a Number. Examples:

Return the line number of the first line at or above {lnum} that is not blank. Example:

Return a String with {fmt}, where "%" items are replaced by the formatted form of their respective arguments. Example:

Returns the effective prompt text for buffer {buf}. {buf} can be a buffer name or number. See prompt-buffer.

Set prompt callback for buffer {buf} to {expr}. When {expr} is an empty string the callback is removed. This has only effect if {buf} has 'buftype' set to "prompt".

Set a callback for buffer {buf} to {expr}. When {expr} is an empty string the callback is removed. This has only effect if {buf} has 'buftype' set to "prompt".

Set prompt for buffer {buf} to {text}. You most likely want {text} to end in a space. The result is only visible if {buf} has 'buftype' set to "prompt". Example:

If the popup menu (see ins-completion-menu) is not visible, returns an empty Dictionary, otherwise, returns a Dictionary with the following keys: height nr of items visible width screen cells row top screen row (0 first row) col leftmost screen column (0 first col) size total nr of items scrollbar TRUE if scrollbar is visible

Returns non-zero when the popup menu is visible, zero otherwise. See ins-completion-menu. This can be used to avoid some things that would remove the popup menu.

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 'encoding'). Lists are represented as Vim List type. Dictionaries are represented as Vim Dictionary type with keys converted to strings. Note that in a :def function local variables are not visible to {expr}.

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). Lists are represented as Vim List type. Dictionaries are represented as Vim Dictionary type, non-string keys result in error. Note that in a :def function local variables are not visible to {expr}.

Evaluate Python expression {expr} and return its result converted to Vim data structures. Uses Python 2 or 3, see python_x and 'pyxversion'. See also: pyeval(), py3eval()

Return a pseudo-random Number generated with an xoshiro128** algorithm using seed {expr}. The returned number is 32 bits, also on 64 bits systems, for consistency. {expr} can be initialized by srand() and will be updated by rand(). If {expr} is omitted, an internal seed value is used and updated. Returns -1 if {expr} is invalid.

Returns a List with Numbers:

  • If only {expr} is specified: [0, 1, ..., {expr} - 1]
  • If {max} is specified: [{expr}, {expr} + 1, ..., {max}]
  • If {stride} is specified: [{expr}, {expr} + {stride}, ..., {max}] (increasing {expr} with {stride} each time, not producing a value past {max}). When the maximum is one before the start the result is an empty list. When the maximum is more than one before the start this is an error. Examples:

Return a list with file and directory names in {directory}. You can also use glob() if you don't need to do complicated things, such as limiting the number of matches. The list will be sorted (case sensitive), see the {dict} argument below for changing the sort order.

Read file {fname} and return a List, each line of the file 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 {type} contains "b" binary mode is used:

  • When the last line ends in a NL an extra empty list item is added.
  • No CR characters are removed. Otherwise:
  • CR characters that appear before a NL are removed.
  • Whether the last line ends in a NL or not does not matter.
  • When 'encoding' is Unicode any UTF-8 byte order mark is removed from the text. When {max} is given this specifies the maximum number of lines to be read. Useful if you only want to check the first ten lines of a file:

{func} is called for every item in {object}, which can be a String, List or a Blob. {func} is called with two arguments: the result so far and current item. After processing all items the result is returned.

Returns the single letter name of the register being executed. Returns an empty string when no register is being executed. See @.

Returns the single letter name of the register being recorded. Returns an empty string when not recording. See q.

Return an item that represents a time value. The item is a list with items that depend on the system. In Vim 9 script list can be used. The item can be passed to reltimestr() to convert it to a string or reltimefloat() to convert to a Float.

Return a Float that represents the time value of {time}. Example:

Return a String that represents the time value of {time}. This is the number of seconds, a dot and the number of microseconds. Example:

Without {end}: Remove the item at {idx} from List {list} and return the item. With {end}: Remove items from {idx} to {end} (inclusive) and return a List with these items. When {idx} points to the same item as {end} a list with one item is returned. When {end} points to an item before {idx} this is an error. See list-index for possible values of {idx} and {end}. Returns zero on error. Example:

Rename the file by the name {from} to the name {to}. This should also work to move files across file systems. The result is a Number, which is 0 if the file was renamed successfully, and non-zero when the renaming failed. NOTE: If {to} exists it is overwritten without warning. This function is not available in the sandbox.

Repeat {expr} {count} times and return the concatenated result. Example:

On MS-Windows, when {filename} is a shortcut (a .lnk file), returns the path the shortcut points to in a simplified form. When {filename} is a symbolic link or junction point, return the full path to the target. If the target of junction is removed, return {filename}. On Unix, repeat resolving symbolic links in all path components of {filename} and return the simplified result. To cope with link cycles, resolving of symbolic links is stopped after 100 iterations. On other systems, return the simplified {filename}. The simplification step is done as by simplify(). resolve() keeps a leading path component specifying the current directory (provided the result is still a relative path name) and also keeps a trailing path separator.

Reverse the order of items in {object} in-place. {object} can be a List or a Blob. Returns {object}. Returns zero if {object} is not a List or a Blob. If you want an object to remain unmodified make a copy first:

Round off {expr} to the nearest integral value and return it as a Float. If {expr} lies halfway between two integral values, then use the larger one (away from zero). {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Evaluate Ruby expression {expr} and return its result converted to Vim data structures. Numbers, floats and strings are returned as they are (strings are copied though). Arrays are represented as Vim List type. Hashes are represented as Vim Dictionary type. Other objects are represented as strings resulted from their "Object#to_s" method. Note that in a :def function local variables are not visible to {expr}.

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. Returns -1 when row or col is out of range.

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 command line. The top left position is row one, column one The character excludes composing characters. For double-byte encodings it may only be the first byte. This is mainly to be used for testing. Returns -1 when row or col is out of range.

The result is a List of Numbers. The first number is the same as what screenchar() returns. Further numbers are composing characters on top of the base character. This is mainly to be used for testing. Returns an empty List when row or col is out of range.

The result is a Number, which is the current screen column of the cursor. The leftmost column has number 1. This function is mainly used for testing.

The result is a Dict with the screen position of the text character in window {winid} at buffer line {lnum} and column {col}. {col} is a one-based byte index. The Dict has these members: row screen row col first screen column endcol last screen column curscol cursor screen column If the specified position is not visible, all values are zero. The "endcol" value differs from "col" when the character occupies more than one screen cell. E.g. for a Tab "col" can be 1 and "endcol" can be 8. The "curscol" value is where the cursor would be placed. For a Tab it would be the same as "endcol", while for a double width character it would be the same as "col". The |conceal| feature is ignored here, the column numbers are as if 'conceallevel' is zero. You can set the cursor to the right position and use |screencol()| to get the value with |conceal| taken into account. If the position is in a closed fold the screen position of the first character is returned, {col} is not used. Returns an empty Dict if {winid} is invalid.

The result is a Number, which is the current screen row of the cursor. The top line has number one. This function is mainly used for testing. Alternatively you can use winline().

The result is a String that contains the base character and any composing characters at position [row, col] on the screen. This is like screenchars() but returning a String with the characters. This is mainly to be used for testing. Returns an empty String when row or col is out of range.

Search for regexp pattern {pattern}. The search starts at the cursor position (you can use cursor() to set it).

Get or update the last search count, like what is displayed without the "S" flag in 'shortmess'. This works even if 'shortmess' does contain the "S" flag.

Search for the declaration of {name}.

Search for the match of a nested start-end pair. This can be used to find the "endif" that matches an "if", while other if/endif pairs in between are ignored. The search starts at the cursor. The default is to search forward, include 'b' in {flags} to search backward. If a match is found, the cursor is positioned at it and the line number is returned. If no match is found 0 or -1 is returned and the cursor doesn't move. No error message is given.

Same as searchpair(), but returns a List with the line and column position of the match. The first element of the List is the line number and the second element is the byte index of the column position of the match. If no match is found, returns [0, 0].

Same as search(), but returns a List with the line and column position of the match. The first element of the List is the line number and the second element is the byte index of the column position of the match. If no match is found, returns [0, 0]. Example:

Return a list of available server names, one per line. When there are no servers or the information is not available an empty string is returned. See also clientserver. only available when compiled with the +clientserver feature Example:

Set line {lnum} to {text} in buffer {buf}. This works like |setline()| for the specified buffer.

Set option or local variable {varname} in buffer {buf} to {val}. This also works for a global or local window option, but it doesn't work for a global or local window variable. For a local window option the global value is unchanged. For the use of {buf}, see bufname() above. The {varname} argument is a string. Note that the variable name without "b:" must be used. Examples:

Specify overrides for cell widths of character ranges. This tells Vim how wide characters are, counted in screen cells. This overrides 'ambiwidth'. Example:

Same as setpos() but uses the specified column number as the character index instead of the byte index in the line.

Set the current character search information to {dict}, which contains one or more of the following entries:

Set the command line to {str} and set the cursor position to {pos}. If {pos} is omitted, the cursor is positioned after the text. Returns 0 when successful, 1 when not editing the command line.

Set the cursor position in the command line to byte position {pos}. The first position is 1. Use getcmdpos() to obtain the current position. Only works while editing the command line, thus you must use c_CTRL-\_e, c_CTRL-R_= or c_CTRL-R_CTRL-R with '='. For c_CTRL-\_e and c_CTRL-R_CTRL-R with '=' the position is set after the command line is set to the expression. For c_CTRL-R_= it is set after evaluating the expression but before inserting the resulting text. When the number is too big the cursor is put at the end of the line. A number smaller than one has undefined results. Returns 0 when successful, 1 when not editing the command line.

Same as cursor() but uses the specified column number as the character index instead of the byte index in the line.

Set environment variable {name} to {val}. Example:

Set the file permissions for {fname} to {mode}. {mode} must be a string with 9 characters. It is of the form "rwxrwxrwx", where each group of "rwx" flags represent, in turn, the permissions of the owner of the file, the group the file belongs to, and other users. A '-' character means the permission is off, any other character means on. Multi-byte characters are not supported.

Set line {lnum} of the current buffer to {text}. To insert lines use |append()|. To set lines in another buffer use |setbufline()|. Any text properties in {lnum} are cleared.

Create or replace or add to the location list for window {nr}. {nr} can be the window number or the window-ID. When {nr} is zero the current window is used.

Restores a list of matches saved by getmatches() for the current window. Returns 0 if successful, otherwise -1. All current matches are cleared before the list is restored. See example for getmatches(). If {win} is specified, use the window with this number or window ID instead of the current window.

Set the position for String {expr}. Possible values: . the cursor 'x mark x {list} must be a |List| with four or five numbers: [bufnum, lnum, col, off] [bufnum, lnum, col, off, curswant]

Create or replace or add to the quickfix list.

Set the register {regname} to {value}. If {regname} is "" or "@", the unnamed register '"' is used. The {regname} argument is a string. In Vim9-script {regname} must be one character.

Set tab-local variable {varname} to {val} in tab page {tabnr}. t:var The {varname} argument is a string. Note that autocommands are blocked, side effects may not be triggered, e.g. when setting 'filetype'. Note that the variable name without "t:" must be used. Tabs are numbered starting with one. This function is not available in the sandbox.

Set option or local variable {varname} in window {winnr} to {val}. Tabs are numbered starting with one. For the current tabpage use setwinvar(). {winnr} can be the window number or the window-ID. When {winnr} is zero the current window is used. Note that autocommands are blocked, side effects may not be triggered, e.g. when setting 'filetype' or 'syntax'. This also works for a global or local buffer option, but it doesn't work for a global or local buffer variable. For a local buffer option the global value is unchanged. Note that the variable name without "w:" must be used. Examples:

Modify the tag stack of the window {nr} using {dict}. {nr} can be the window number or the window-ID.

Like settabwinvar() for the current tab page. Examples:

Returns a String with 64 hex characters, which is the SHA256 checksum of {string}.

Escape {string} for use as a shell command argument. When the 'shell' contains powershell (MS-Windows) or pwsh (MS-Windows, Linux, and macOS) then it will enclose {string} in single quotes and will double up all internal single quotes. On MS-Windows, when 'shellslash' is not set, it will enclose {string} in double quotes and double all double quotes within {string}. Otherwise it will enclose {string} in single quotes and replace all "'" with "'''".

Returns the effective value of 'shiftwidth'. This is the 'shiftwidth' value unless it is zero, in which case it is the 'tabstop' value. This function was introduced with patch 7.3.694 in 2012, everybody should have it by now (however it did not allow for the optional {col} argument until 8.1.542).

Simplify the file name as much as possible without changing the meaning. Shortcuts (on MS-Windows) or symbolic links (on Unix) are not resolved. If the first path component in {filename} designates the current directory, this will be valid for the result as well. A trailing path separator is not removed either. On Unix "//path" is unchanged, but "///path" is simplified to "/path" (this follows the Posix standard). Example:

Return the sine of {expr}, measured in radians, as a Float. {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Return the hyperbolic sine of {expr} as a Float in the range [-inf, inf]. {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Sort the items in {list} in-place. Returns {list}.

Return the sound-folded equivalent of {word}. Uses the first language in 'spelllang' for the current window that supports soundfolding. 'spell' must be set. When no sound folding is possible the {word} is returned unmodified. This can be used for making spelling suggestions. Note that the method can be quite slow.

Without argument: The result is the badly spelled word under or after the cursor. The cursor is moved to the start of the bad word. When no bad word is found in the cursor line the result is an empty string and the cursor doesn't move.

Return a List with spelling suggestions to replace {word}. When {max} is given up to this number of suggestions are returned. Otherwise up to 25 suggestions are returned.

Make a List out of {string}. When {pattern} is omitted or empty each white-separated sequence of characters becomes an item. Otherwise the string is split where {pattern} matches, removing the matched characters. 'ignorecase' is not used here, add \c to ignore case. /\c When the first or last item is empty it is omitted, unless the {keepempty} argument is given and it's non-zero. Other empty items are kept when {pattern} matches at least one character or when {keepempty} is non-zero. Example:

Return the non-negative square root of Float {expr} as a Float. {expr} must evaluate to a Float or a Number. When {expr} is negative the result is NaN (Not a Number). Returns 0.0 if {expr} is not a Float or a Number. Examples:

Initialize seed used by rand():

  • If {expr} is not given, seed values are initialized by reading from /dev/urandom, if possible, or using time(NULL) a.k.a. epoch time otherwise; this only has second accuracy.
  • If {expr} is given it must be a Number. It is used to initialize the seed values. This is useful for testing or when a predictable sequence is intended.

Convert String {string} to a Float. This mostly works the same as when using a floating point number in an expression, see floating-point-format. But it's a bit more permissive. E.g., "1e40" is accepted, while in an expression you need to write "1.0e40". The hexadecimal form "0x123" is also accepted, but not others, like binary or octal. When {quoted} is present and non-zero then embedded single quotes before the dot are ignored, thus "1'000.0" is a thousand. Text after the number is silently ignored. The decimal point is always '.', no matter what the locale is set to. A comma ends the number: "12,345.67" is converted to 12.0. You can strip out thousands separators with substitute():

Return a list containing the number values which represent each character in String {string}. Examples:

Convert string {string} to a number. {base} is the conversion base, it can be 2, 8, 10 or 16. When {quoted} is present and non-zero then embedded single quotes are ignored, thus "1'000'000" is a million.

Like strpart() but using character index and length instead of byte index and length. When {skipcc} is omitted or zero, composing characters are counted separately. When {skipcc} set to 1, Composing characters are ignored, similar to slice(). When a character index is used where a character does not exist it is omitted and counted as one character. For example:

The result is a Number, which is the number of characters in String {string}. When {skipcc} is omitted or zero, composing characters are counted separately. When {skipcc} set to 1, Composing characters are ignored. strcharlen() always does this.

The result is a Number, which is the number of display cells String {string} occupies on the screen when it starts at {col} (first column is zero). When {col} is omitted zero is used. Otherwise it is the screen column where to start. This matters for Tab characters. The option settings of the current window are used. This matters for anything that's displayed differently, such as 'tabstop' and 'display'. When {string} contains characters with East Asian Width Class Ambiguous, this function's return value depends on 'ambiwidth'. Returns zero on error. Also see strlen(), strwidth() and strchars().

The result is a String, which is a formatted date and time, as specified by the {format} string. The given {time} is used, or the current time if no time is given. The accepted {format} depends on your system, thus this is not portable! See the manual page of the C function strftime() for the format. The maximum length of the result is 80 characters. See also localtime(), getftime() and strptime(). The language can be changed with the :language command. Examples:

Get a Number corresponding to the character at {index} in {str}. This uses a zero-based character index, not a byte index. Composing characters are considered separate characters here. Use nr2char() to convert the Number to a String. Returns -1 if {index} is invalid. Also see strcharpart() and strchars().

The result is a Number, which gives the byte index in {haystack} of the first occurrence of the String {needle}. If {start} is specified, the search starts at index {start}. This can be used to find a second match:

Return {expr} converted to a String. If {expr} is a Number, Float, String, Blob or a composition of them, then the result can be parsed back with eval(). {expr} type result String 'string' (single quotes are doubled) Number 123 Float 123.123456 or 1.123456e8 Funcref function('name') Blob 0z00112233.44556677.8899 List [item, item] Dictionary {key: value, key: value}

The result is a Number, which is the length of the String {string} in bytes. If the argument is a Number it is first converted to a String. For other types an error is given and zero is returned. If you want to count the number of multibyte characters use strchars(). Also see len(), strdisplaywidth() and strwidth().

The result is a String, which is part of {src}, starting from byte {start}, with the byte length {len}. When {chars} is present and TRUE then {len} is the number of characters positions (composing characters are not counted separately, thus "1" means one base character and any following composing characters). To count {start} as characters instead of bytes use strcharpart().

The result is a Number, which is a unix timestamp representing the date and time in {timestring}, which is expected to match the format specified in {format}.

The result is a Number, which gives the byte index in {haystack} of the last occurrence of the String {needle}. When {start} is specified, matches beyond this index are ignored. This can be used to find a match before a previous match:

The result is a String, which is {string} with all unprintable characters translated into printable characters 'isprint'. Like they are shown in a window. Example:

The result is a Number, which is the number of display cells String {string} occupies. A Tab character is counted as one cell, alternatively use strdisplaywidth(). When {string} contains characters with East Asian Width Class Ambiguous, this function's return value depends on 'ambiwidth'. Returns zero on error. Also see strlen(), strdisplaywidth() and strchars().

Only for an expression in a :substitute command or substitute() function. Returns the {nr}'th submatch of the matched text. When {nr} is 0 the whole matched text is returned. Note that a NL in the string can stand for a line break of a multi-line match or a NUL character in the text. Also see sub-replace-expression.

The result is a String, which is a copy of {string}, in which the first match of {pat} is replaced with {sub}. When {flags} is "g", all matches of {pat} in {string} are replaced. Otherwise {flags} should be "".

The result is a dictionary, which holds information about the swapfile {fname}. The available fields are: version Vim version user user name host host name fname original file name pid PID of the Vim process that created the swap file mtime last modification time in seconds inode Optional: INODE number of the file dirty 1 if file was modified, 0 if not Note that "user" and "host" are truncated to at most 39 bytes. In case of failure an "error" item is added with the reason: Cannot open file: file not found or in accessible Cannot read file: cannot read first block Not a swap file: does not contain correct block ID Magic number mismatch: Info in first block is invalid

The result is the swap file path of the buffer {expr}. For the use of {buf}, see bufname() above. If buffer {buf} is the current buffer, the result is equal to :swapname (unless there is no swap file). If buffer {buf} has no swap file, returns an empty string.

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. {lnum} is used like with getline().
  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 replaced 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]

The result is a Number, which is the syntax ID at the position {lnum} and {col} in the current window. The syntax ID can be used with synIDattr() and synIDtrans() to obtain syntax information about text.

The result is a String, which is the {what} attribute of syntax ID {synID}. This can be used to obtain information about a syntax item. {mode} can be "gui", "cterm" or "term", to get the attributes for that mode. When {mode} is omitted, or an invalid value is used, the attributes for the currently active highlighting are used (GUI, cterm or term). Use synIDtrans() to follow linked highlight groups. {what} result "name" the name of the syntax item "fg" foreground color (GUI: color name used to set the color, cterm: color number as a string, term: empty string) "bg" background color (as with "fg") "font" font name (only available in the GUI) highlight-font "sp" special color for the GUI (as with "fg") highlight-guisp "ul" underline color for cterm: number as a string "fg#" like "fg", but for the GUI and the GUI is running the name in "#RRGGBB" form "bg#" like "fg#" for "bg" "sp#" like "fg#" for "sp" "bold" "1" if bold "italic" "1" if italic "reverse" "1" if reverse "inverse" "1" if inverse (= reverse) "standout" "1" if standout "underline" "1" if underlined "undercurl" "1" if undercurled "strike" "1" if strikethrough "nocombine" "1" if nocombine

The result is a Number, which is the translated syntax ID of {synID}. This is the syntax group ID of what is being used to highlight the character. Highlight links given with ":highlight link" are followed.

Return a List, which is the stack of syntax items at the position {lnum} and {col} in the current window. {lnum} is used like with getline(). Each item in the List is an ID like what synID() returns. The first item in the List is the outer region, following are items contained in that one. The last one is what synID() returns, unless not the whole item is highlighted or it is a transparent item. This function is useful for debugging a syntax file. Example that shows the syntax stack under the cursor:

Get the output of the shell command {expr} as a String. See systemlist() to get the output as a List.

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 there is no extra empty item when the result ends in a NL. Note that on MS-Windows you may get trailing CR characters.

The result is a List, where each item is the number of the buffer associated with each window in the current tab page. {arg} specifies the number of the tab page to be used. When omitted the current tab page is used. When {arg} is invalid the number zero is returned. To get a list of all buffers in all tabs use this:

The result is a Number, which is the number of the current tab page. The first tab page has number 1.

Like winnr() but for tab page {tabarg}. {tabarg} specifies the number of tab page to be used. {arg} is used like with winnr():

  • When omitted the current window number is returned. This is the window which will be used when going to this tab page.
  • When "$" the number of windows is returned.
  • When "#" the previous window nr is returned. Useful examples:

Returns a List with the file names used to search for tags for the current buffer. This is the 'tags' option expanded.

Returns a List of tags matching the regular expression {expr}.

Return the tangent of {expr}, measured in radians, as a Float in the range [-inf, inf]. {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

Return the hyperbolic tangent of {expr} as a Float in the range [-1, 1]. {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

The result is a String, which is the name of a file that doesn't exist. It can be used for a temporary file. The name is different for at least 26 consecutive calls. Example:

Return a list with information about timers. When {id} is given only information about this timer is returned. When timer {id} does not exist an empty list is returned. When {id} is omitted information about all timers is returned.

Pause or unpause a timer. A paused timer does not invoke its callback when its time expires. Unpausing a timer may cause the callback to be invoked almost immediately if enough time has passed.

Create a timer and return the timer ID.

Stop a timer. The timer callback will no longer be invoked. {timer} is an ID returned by timer_start(), thus it must be a Number. If {timer} does not exist there is no error.

Stop all timers. The timer callbacks will no longer be invoked. Useful if a timer is misbehaving. If there are no timers there is no error.

The result is a copy of the String given, with all uppercase characters turned into lowercase (just like applying gu to the string). Returns an empty string on error.

The result is a copy of the String given, with all lowercase characters turned into uppercase (just like applying gU to the string). Returns an empty string on error.

The result is a copy of the {src} string with all characters which appear in {fromstr} replaced by the character in that position in the {tostr} string. Thus the first character in {fromstr} is translated into the first character in {tostr} and so on. Exactly like the unix "tr" command. This code also deals with multibyte characters properly.

Return {text} as a String where any character in {mask} is removed from the beginning and/or end of {text}.

Return the largest integral value with magnitude less than or equal to {expr} as a Float (truncate towards zero). {expr} must evaluate to a Float or a Number. Returns 0.0 if {expr} is not a Float or a Number. Examples:

The result is a Number representing the type of {expr}. Instead of using the number directly, it is better to use the v:t_ variable that has the value: Number: 0 v:t_number String: 1 v:t_string Funcref: 2 v:t_func List: 3 v:t_list Dictionary: 4 v:t_dict Float: 5 v:t_float Boolean: 6 v:t_bool (v:false and v:true) None: 7 v:t_none (v:null and v:none) Job: 8 v:t_job Channel: 9 v:t_channel Blob: 10 v:t_blob For backward compatibility, this method can be used:

Return the name of the undo file that would be used for a file with name {name} when writing. This uses the 'undodir' option, finding directories that exist. It does not check if the undo file exists. {name} is always expanded to the full path, since that is what is used internally. If {name} is empty undofile() returns an empty string, since a buffer without a file name will not write an undo file. Useful in combination with :wundo and :rundo. When compiled without the +persistent_undo option this always returns an empty string.

Return the current state of the undo tree in a dictionary with the following items: "seq_last" The highest undo sequence number used. "seq_cur" The sequence number of the current position in the undo tree. This differs from "seq_last" when some changes were undone. "time_cur" Time last used for :earlier and related commands. Use strftime() to convert to something readable. "save_last" Number of the last file write. Zero when no write yet. "save_cur" Number of the current position in the undo tree. "synced" Non-zero when the last undo block was synced. This happens when waiting from input from the user. See undo-blocks. "entries" A list of dictionaries with information about undo blocks.

Remove second and succeeding copies of repeated adjacent {list} items in-place. Returns {list}. If you want a list to remain unmodified make a copy first:

Return a List with all the values of {dict}. The List is in arbitrary order. Also see items() and keys(). Returns zero if {dict} is not a Dict.

The result is a Number, which is the screen column of the file position given with {expr}. That is, the last screen position occupied by the character at that position, when the screen would be of unlimited width. When there is a at the position, the returned Number will be the column at the end of the . For example, for a in column 1, with 'ts' set to 8, it returns 8. |conceal| is ignored. For the byte position use |col()|. For the use of {expr} see |col()|. When 'virtualedit' is used {expr} can be [lnum, col, off], where "off" is the offset in screen columns from the start of the character. E.g., a position within a or after the last character. When "off" is omitted zero is used. When Virtual editing is active in the current mode, a position beyond the end of the line can be returned. Also see |'virtualedit'| The accepted positions are: . the cursor position $ the end of the cursor line (the result is the number of displayed characters in the cursor line plus one) 'x position of mark x (if the mark is not set, 0 is returned) v In Visual mode: the start of the Visual area (the cursor is the end). When not in Visual mode returns the cursor position. Differs from |'<| in that it's updated right away. Note that only marks in the current file can be used. Examples: virtcol(".") with text "foo^Lbar", with cursor on the "L", returns 5 virtcol("$") with text "fooLbar", returns 9 virtcol("'t") with text " there", with 't at 'h', returns 6 The first column is 1. 0 is returned for an error. A more advanced example that echoes the maximum length of all lines: echo max(map(range(1, line('$')), "virtcol([v:val, '$'])")) Can also be used as a |method|: GetPos()->virtcol()

The result is a Number, which is the byte index of the character in window {winid} at buffer line {lnum} and virtual column {col}.

The result is a String, which describes the last Visual mode used in the current buffer. Initially it returns an empty string, but once Visual mode has been used, it returns "v", "V", or "<CTRL-V>" (a single CTRL-V character) for character-wise, line-wise, or block-wise Visual mode respectively. Example:

Returns TRUE when the wildmenu is active and FALSE otherwise. See 'wildmenu' and 'wildmode'. This can be used in mappings to handle the 'wildcharm' option gracefully. (Makes only sense with mapmode-c mappings).

Like execute() but in the context of window {id}. The window will temporarily be made the current window, without triggering autocommands or changing directory. When executing {command} autocommands will be triggered, this may have unexpected side effects. Use :noautocmd if needed. Example:

Returns a List with window-IDs for windows that contain buffer {bufnr}. When there is none the list is empty.

Get the window-ID for the specified window. When {win} is missing use the current window. With {win} this is the window number. The top window has number 1. Without {tab} use the current tab, otherwise the tab with number {tab}. The first tab has number one. Return zero if the window cannot be found.

Return the type of the window: "autocmd" autocommand window. Temporary window used to execute autocommands. "command" command-line window cmdwin (empty) normal window "loclist" location-list-window "popup" popup window popup "preview" preview window preview-window "quickfix" quickfix-window "unknown" window {nr} not found

Go to window with ID {expr}. This may also change the current tabpage. Return TRUE if successful, FALSE if the window cannot be found.

Return a list with the tab number and window number of window with ID {expr}: [tabnr, winnr]. Return [0, 0] if the window cannot be found.

Return the window number of window with ID {expr}. Return 0 if the window cannot be found in the current tabpage.

Move window {nr}'s vertical separator (i.e., the right border) by {offset} columns, as if being dragged by the mouse. {nr} can be a window number or window-ID. A positive {offset} moves right and a negative {offset} moves left. Moving a window's vertical separator will change the width of the window and the width of other windows adjacent to the vertical separator. The magnitude of movement may be smaller than specified (e.g., as a consequence of maintaining 'winminwidth'). Returns TRUE if the window can be found and FALSE otherwise. This will fail for the rightmost window and a full-width window, since it has no separator on the right.

Move window {nr}'s status line (i.e., the bottom border) by {offset} rows, as if being dragged by the mouse. {nr} can be a window number or window-ID. A positive {offset} moves down and a negative {offset} moves up. Moving a window's status line will change the height of the window and the height of other windows adjacent to the status line. The magnitude of movement may be smaller than specified (e.g., as a consequence of maintaining 'winminheight'). Returns TRUE if the window can be found and FALSE otherwise.

Return the screen position of window {nr} as a list with two numbers: [row, col]. The first window always has position [1, 1], unless there is a tabline, then it is [2, 1]. {nr} can be the window number or the window-ID. Use zero for the current window. Returns [0, 0] if the window cannot be found in the current tabpage.

Move the window {nr} to a new split of the window {target}. This is similar to moving to {target}, creating a new window using :split but having the same contents as window {nr}, and then closing {nr}.

The result is a Number, which is the number of the buffer associated with window {nr}. {nr} can be the window number or the window-ID. When {nr} is zero, the number of the buffer in the current window is returned. When window {nr} doesn't exist, -1 is returned. Example:

The result is a Number, which is the virtual column of the cursor in the window. This is counting screen cells from the left side of the window. The leftmost column is one.

The result is a String. For MS-Windows it indicates the OS version. E.g, Windows 10 is "10.0", Windows 8 is "6.2", Windows XP is "5.1". For non-MS-Windows systems the result is an empty string.

The result is a Number, which is the height of window {nr}. {nr} can be the window number or the window-ID. 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:

The result is a nested List containing the layout of windows in a tabpage.

The result is a Number, which is the screen line of the cursor in the window. This is counting screen lines from the top of the window. The first line is one. If the cursor was moved the view on the file will be updated first, this may cause a scroll.

The result is a Number, which is the number of the current window. The top window has number 1. Returns zero for a popup window.

Returns a sequence of :resize commands that should restore the current window sizes. Only works properly when no windows are opened or closed and the current window and tab page is unchanged. Example:

Uses the Dictionary returned by winsaveview() to restore the view of the current window. Note: The {dict} does not have to contain all values, that are returned by winsaveview(). If values are missing, those settings won't be restored. So you can use:

Returns a Dictionary that contains information to restore the view of the current window. Use winrestview() to restore the view. This is useful if you have a mapping that jumps around in the buffer and you want to go back to the original view. This does not save fold information. Use the 'foldenable' option to temporarily switch off folding, so that folds are not opened when moving around. This may have side effects. The return value includes: lnum cursor line number col cursor column (Note: the first column zero, as opposed to what getcurpos() returns) coladd cursor column offset for 'virtualedit' curswant column for vertical movement (Note: the first column is zero, as opposed to what getcurpos() returns). After $ command it will be a very large number equal to v:maxcol. topline first line in the window topfill filler lines, only in diff mode leftcol first column displayed; only used when 'wrap' is off skipcol columns skipped Note that no option values are saved.

The result is a Number, which is the width of window {nr}. {nr} can be the window number or the window-ID. When {nr} is zero, the width of the current window is returned. When window {nr} doesn't exist, -1 is returned. An existing window always has a width of zero or more. Examples:

The result is a dictionary of byte/chars/word statistics for the current buffer. This is the same info as provided by g_CTRL-G The return value includes: bytes Number of bytes in the buffer chars Number of chars in the buffer words Number of words in the buffer cursor_bytes Number of bytes before cursor position (not in Visual mode) cursor_chars Number of chars before cursor position (not in Visual mode) cursor_words Number of words before cursor position (not in Visual mode) visual_bytes Number of bytes visually selected (only in Visual mode) visual_chars Number of chars visually selected (only in Visual mode) visual_words Number of words visually selected (only in Visual mode)

When {object} is a List write it to file {fname}. Each list item is separated with a NL. Each list item must be a String or Number. All NL characters are replaced with a NUL character. Inserting CR characters needs to be done before passing {list} to writefile().

Bitwise XOR on the two arguments. The arguments are converted to a number. A List, Dict or Float argument causes an error. Also see and() and or(). Example:

Type Aliases

Builtin completion

Type of getpos() or setpos() result.

Type of screenpos() result.