nixeovim/modules/vim/options.nix

4233 lines
137 KiB
Nix

{ lib }:
let
inherit (builtins) mapAttrs;
mkVimOptOption =
key:
{ type
, vimDefault ? null
, default ? null
, description ? ""
, extraHelp ? [ ]
, apply ? null
}:
lib.mkOption ({
type = lib.types.nullOr type;
inherit default;
defaultText = lib.literalExpression (builtins.toJSON vimDefault);
description = lib.concatLines (
[ description "" ]
++ map (help: "`:help ${help}") ([ key ] ++ extraHelp)
);
} // lib.optionalAttrs (apply != null) { inherit apply; });
sharedGlobalOrWindow = with lib.types; {
fillchars = {
type = extCommasEnum [
"stl"
"stlnc"
"wbr"
"horiz"
"horizup"
"horizdown"
"vert"
"vertleft"
"vertright"
"verthoriz"
"fold"
"foldopen"
"foldclose"
"foldsep"
"diff"
"msgsep"
"eob"
"lastline"
];
vimDefault = [ ];
description = ''
Characters to fill the statuslines, vertical separators and special lines in the window.
'';
};
scrolloff = {
type = number;
vimDefault = 0;
description = ''
Minimal number of screen lines to keep above and below the cursor.
This will make some context visible around where you are working. If
you set it to a very large value (999) the cursor line will always be
in the middle of the window (except at the start or end of the file or
when long lines wrap).
'';
extraHelp = [ "sidescrolloff" ];
};
showbreak = {
type = str;
vimDefault = "";
description = ''
String to put at the start of lines that have been wrapped.
Only printable single-cell characters are allowed, excluding <Tab> and
comma (in a future version the comma might be used to separate the
part that is shown at the end and at the start of a line).
'';
};
sidescrolloff = {
type = number;
vimDefault = 0;
description = ''
The minimal number of screen columns to keep to the left and to the
right of the cursor if 'nowrap' is set. Setting this option to a
value greater than 0 while having |'sidescroll'| also at a non-zero
value makes some context visible in the line you are scrolling in
horizontally (except at beginning of the line). Setting this option
to a large value (like 999) has the effect of keeping the cursor
horizontally centered in the window, as long as one does not come too
close to the beginning of the line.
'';
extraHelp = [ "nowrap" "sidescroll" "scrolloff" ];
};
statusline = {
type = str;
vimDefault = "";
description = ''
When non-empty, this option determines the content of the status line.
'';
extraHelp = [ "status-line" ];
};
virtualedit = {
type = extCommasEnum [ "block" "insert" "all" "onemore" "none" "NONE" ];
vimDefault = [ ];
description = ''
Virtual editing means that the cursor can be positioned where there is
no actual character. This can be halfway into a tab or beyond the end
of the line. Useful for selecting a rectangle in Visual mode and
editing a table.
'';
};
winbar = {
type = str;
vimDefault = "";
description = ''
When non-empty, this option enables the window bar and determines its
contents. The window bar is a bar that's shown at the top of every
window with it enabled. The value of 'winbar' is evaluated like with
'statusline'.
When changing something that is used in 'winbar' that does not trigger
it to be updated, use |:redrawstatus|.
Floating windows do not use the global value of 'winbar'. The
window-local value of 'winbar' must be set for a floating window to
have a window bar.
'';
extraHelp = [ "statusline" ":redrawstatus" ];
};
};
sharedGlobalOrBuffer = with lib.types; {
autoread = {
type = bool;
vimDefault = true;
description = ''
When a file has been detected to have been changed outside of Vim and
it has not been changed inside of Vim, automatically read it again.
When the file has been deleted this is not done, so you have the text
from before it was deleted. When it appears again then it is read.
'';
extraHelp = [ "timestamp" ];
};
backupcopy = {
type = extCommasEnum [ "yes" "no" "auto" "breaksymlink" "breakhardlink" ];
vimDefault = [ "auto" ];
description = ''
When writing a file and a backup is made, this option tells how it's
done. This is a comma-separated list of words.
'';
};
define = {
type = str;
vimDefault = "";
description = ''
Pattern to be used to find a macro definition.
'';
};
dictionary = {
type = listOf (either str path);
vimDefault = [ ];
description = ''
List of file names, separated by commas, that are used to lookup words
for keyword completion commands |i_CTRL-X_CTRL-K|. Each file should
contain a list of words. This can be one word per line, or several
words per line, separated by non-keyword characters (white space is
preferred). Maximum line length is 510 bytes.
'';
};
equalprg = {
type = str;
vimDefault = "";
description = ''
External program to use for "=" command. When this option is empty
the internal formatting functions are used; either 'lisp', 'cindent'
or 'indentexpr'.
'';
};
formatprg = {
type = str;
vimDefault = "";
description = ''
The name of an external program that will be used to format the lines
selected with the |gq| operator. The program must take the input on
stdin and produce the output on stdout.
'';
};
grepprg = {
type = str;
vimDefault = ''
default "grep -n ",
Unix: "grep -n $* /dev/null"
'';
description = ''
Program to use for the |:grep| command. This option may contain '%'
and '#' characters, which are expanded like when used in a command-line.
'';
extraHelp = [
":grep"
":vimgrep"
":lvimgrep"
":grepadd"
":vimgrepadd"
":lgrepadd"
":lvimgrepadd"
];
};
include = {
type = str;
vimDefault = ''^\s*#\s*include'';
description = ''
Pattern to be used to find an include command.
'';
};
keywordprg = {
type = str;
vimDefault = ''
Windows: ":help"
otherwise: ":Man"
'';
description = ''
Program to use for the |K| command.
'';
};
lispwords = {
type = listOf str;
vimDefault = is very long;
description = ''
list of words that influence the Lisp indenting when
enabled with the |'lisp'| option.
'';
};
makeencoding = {
type = str;
vimDefault = "";
description = ''
Encoding used for reading the output of external commands. When empty,
encoding is not converted.
This is used for `:make`, `:lmake`, `:grep`, `:lgrep`, `:grepadd`,
`:lgrepadd`, `:cfile`, `:cgetfile`, `:caddfile`, `:lfile`, `:lgetfile`,
and `:laddfile`.
'';
};
makeprg = {
type = str;
vimDefault = "make";
description = ''
Program to use for the ":make" command. See |:make_makeprg|.
This option may contain '%' and '#' characters (see |:_%| and |:_#|),
which are expanded to the current and alternate file name. Use |::S|
to escape file names in case they contain special characters.
'';
extraHelp = [
":mka_makeprg"
":_%"
":_#"
"::S"
];
};
path = {
type = extCommas;
vimDefault = ''
on Unix: ".,/usr/include,,"
other systems: ".,,"
'';
description = ''
This is a list of directories which will be searched when using the
|gf|, [f, ]f, ^Wf, |:find|, |:sfind|, |:tabfind| and other commands,
provided that the file being searched for has a relative path (not
starting with "/", "./" or "../"). The directories in the 'path'
option may be relative or absolute.
'';
};
tagcase = {
type = enum [ "followic" "followscs" "ignore" "match" "smart" ];
vimDefault = "followic";
description = ''
This option specifies how case is handled when searching the tags
file:
followic Follow the 'ignorecase' option
followscs Follow the 'smartcase' and 'ignorecase' options
ignore Ignore case
match Match case
smart Ignore case unless an upper case letter is used
'';
};
tags = {
type = extCommas;
vimDefault = [ "./tags;" "tags" ];
description = ''
Filenames for the tag command, separated by spaces or commas. To
include a space or comma in a file name, precede it with a backslash
(see |option-backslash| about including spaces and backslashes).
When a file name starts with "./", the '.' is replaced with the path
of the current file. But only when the 'd' flag is not included in
'cpoptions'. Environment variables are expanded |:set_env|. Also see
|tags-option|.
"*", "**" and other wildcards can be used to search for tags files in
a directory tree. See |file-searching|. E.g., "/lib/**/tags" will
find all files named "tags" below "/lib". The filename itself cannot
contain wildcards, it is used as-is. E.g., "/lib/**/tags?" will find
files called "tags?".
The |tagfiles()| function can be used to get a list of the file names
actually used.
'';
extraHelp = [ "tags-option" "file-searching" "tagfiles()" ];
};
thesaurus = {
type = listOf (either str path);
vimDefault = [ ];
description = ''
List of file names, separated by commas, that are used to lookup words
for thesaurus completion commands |i_CTRL-X_CTRL-T|. See
|compl-thesaurus|.
This option is not used if 'thesaurusfunc' is set, either for the
buffer or globally.
To include a comma in a file name precede it with a backslash. Spaces
after a comma are ignored, otherwise spaces are included in the file
name.
'';
extraHelp = [ "i_CTRL-X_CTRL-T" "compl-thesaurus" "thesaurusfunc" ];
};
thesaurusfunc = {
type = str;
vimDefault = "";
description = ''
This option specifies a function to be used for thesaurus completion
with CTRL-X CTRL-T
'';
extraHelp = [ "i_CTRL-X_CTRL-T" "compl-thesaurusfunc" ];
};
undolevels = {
type = number;
vimDefault = 1000;
description = ''
Maximum number of changes that can be undone. Since undo information
is kept in memory, higher numbers will cause more memory to be used.
Nevertheless, a single change can already use a large amount of memory.
Set to 0 for Vi compatibility: One level of undo and "u" undoes
itself
But you can also get Vi compatibility by including the 'u' flag in
'cpoptions', and still be able to use CTRL-R to repeat undo.
Also see |undo-two-ways|.
Set to -1 for no undo at all. You might want to do this only for the
current buffer
This helps when you run out of memory for a single change.
'';
extraHelp = [ "cpoptions" "undo-two-ways" "clear-undo" ];
};
};
global = with lib.types; sharedGlobalOrWindow // sharedGlobalOrBuffer // {
allowrevins = {
type = bool;
vimDefault = false;
description = ''
Allow CTRL-_ in Insert and Command-line mode. This is default off, to
avoid that users that accidentally type CTRL-_ instead of SHIFT-_ get
into reverse Insert mode, and don't know how to get out. See
'';
};
ambiwidth = {
type = enum [ "single" "double" ];
vimDefault = "single";
description = ''
Tells Vim what to do with characters with East Asian Width Class
Ambiguous (such as Euro, Registered Sign, Copyright Sign, Greek
letters, Cyrillic letters).
'';
};
autochdir = {
type = bool;
vimDefault = false;
description = ''
When on, Vim will change the current working directory whenever you
open a file, switch buffers, delete a buffer or open/close a window.
It will change to the directory containing the file which was opened
or selected. When a buffer has no name it also has no directory, thus
the current directory won't change when navigating to it.
Note: When this option is on some plugins may not work.
'';
};
arabicshape = {
type = bool;
vimDefault = false;
description = ''
When on and 'termbidi' is off, the required visual character
corrections that need to take place for displaying the Arabic language
take effect.
'';
};
autowrite = {
type = bool;
vimDefault = false;
description = ''
Write the contents of the file, if it has been modified, on each
`:next`, `:rewind`, `:last`, `:first`, `:previous`, `:stop`,
`:suspend`, `:tag`, `:!`, `:make`, CTRL-] and CTRL-^ command; and when
a `:buffer`, CTRL-O, CTRL-I, '{A-Z0-9}, or `{A-Z0-9} command takes one
to another file.
'';
};
autowriteall = {
type = bool;
vimDefault = false;
description = ''
Like 'autowrite', but also used for commands ":edit", ":enew", ":quit",
":qall", ":exit", ":xit", ":recover" and closing the Vim window.
Setting this option also implies that Vim behaves like 'autowrite' has
been set.
'';
};
background = {
type = str;
vimDefault = "dark";
description = ''
When set to "dark" or "light", adjusts the default color groups for
that background type. The |TUI| or other UI sets this on startup
(triggering |OptionSet|) if it can detect the background color.
This option does NOT change the background color, it tells Nvim what
the "inherited" (terminal/GUI) background looks like.
See |:hi-normal| if you want to set the background color explicitly.
When a color scheme is loaded (the "g:colors_name" variable is set)
setting 'background' will cause the color scheme to be reloaded. If
the color scheme adjusts to the value of 'background' this will work.
However, if the color scheme sets 'background' itself the effect may
be undone. First delete the "g:colors_name" variable when needed.
'';
};
backspace = {
type = extCommasEnum [ "indent" "eol" "start" "nostop" ];
vimDefault = [ "indent" "eol" "start" ];
description = ''
Influences the working of <BS>, <Del>, CTRL-W and CTRL-U in Insert
mode. This is a list of items, separated by commas. Each item allows
a way to backspace over something:
'';
};
backup = {
type = bool;
vimDefault = false;
description = ''
Make a backup before overwriting a file. Leave it around after the
file has been successfully written. If you do not want to keep the
backup file, but you do want a backup while the file is being
written, reset this option and set the 'writebackup' option (this is
the default). If you do not want a backup file at all reset both
options (use this if your file system is almost full). See the
|backup-table| for more explanations.
'';
extraHelp = [ "backup-table" ];
};
backupdir = {
type = listOf (either str path);
vimDefault = [ "." "$XDG_STATE_HOME/nvim/backup//" ];
description = ''
List of directories for the backup file, separated with commas.
'';
};
backupext = {
type = str;
vimDefault = "~";
description = ''
str which is appended to a file name to make the name of the
backup file. The default is quite unusual, because this avoids
accidentally overwriting existing files with a backup file. You might
prefer using ".bak", but make sure that you don't have files with
".bak" that you want to keep.
Only normal file name characters can be used; "/\*?[|<>" are illegal.
'';
};
backupskip = {
type = listOf (either str path);
vimDefault = ''
default: "$TMPDIR/*,$TMP/*,$TEMP/*"
Unix: "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*"
Mac: "/private/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*"
'';
description = ''
A list of file patterns. When one of the patterns matches with the
name of the file which is written, no backup file is created. Both
the specified file name and the full path name of the file are used.
The pattern is used like with |:autocmd|, see |autocmd-pattern|.
Watch out for special characters, see |option-backslash|.
When $TMPDIR, $TMP or $TEMP is not defined, it is not used for the
default value. "/tmp/*" is only used for Unix.
'';
};
belloff = {
type = extCommasEnum [
"all"
"backspace"
"cursor"
"complete"
"copy"
"ctrlg"
"error"
"esc"
"hangul"
"lang"
"mess"
"showmatch"
"operator"
"register"
"shell"
"spell"
"willmode"
];
vimDefault = [ "all" ];
description = ''
Specifies for which events the bell will not be rung. It is a comma-
separated list of items. For each item that is present, the bell
will be silenced. This is most useful to specify specific events in
insert mode to be silenced.
item | meaning when present
--------------------------------------------------------------------
all | All events.
backspace | When hitting <BS> or <Del> and deleting results in an error.
cursor | Fail to move around using the cursor keys or
| <PageUp>/<PageDown> in |Insert-mode|.
complete | Error occurred when using |i_CTRL-X_CTRL-K| or
| |i_CTRL-X_CTRL-T|.
copy | Cannot copy char from insert mode using |i_CTRL-Y| or
| |i_CTRL-E|.
ctrlg | Unknown Char after <C-G> in Insert mode.
error | Other Error occurred (e.g. try to join last line)
| (mostly used in |Normal-mode| or |Cmdline-mode|).
esc | hitting <Esc> in |Normal-mode|.
hangul | Ignored.
lang | Calling the beep module for Lua/Mzscheme/TCL.
mess | No output available for |g<|.
showmatch | Error occurred for 'showmatch' function.
operator | Empty region error |cpo-E|.
register | Unknown register after <C-R> in |Insert-mode|.
shell | Bell from shell output |:!|.
spell | Error happened on spell suggest.
wildmode | More matches in |cmdline-completion| available
| (depends on the 'wildmode' setting).
'';
};
breakat = {
type = str;
vimDefault = " ^I!@*-+;:,./?";
description = ''
This option lets you choose which characters might cause a line
break if 'linebreak' is on. Only works for ASCII characters.
'';
};
browsedir = {
type = either path (enum [ "last" "buffer" "current" ]);
vimDefault = "last";
description = ''
Which directory to use for the file browser:
last Use same directory as with last file browser, where a file was opened or saved.
buffer Use the directory of the related buffer.
current Use the current directory.
{path} Use the specified directory
'';
};
casemap = {
type = extCommasEnum [ "internal" "keepascii" ];
vimDefault = [ "internal" "keepascii" ];
description = ''
Specifies details about changing the case of letters. It may contain
these words, separated by a comma:
- internal - Use internal case mapping functions, the current locale does not change the case
mapping. When "internal" is omitted, the towupper() and towlower() system library functions are
used when available.
- keepascii - For the ASCII characters (0x00 to 0x7f) use the US case mapping, the current locale
is not effective. This probably only matters for Turkish.
'';
};
cedit = {
type = str;
vimDefault = lib.mod.ctrl "F";
description = ''
The key used in Command-line Mode to open the command-line window.
Only non-printable keys are allowed.
'';
};
charconvert = {
type = str;
vimDefault = "";
description = ''
An expression that is used for character encoding conversion. It is
evaluated when a file that is to be read or has been written has a
different encoding from what is desired.
'';
};
clipboard = {
type = let t = enum [ "unnamed" "unnamedplus" ]; in either t (listOf t);
vimDefault = [ ];
description = ''
This option is a list of comma-separated names.
'';
};
cmdheight = {
type = number;
vimDefault = 1;
description = ''
Number of screen lines to use for the command-line. Helps avoiding |hit-enter| prompts.
'';
};
cmdwinheight = {
type = number;
vimDefault = 7;
description = ''
Number of screen lines to use for the command-line window.
'';
extraHelp = [ "cmdwin" ];
};
completeopt = {
type = extCommasEnum [
"menu"
"menuone"
"longest"
"preview"
"noinsert"
"noselect"
];
vimDefault = [ "menu" "preview" ];
description = ''
A comma-separated list of options for Insert mode completion |ins-completion|.
'';
};
confirm = {
type = bool;
vimDefault = false;
description = ''
When 'confirm' is on, certain operations that would normally
fail because of unsaved changes to a buffer, e.g. ":q" and ":e",
instead raise a dialog asking if you wish to save the current
file(s). You can still use a ! to unconditionally |abandon| a buffer.
If 'confirm' is off you can still activate confirmation for one
command only (this is most useful in mappings) with the |:confirm|
command.
'';
};
cpoptions = {
type = str;
vimDefault = true;
description = ''
A sequence of single character flags. When a character is present
this indicates Vi-compatible behavior. This is used for things where
not being Vi-compatible is mostly or sometimes preferred.
'cpoptions' stands for "compatible-options".
Commas can be added for readability.
'';
};
debug = {
type = extCommasEnum [ "msg" "throw" "beep" ];
vimDefault = [ ];
description = ''
These values can be used:
- msg Error messages that would otherwise be omitted will be given anyway.
- throw Error messages that would otherwise be omitted will be given anyway and also throw an exception and set |v:errmsg|.
- beep A message will be given when otherwise only a beep would be produced.
The values can be combined, separated by a comma.
"msg" and "throw" are useful for debugging 'foldexpr', 'formatexpr' or
'indentexpr'.
'';
};
delcombine = {
type = bool;
vimDefault = false;
description = ''
If editing Unicode and this option is set, backspace and Normal mode
"x" delete each combining character on its own. When it is off (the
default) the character along with its combining characters are
deleted.
'';
};
diffexpr = {
type = str;
vimDefault = "";
description = ''
Expression which is evaluated to obtain a diff file (either ed-style
or unified-style) from two versions of a file.
'';
extraHelp = [ "diff-diffexpr" ];
};
diffopt = {
type = listOf str;
vimDefault = [ "internal" "filler" "closeoff" ];
description = ''
Option settings for diff mode.
'';
};
digraph = {
type = bool;
vimDefault = false;
description = ''
Enable the entering of digraphs in Insert mode with {char1} <BS> {char2}.
'';
extraHelp = [ "digraphs" ];
};
directory = {
type = listOf (either str path);
vimDefault = [ "$XDG_STATE_HOME/nvim/swap//" ];
description = ''
List of directory names for the swap file, separated with commas.
'';
};
display = {
type = extCommasEnum [ "lastline" "truncate" "uhex" "msgsep" ];
vimDefault = [ "lastline" ];
description = ''
Change the way text is displayed.
'';
};
eadirection = {
type = enum [ "ver" "hor" "both" ];
vimDefault = "both";
description = ''
Tells when the 'equalalways' option applies:
'';
};
emoji = {
type = bool;
vimDefault = true;
description = ''
When on all Unicode emoji characters are considered to be full width.
This excludes "text emoji" characters, which are normally displayed as
single width.
'';
};
equalalways = {
type = bool;
vimDefault = true;
description = ''
When on, all the windows are automatically made the same size after
splitting or closing a window. This also happens the moment the
option is switched on. When off, splitting a window will reduce the
size of the current window and leave the other windows the same.
'';
};
errorbells = {
type = bool;
vimDefault = false;
description = ''
Ring the bell (beep or screen flash) for error messages. This only
makes a difference for error messages, the bell will be used always
for a lot of errors without a message
'';
};
errorfile = {
type = str;
vimDefault = "errors.err";
description = ''
Name of the errorfile for the QuickFix mode.
'';
extraHelp = [ "cf" ];
};
errorformat = {
type = str;
vimDefault = "default is very long";
description = ''
Scanf-like description of the format for the lines in the error file
'';
};
eventignore = {
type = listOf str;
vimDefault = [ ];
description = ''
A list of autocommand event names, which are to be ignored.
When set to "all" or when "all" is one of the items, all autocommand
events are ignored, autocommands will not be executed.
'';
};
exrc = {
type = bool;
vimDefault = false;
description = ''
Automatically execute .nvim.lua, .nvimrc, and .exrc files in the
current directory, if the file is in the |trust| list. Use |:trust| to
manage trusted files.
'';
extraHelp = [ ":trust" ];
};
fileencodings = {
type = listOf str;
vimDefault = [ "ucs-bom" "utf-8" "default" "latin1" ];
description = ''
This is a list of character encodings considered when starting to edit
an existing file.
'';
};
fileformats = {
type = extCommasEnum [ "dos" "unix" "mac" ];
vimDefault = ''
Windows default: ["dos" "unix"],
Unix default: ["unix" "dos"]
'';
description = ''
This gives the end-of-line (<EOL>) formats that will be tried when
starting to edit a new buffer and when reading a file into an existing
buffer
'';
};
fileignorecase = {
type = bool;
vimDefault = ''
`true` for systems where case in file names is normally ignored"
'';
description = ''
When set case is ignored when using file names and directories.
'';
};
foldclose = {
type = str;
vimDefault = "";
description = ''
When set to "all", a fold is closed when the cursor isn't in it and
its level is higher than 'foldlevel'. Useful if you want folds to
automatically close when moving out of them.
'';
};
foldlevelstart = {
type = number;
vimDefault = -1;
description = ''
Sets 'foldlevel' when starting to edit another buffer in a window.
Useful to always start editing with all folds closed (value zero),
some folds closed (one) or no folds closed (99).
When the value is negative, it is not used.
'';
extraHelp = [ "foldlevel" ];
};
foldopen = {
type = extCommasEnum [
"all"
"block"
"hor"
"insert"
"jump"
"mark"
"percent"
"quickfix"
"search"
"tag"
"undo"
];
vimDefault = [
"block"
"hor"
"mark"
"percent"
"quickfix"
"search"
"tag"
"undo"
];
description = ''
Specifies for which type of commands folds will be opened, if the
command moves the cursor into a closed fold. It is a comma-separated
list of items.
'';
};
fsync = {
type = bool;
vimDefault = true;
description = ''
When on, the OS function fsync() will be called after saving a file
(|:write|, |writefile()|, ), |swap-file|, |undo-persistence| and |shada-file|.
This flushes the file to disk, ensuring that it is safely written.
Slow on some systems: writing buffers, quitting Nvim, and other
operations may sometimes take a few seconds.
'';
};
gvimDefault = {
type = bool;
vimDefault = false;
description = ''
When on, the ":substitute" flag 'g' is default on. This means that
all matches in a line are substituted instead of one. When a 'g' flag
is given to a ":substitute" command, this will toggle the substitution
of all or one match. See |complex-change|.
'';
};
grepformat = {
type = str;
vimDefault = ''%f:%l:%m,%f:%l%m,%f %l%m'';
description = ''
Format to recognize for the ":grep" command output.
'';
extraHelp = [ "errorformat" ];
};
guicursor = {
type = str;
vimDefault = "n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20";
description = ''
Configures the cursor style for each mode. Works in the GUI and many
terminals. See |tui-cursor-shape|.
To disable cursor-styling, reset the option
'';
};
guifont = {
type = listOf str;
vimDefault = [ ];
description = ''
This is a list of fonts which will be used for the GUI version of Vim.
In its simplest form the value is just one font name. When
the font cannot be found you will get an error message. To try other
font names a list can be specified, font names separated with commas.
The first valid font is used.
'';
};
guifontwide = {
type = listOf str;
vimDefault = [ ];
description = ''
list of fonts to be used for double-width characters.
The first font that can be loaded is used.
'';
};
guioptions = {
type = str;
vimDefault = "egmrLT";
description = ''
This option only has an effect in the GUI version of Vim. It is a
sequence of letters which describes what components and options of the
GUI should be used.
'';
};
guitablabel = {
type = str;
vimDefault = "";
description = ''
When non-empty describes the text to use in a label of the GUI tab
pages line. When empty and when the result is empty Vim will use a
default label.
'';
extraHelp = [ "setting-guitablabel" ];
};
guitabtooltip = {
type = str;
vimDefault = "";
description = ''
When non-empty describes the text to use in a tooltip for the GUI tab
pages line. When empty Vim will use a default tooltip.
'';
};
helpfile = {
type = (either str path);
vimDefault = ''
default (MS-Windows) "$VIMRUNTIME\doc\help.txt"
(others) "$VIMRUNTIME/doc/help.txt"
'';
};
helpheight = {
type = number;
vimDefault = 20;
description = ''
Minimal initial height of the help window when it is opened with the ":help" command.
'';
};
helplang = {
type = listOf str;
vimDefault = "messages language or empty";
description = ''
list of languages. Vim will use the first language
for which the desired help can be found.
'';
};
hidden = {
type = bool;
vimDefault = true;
description = ''
When off a buffer is unloaded (including loss of undo information)
when it is abandoned. When on a buffer becomes hidden when it is
abandoned. A buffer displayed in another window does not become
hidden, of course.
'';
extraHelp = [
"abadon"
"bufhidden"
];
};
history = {
type = number;
vimDefault = 10000;
description = ''
A history of ":" commands, and a history of previous search patterns
is remembered. This option decides how many entries may be stored in
each of these histories
The maximum is 10000.
'';
extraHelp = [ "cmdline-editing" ];
};
hlsearch = {
type = bool;
vimDefault = true;
description = ''
When there is a previous search pattern, highlight all its matches.
'';
extraHelp = [
"incsearch"
"match"
];
};
icon = {
type = bool;
vimDefault = false;
description = ''
When on, the icon text of the window will be set to the value of
'iconstr' (if it is not empty), or to the name of the file
currently being edited. Only the last part of the name is used.
Overridden by the 'iconstr' option.
Only works if the terminal supports setting window icons.
'';
extraHelp = [ "iconstring" ];
};
iconstring = {
type = str;
vimDefault = "";
description = ''
When this option is not empty, it will be used for the icon text of the window.
'';
};
ignorecase = {
type = bool;
vimDefault = false;
description = ''
Ignore case in search patterns. Also used when searching in the tags file.
Also see 'smartcase' and 'tagcase'.
'';
};
imcmdline = {
type = bool;
vimDefault = false;
description = ''
When set the Input Method is always on when starting to edit a command
line, unless entering a search pattern.
'';
extraHelp = [ "imsearch" ];
};
imdisable = {
type = bool;
vimDefault = ''
false
true for some systems (SGI)
'';
description = ''
When set the Input Method is never used. This is useful to disable
the IM when it doesn't work properly.
'';
};
inccommand = {
type = enum [ "nosplit" "split" ];
vimDefault = "nosplit";
description = ''
When nonempty, shows the effects of |:substitute|, |:smagic|,
|:snomagic| and user commands with the |:command-preview| flag as you
type.
'';
};
incsearch = {
type = bool;
vimDefault = true;
description = ''
While typing a search command, show where the pattern, as it was typed
so far, matches. The matched str is highlighted. If the pattern
is invalid or not found, nothing is shown.
'';
};
isfname = {
type = str;
vimDefault = ''
Windows: "@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],:,@-@,!,~,="
otherwise: "@,48-57,/,.,-,_,+,,,#,$,%,~,="
'';
};
isident = {
type = str;
vimDefault = ''
Windows: "@,48-57,_,128-167,224-235"
otherwise: "@,48-57,_,192-255"
'';
description = ''
The characters given by this option are included in identifiers.
Identifiers are used in recognizing environment variables and after a
match of the 'define' option.
'';
};
isprint = {
type = str;
vimDefault = "@,161-255";
description = ''
The characters given by this option are displayed directly on the
screen. It is also used for "\p" in a |pattern|.
'';
extraHelp = [ "pattern" ];
};
jumpoptions = {
type = str;
vimDefault = "";
description = ''
List of words that change the behavior of the |jumplist|
'';
extraHelp = [ "jumplist" ];
};
joinspaces = {
type = bool;
vimDefault = false;
description = ''
Insert two spaces after a '.', '?' and '!' with a join command.
Otherwise only one space is inserted.
'';
};
keymodel = {
type = listOf str;
vimDefault = [ ];
description = ''
List of comma-separated words, which enable special things that keys can do.
'';
};
langmap = {
type = listOf str;
vimDefault = [ ];
description = ''
This option allows switching your keyboard into a special language
mode. When you are typing text in Insert mode the characters are
inserted directly. When in Normal mode the 'langmap' option takes
care of translating these special characters to the original meaning
of the key. This means you don't have to change the keyboard mode to
be able to execute Normal mode commands.
'';
};
langmenu = {
type = str;
vimDefault = "";
description = ''
Language to use for menu translation.
'';
};
langremap = {
type = bool;
vimDefault = false;
description = ''
When off, setting 'langmap' does not apply to characters resulting from
a mapping. If setting 'langmap' disables some of your mappings, make
sure this option is off.
'';
};
laststatus = {
type = number;
vimDefault = 2;
description = ''
The value of this option influences when the last window will have a
status line:
- 0: never
- 1: only if there are at least two windows
- 2: always
- 3: always and ONLY the last window
'';
};
lazyredraw = {
type = bool;
vimDefault = false;
description = ''
When this option is set, the screen will not be redrawn while
executing macros, registers and other commands that have not been
typed. Also, updating the window title is postponed. To force an
update use |:redraw|.
'';
extraHelp = [ ":redraw" ];
};
linespace = {
type = number;
vimDefault = 0;
description = ''
Number of pixel lines inserted between characters. Useful if the font
uses the full character cell height, making lines touch each other.
When non-zero there is room for underlining.
'';
};
loadplugins = {
type = bool;
vimDefault = true;
description = ''
When on the plugin scripts are loaded when starting up |load-plugins|.
This option can be reset in your |vimrc| file to disable the loading
of plugins.
'';
};
magic = {
type = bool;
vimDefault = true;
description = ''
Changes the special characters that can be used in search patterns.
See |pattern|.
WARNING: Switching this option off most likely breaks plugins! That
is because many patterns assume it's on and will fail when it's off.
'';
};
makeef = {
type = (either str path);
vimDefault = "";
description = ''
Name of the errorfile for the |:make| command (see |:make_makeprg|)
and the |:grep| command.
When it is empty, an internally generated temp file will be used.
When "##" is included, it is replaced by a number to make the name
unique.
'';
};
matchtime = {
type = number;
vimDefault = 5;
description = ''
Tenths of a second to show the matching paren, when 'showmatch' is
set. Note that this is not in milliseconds, like other options that
set a time. This is to be compatible with Nvi.
'';
};
maxfuncdepth = {
type = number;
vimDefault = 100;
description = ''
Maximum depth of function calls for user functions. This normally
catches endless recursion. When using a recursive function with
more depth, set 'maxfuncdepth' to a bigger number. But this will use
more memory, there is the danger of failing when memory is exhausted.
Increasing this limit above 200 also changes the maximum for Ex
command recursion, see |E169|.
'';
extraHelp = [
"E169"
":function"
];
};
maxmapdepth = {
type = number;
vimDefault = 1000;
description = ''
Maximum number of times a mapping is done without resulting in a
character to be used. This normally catches endless mappings, like
":map x y" with ":map y x". It still does not catch ":map g wg"
'';
extraHelp = [ "key-mapping" ];
};
maxmempattern = {
type = number;
vimDefault = 1000;
description = ''
Maximum amount of memory (in Kbyte) to use for pattern matching.
The maximum value is about 2000000. Use this to work without a limit.
'';
extraHelp = [ "E363" ];
};
menuitems = {
type = number;
vimDefault = 25;
description = ''
Maximum number of items to use in a menu. Used for menus that are
generated from a list of items, e.g., the Buffers menu. Changing this
option has no direct effect, the menu must be refreshed first.
'';
};
mkspellmem = {
type = str;
vimDefault = "46000,2000,500";
description = ''
Parameters for |:mkspell|. This tunes when to start compressing the
word tree. Compression can be slow when there are many words, but
it's needed to avoid running out of memory. The amount of memory used
per word depends very much on how similar the words are, that's why
this tuning is complicated.
There are three numbers, separated by commas:
{start},{inc},{added}
'';
extraHelp = [ ":mkspell" ];
};
modelineexpr = {
type = bool;
vimDefault = false;
description = ''
When on allow some options that are an expression to be set in the
modeline.
'';
extraHelp = [ "modeline" ];
};
modelines = {
type = number;
vimDefault = 5;
description = ''
If 'modeline' is on 'modelines' gives the number of lines that is
checked for set commands.
'';
extraHelp = [ "modeline" ];
};
more = {
type = bool;
vimDefault = true;
description = ''
When on, listings pause when the whole screen is filled. You will get
the |more-prompt|. When this option is off there are no pauses, the
listing continues until finished.
'';
extraHelp = [ "more-prompt" ];
};
mouse = {
type = str;
vimDefault = "nvi";
description = ''
Enables mouse support.
Mouse support can be enabled for different modes:
n Normal mode
v Visual mode
i Insert mode
c Command-line mode
h all previous modes when editing a help file
a all previous modes
r for |hit-enter| and |more-prompt| prompt
'';
};
mousefocus = {
type = bool;
vimDefault = false;
description = ''
The window that the mouse pointer is on is automatically activated.
When changing the window layout or window focus in another way, the
mouse pointer is moved to the window with keyboard focus. Off is the
default because it makes using the pull down menus a little goofy, as
a pointer transit may activate a window unintentionally.
'';
};
mousehide = {
type = bool;
vimDefault = true;
description = ''
When on, the mouse pointer is hidden when characters are typed.
The mouse pointer is restored when the mouse is moved.
'';
};
mousemodel = {
type = enum [ "extend" "popup" "popup_setpos" ];
vimDefault = "popup_setpos";
description = ''
Sets the model to use for the mouse. The name mostly specifies what
the right mouse button is used for:
extend Right mouse button extends a selection. This works
like in an xterm.
popup Right mouse button pops up a menu. The shifted left
mouse button extends a selection. This works like
with Microsoft Windows.
popup_setpos Like "popup", but the cursor will be moved to the
position where the mouse was clicked, and thus the
selected operation will act upon the clicked object.
If clicking inside a selection, that selection will
be acted upon, i.e. no cursor move. This implies of
course, that right clicking outside a selection will
end Visual mode.
'';
};
mousemoveevent = {
type = bool;
vimDefault = false;
description = ''
When on, mouse move events are delivered to the input queue and are
available for mapping. The default, off, avoids the mouse movement
overhead except when needed.
Warning: Setting this option can make pending mappings to be aborted
when the mouse is moved.
'';
};
mousescroll = {
type = extCommas;
vimDefault = [ "ver:3" "hor:6" ];
description = ''
This option controls the number of lines / columns to scroll by when
scrolling with a mouse. The option is a comma separated list of parts.
Each part consists of a direction and a count as follows:
direction:count,direction:count
'';
};
mouseshape = {
type = extCommas;
vimDefault = [ "i:beam" "r:beam" "s:updown" "sd:cross" "m:no" "ml:up-arrow" "v:rightup-arrow" ];
description = ''
This option tells Vim what the mouse pointer should look like in
different modes. The option is a comma-separated list of parts, much
like used for 'guicursor'. Each part consist of a mode/location-list
and an argument-list:
mode-list:shape,mode-list:shape,..
'';
};
mousetime = {
type = number;
vimDefault = 500;
description = ''
Defines the maximum time in msec between two mouse clicks for the
second click to be recognized as a multi click.
'';
};
operatorfunc = {
type = str;
vimDefault = "";
description = ''
his option specifies a function to be called by the |g@| operator.
'';
extraHelp = [ "g@" ":map-operator" ];
};
# TODO: packpath
paragraphs = {
type = str;
vimDefault = "IPLPPPQPP TPHPLIPpLpItpplpipbp";
description = ''
Specifies the nroff macros that separate paragraphs. These are pairs
of two letters.
'';
extraHelp = [ "object-motions" ];
};
patchexpr = {
type = str;
vimDefault = "";
description = ''
Expression which is evaluated to apply a patch to a file and generate
the resulting new version of the file.
'';
extraHelp = [ "diff-patchexpr" ];
};
patchmode = {
type = str;
vimDefault = "";
description = ''
When non-empty the oldest version of a file is kept. This can be used
to keep the original version of a file if you are changing files in a
source distribution. Only the first time that a file is written a
copy of the original file will be kept. The name of the copy is the
name of the original file with the string in the 'patchmode' option
appended. This option should start with a dot. Use a string like
".orig" or ".org". 'backupdir' must not be empty for this to work
(Detail: The backup file is renamed to the patchmode file after the
new file has been successfully written, that's why it must be possible
to write a backup file). If there was no file to be backed up, an
empty file is created.
'';
extraHelp = [ "backupdir" "backupskip" ];
};
previewheight = {
type = number;
vimDefault = 12;
description = ''
Default height for a preview window. Used for |:ptag| and associated
commands. Used for |CTRL-W_}| when no count is given.
'';
extraHelp = [ ":ptag" "CTRL-W_}" ];
};
pumblend = {
type = number;
vimDefault = 0;
description = ''
Enables pseudo-transparency for the |popup-menu|. Valid values are in
the range of 0 for fully opaque popupmenu (disabled) to 100 for fully
transparent background. Values between 0-30 are typically most useful.
'';
extraHelp = [ "popup-menu" "highlight-blend" ];
};
pumheight = {
type = number;
vimDefault = 0;
description = ''
Maximum number of items to show in the popup menu
(|ins-completion-menu|). Zero means "use available screen space".
'';
extraHelp = [ "ins-completion-menu" ];
};
pumwidth = {
type = number;
vimDefault = 15;
description = ''
Minimum width for the popup menu (|ins-completion-menu|). If the
cursor column + 'pumwidth' exceeds screen width, the popup menu is
nudged to fit on the screen.
'';
extraHelp = [ "ins-completion-menu" ];
};
pyxversion = {
type = number;
vimDefault = 3;
description = ''
Specifies the python version used for pyx* functions and commands
|python_x|. As only Python 3 is supported, this always has the value
`3`. Setting any other value is an error.
'';
extraHelp = [ "python_x" ];
};
quickfixtextfunc = {
type = str;
vimDefault = "";
description = ''
This option specifies a function to be used to get the text to display
in the quickfix and location list windows. This can be used to
customize the information displayed in the quickfix or location window
for each entry in the corresponding quickfix or location list.
'';
extraHelp = [ "quickfix-window-function" ];
};
redrawdebug = {
type = extCommasEnum [ "compositor" "line" "flush" "nothrottle" "invalid" "nodelta" ];
vimDefault = [ ];
description = ''
Flags to change the way redrawing works, for debugging purposes.
Most useful with 'writedelay' set to some reasonable value.
'';
extraHelp = [ "writedelay" ];
};
redrawtime = {
type = number;
vimDefault = 2000;
description = ''
Time in milliseconds for redrawing the display. Applies to
'hlsearch', 'inccommand', |:match| highlighting and syntax
highlighting.
When redrawing takes more than this many milliseconds no further
matches will be highlighted.
'';
};
regexpengine = {
type = number;
vimDefault = 0;
description = ''
This selects the default regexp engine.
The possible values are:
0 automatic selection
1 old engine
2 NFA engine
'';
extraHelp = [ "two-engines" ];
};
report = {
type = number;
vimDefault = 2;
description = ''
Threshold for reporting number of lines changed. When the number of
changed lines is more than 'report' a message will be given for most
":" commands. If you want it always, set 'report' to 0.
For the ":substitute" command the number of substitutions is used
instead of the number of lines.
'';
};
revins = {
type = bool;
vimDefault = false;
description = ''
Inserting characters in Insert mode will work backwards. See "typing
backwards" |ins-reverse|. This option can be toggled with the CTRL-_
command in Insert mode, when 'allowrevins' is set.
'';
extraHelp = [ "ins-reserve" "allowrevins" ];
};
ruler = {
type = bool;
vimDefault = true;
description = ''
Show the line and column number of the cursor position, separated by a
comma. When there is room, the relative position of the displayed
text in the file is shown on the far right:
Top first line is visible
Bot last line is visible
All first and last line are visible
45% relative position in the file
If 'rulerformat' is set, it will determine the contents of the ruler.
Each window has its own ruler. If a window has a status line, the
ruler is shown there. If a window doesn't have a status line and
'cmdheight' is zero, the ruler is not shown. Otherwise it is shown in
the last line of the screen. If the statusline is given by
'statusline' (i.e. not empty), this option takes precedence over
'ruler' and 'rulerformat'.
'';
extraHelp = [
"rulerformat"
"cmdheight"
"statusline"
"g_CTRL-G"
];
};
rulerformat = {
type = str;
vimDefault = "";
description = ''
When this option is not empty, it determines the content of the ruler
string, as displayed for the 'ruler' option.
The format of this option is like that of 'statusline'.
This option cannot be set in a modeline when 'modelineexpr' is off.
'';
extraHelp = [ "ruler" "statusline" ];
};
# TODO: runtimepath
scrolljump = {
type = number;
vimDefault = 1;
description = ''
Minimal number of lines to scroll when the cursor gets off the
screen (e.g., with "j"). Not used for scroll commands.
'';
};
scrollopt = {
type = extCommasEnum [ "ver" "hor" "jump" ];
vimDefault = [ "ver" "jump" ];
description = ''
This is a comma-separated list of words that specifies how
'scrollbind' windows should behave.
'';
extraHelp = [ "scrollbind" "scroll-binding" ];
};
sections = {
type = str;
vimDefault = "SHNHH HUnhsh";
description = ''
Specifies the nroff macros that separate sections. These are pairs of
two letters
'';
extraHelp = [ "object-motions" ];
};
sessionoptions = {
type = extCommasEnum [
"blank"
"buffers"
"curdir"
"folds"
"globals"
"help"
"localoptions"
"options"
"skiprtp"
"resize"
"sesdir"
"tabpages"
"terminal"
"winpos"
"winsize"
];
vimDefault = [
"blank"
"buffers"
"curdir"
"folds"
"help"
"tabpages"
"winsize"
"terminal"
];
description = ''
Changes the effect of the |:mksession| command. It is a comma-
separated list of words.
Don't include both "curdir" and "sesdir". When neither is included
filenames are stored as absolute paths.
If you leave out "options" many things won't work well after restoring
the session.
'';
extraHelp = [ ":mksession" ];
};
shada = {
type = extCommas;
vimDefault = ''
Win32: !,'100,<50,s10,h,rA:,rB:
others: !,'100,<50,s10,h)
'';
description = ''
When non-empty, the shada file is read upon startup and written
when exiting Vim (see |shada-file|). The string should be a comma-
separated list of parameters, each consisting of a single character
identifying the particular parameter, followed by a number or string
which specifies the value of that parameter. If a particular
character is left out, then the default value is used for that
parameter.
'';
extraHelp = [ "shada-file" ];
};
shadafile = {
type = str;
vimDefault = "";
description = ''
When non-empty, overrides the file name used for |shada| (viminfo).
When equal to "NONE" no shada file will be read or written.
This option can be set with the |-i| command line flag. The |--clean|
command line flag sets it to "NONE".
'';
extraHelp = [ "shada" ];
};
shell = {
type = str;
vimDefault = ''
Win32: "cmd.exe"
others: $SHELL or "sh"
'';
description = ''
Name of the shell to use for ! and :! commands. When changing the
value also check these options: 'shellpipe', 'shellslash'
'shellredir', 'shellquote', 'shellxquote' and 'shellcmdflag'.
It is allowed to give an argument to the command, e.g. "csh -f".
See |option-backslash| about including spaces and backslashes.
'';
extraHelp = [
"shellpipe"
"shellslash"
"shellredir"
"shellquote"
"shellxquote"
"shellcmdflag"
"shell-powershell"
"option-backslash"
];
};
shellcmdflag = {
type = str;
vimDefault = ''
Windows: "/s /c"
others: "-c"
'';
description = ''
Flag passed to the shell to execute "!" and ":!" commands
'';
extraHelp = [ "shell-unquoting" ];
};
shellpipe = {
type = str;
vimDefault = ''
For MS-Windows the default is "2>&1| tee". The stdout and stderr are
saved in a file and echoed to the screen.
For Unix the default is "| tee". The stdout of the compiler is saved
in a file and echoed to the screen. If the 'shell' option is "csh" or
"tcsh" after initializations, the default becomes "|& tee". If the
'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta",
"bash", "fish", "ash" or "dash" the default becomes "2>&1| tee". This
means that stderr is also included.
'';
description = ''
String to be used to put the output of the ":make" command in the
error file.
When 'shellpipe' is set to an empty string, no redirection of the
":make" output will be done.
'';
extraHelp = [ "shell" ":make" ":make_makeprg" ];
};
shellquote = {
type = str;
vimDefault = "";
description = ''
Quoting character(s), put around the command passed to the shell, for
the "!" and ":!" commands. The redirection is kept outside of the
quoting. See 'shellxquote' to include the redirection. It's
probably not useful to set both options.
'';
extraHelp = [ "shellxquote" ];
};
shellredir = {
type = str;
vimDefault = ''
The default is ">". For Unix, if the 'shell' option is "csh" or
"tcsh" during initializations, the default becomes ">&". If the
'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta",
"bash" or "fish", the default becomes ">%s 2>&1". This means that
stderr is also included. For Win32, the Unix checks are done and
additionally "cmd" is checked for, which makes the default ">%s 2>&1".
'';
description = ''
String to be used to put the output of a filter command in a temporary
file.
The name of the temporary file can be represented by "%s" if necessary
(the file name is appended automatically if no %s appears in the value
of this option).
'';
};
shellslash = {
type = bool;
vimDefault = false;
description = ''
{only for MS-Windows}
When set, a forward slash is used when expanding file names. This is
useful when a Unix-like shell is used instead of cmd.exe. Backward
slashes can still be typed, but they are changed to forward slashes by
Vim.
'';
};
shelltemp = {
type = bool;
vimDefault = true;
description = ''
When on, use temp files for shell commands. When off use a pipe.
When using a pipe is not possible temp files are used anyway.
The advantage of using a pipe is that nobody can read the temp file
and the 'shell' command does not need to support redirection.
The advantage of using a temp file is that the file type and encoding
can be detected.
The |FilterReadPre|, |FilterReadPost| and |FilterWritePre|,
|FilterWritePost| autocommands event are not triggered when
'shelltemp' is off.
'';
};
shellxescape = {
type = str;
vimDefault = "";
description = ''
When 'shellxquote' is set to "(" then the characters listed in this
option will be escaped with a '^' character.
'';
extraHelp = [ "shellxquote" ];
};
shellxquote = {
type = str;
vimDefault = ''
Windows: "\"
others: ""
'';
description = ''
Quoting character(s), put around the command passed to the shell, for
the "!" and ":!" commands. Includes the redirection. See
'shellquote' to exclude the redirection. It's probably not useful
to set both options.
When the value is '(' then ')' is appended. When the value is '"('
then ')"' is appended.
When the value is '(' then also see 'shellxescape'.
'';
extraHelp = [ "shellquote" "shellxescape" ];
};
shiftround = {
type = bool;
vimDefault = false;
description = ''
Round indent to multiple of 'shiftwidth'. Applies to > and <
commands. CTRL-T and CTRL-D in Insert mode always round the indent to
a multiple of 'shiftwidth' (this is Vi compatible).
'';
extraHelp = [ "shiftwidth" ];
};
shortmess = {
type = str;
vimDefault = "filnxtToOF";
description = ''
This option helps to avoid all the |hit-enter| prompts caused by file
messages, for example with CTRL-G, and to avoid some other messages.
'';
extraHelp = [ "hit-enter" "CTRL-G" ];
};
showcmd = {
type = bool;
vimDefault = true;
description = ''
Show (partial) command in the last line of the screen. Set this
option off if your terminal is slow.
In Visual mode the size of the selected area is shown:
- When selecting characters within a line, the number of characters.
If the number of bytes is different it is also displayed: "2-6"
means two characters and six bytes.
- When selecting more than one line, the number of lines.
- When selecting a block, the size in screen characters:
{lines}x{columns}.
This information can be displayed in an alternative location using the
'showcmdloc' option, useful when 'cmdheight' is 0.
'';
extraHelp = [ "showcmdloc" "cmdheight" ];
};
showcmdloc = {
type = enum [ "last" "statusline" "tabline" ];
vimDefault = "last";
description = ''
This option can be used to display the (partially) entered command in
another location.
Setting this option to "statusline" or "tabline" means that these will
be redrawn whenever the command changes, which can be on every key
pressed.
'';
extraHelp = [ "statusline" "tabline" ];
};
showfulltag = {
type = bool;
vimDefault = false;
description = ''
When completing a word in insert mode (see |ins-completion|) from the
tags file, show both the tag name and a tidied-up form of the search
pattern (if there is one) as possible matches. Thus, if you have
matched a C function, you can see a template for what arguments are
required (coding style permitting).
Note that this doesn't work well together with having "longest" in
'completeopt', because the completion from the search pattern may not
match the typed text.
'';
extraHelp = [ "ins-completion" "completeopt" ];
};
showmatch = {
type = bool;
vimDefault = false;
description = ''
When a bracket is inserted, briefly jump to the matching one. The
jump is only done if the match can be seen on the screen. The time to
show the match can be set with 'matchtime'.
A Beep is given if there is no match (no matter if the match can be
seen or not).
'';
extraHelp = [ "matchtime" ];
};
showmode = {
type = bool;
vimDefault = true;
description = ''
If in Insert, Replace or Visual mode put a message on the last line.
The option has no effect when 'cmdheight' is zero.
'';
extraHelp = [ "cmdheight" ];
};
showtabline = {
type = number;
vimDefault = 1;
description = ''
The value of this option specifies when the line with tab page labels
will be displayed:
0: never
1: only if there are at least two tab pages
2: always
This is both for the GUI and non-GUI implementation of the tab pages
line.
'';
extraHelp = [ "tab-page" ];
};
sidescroll = {
type = number;
vimDefault = 1;
description = ''
The minimal number of columns to scroll horizontally. Used only when
the 'wrap' option is off and the cursor is moved off of the screen.
When it is zero the cursor will be put in the middle of the screen.
When using a slow terminal set it to a large number or 0. Not used
for "zh" and "zl" commands.
'';
extraHelp = [ "wrap" "zh" "zl" ];
};
smartcase = {
type = bool;
vimDefault = false;
description = ''
Override the 'ignorecase' option if the search pattern contains upper
case characters. Only used when the search pattern is typed and
'ignorecase' option is on. Used for the commands "/", "?", "n", "N",
":g" and ":s". Not used for "*", "#", "gd", tag search, etc. After
"*" and "#" you can make 'smartcase' used by doing a "/" command,
recalling the search pattern from history and hitting <Enter>.
'';
extraHelp = [ "ignorecase" ];
};
smarttab = {
type = bool;
vimDefault = true;
description = ''
When on, a <Tab> in front of a line inserts blanks according to
'shiftwidth'. 'tabstop' or 'softtabstop' is used in other places. A
<BS> will delete a 'shiftwidth' worth of space at the start of the
line.
When off, a <Tab> always inserts blanks according to 'tabstop' or
'softtabstop'. 'shiftwidth' is only used for shifting text left or
right |shift-left-right|.
What gets inserted (a <Tab> or spaces) depends on the 'expandtab'
option. Also see |ins-expandtab|. When 'expandtab' is not set, the
number of spaces is minimized by using <Tab>s.
'';
extraHelp = [
"shiftwidth"
"tabstop"
"softtabstop"
"shift-left-right"
"ins-expandtab"
"expandtab"
];
};
spellsuggest = {
type = extCommas;
vimDefault = [ "best" ];
description = ''
Methods used for spelling suggestions. Both for the |z=| command and
the |spellsuggest()| function.
'';
};
splitbelow = {
type = bool;
vimDefault = false;
description = ''
When on, splitting a window will put the new window below the current
one. |:split|
'';
extraHelp = [ ":split" ];
};
splitkeep = {
type = enum [ "cursor" "screen" "topline" ];
vimDefault = "cursor";
description = ''
The value of this option determines the scroll behavior when opening,
closing or resizing horizontal splits.
Possible values are:
cursor Keep the same relative cursor position.
screen Keep the text on the same screen line.
topline Keep the topline the same.
'';
};
splitright = {
type = bool;
vimDefault = false;
description = ''
When on, splitting a window will put the new window right of the
current one. |:vsplit|
'';
extraHelp = [ ":vsplit" ];
};
startofline = {
type = bool;
vimDefault = false;
description = ''
When "on" the commands listed below move the cursor to the first
non-blank of the line. When off the cursor is kept in the same column
(if possible). This applies to the commands: CTRL-D, CTRL-U, CTRL-B,
CTRL-F, "G", "H", "M", "L", gg, and to the commands "d", "<<" and ">>"
with a linewise operator, with "%" with a count and to buffer changing
commands (CTRL-^, :bnext, :bNext, etc.). Also for an Ex command that
only has a line number, e.g., ":25" or ":+".
In case of buffer changing commands the cursor is placed at the column
where it was the last time the buffer was edited.
'';
};
suffixes = {
type = extCommas;
vimDefault = [ ".bak" "~" ".o" ".h" ".info" ".swp" ".obj" ];
description = ''
Files with these suffixes get a lower priority when multiple files
match a wildcard.
'';
extraHelp = [ "wildignore" ];
};
switchbuf = {
type = extCommasEnum [ "useopen" "usetab" "split" "vsplit" "newtab" "uselast" ];
vimDefault = [ "uselast" ];
description = ''
This option controls the behavior when switching between buffers.
Mostly for |quickfix| commands some values are also used for other
commands, as mentioned below.
'';
};
tabline = {
type = str;
vimDefault = "";
description = ''
When non-empty, this option determines the content of the tab pages
line at the top of the Vim window. When empty Vim will use a default
tab pages line. See |setting-tabline| for more info.
'';
extraHelp = [ "setting-tabline" "showtabline" "statusline" ];
};
tabpagemax = {
type = number;
vimDefault = 50;
description = ''
Maximum number of tab pages to be opened by the |-p| command line
argument or the ":tab all" command. |tabpage|
'';
extraHelp = [ ":tab" "tabpage" ];
};
tagbsearch = {
type = bool;
vimDefault = true;
description = ''
When searching for a tag (e.g., for the |:ta| command), Vim can either
use a binary search or a linear search in a tags file. Binary
searching makes searching for a tag a LOT faster, but a linear search
will find more tags if the tags file wasn't properly sorted.
Vim normally assumes that your tags files are sorted, or indicate that
they are not sorted. Only when this is not the case does the
'tagbsearch' option need to be switched off.
'';
extraHelp = [ ":ta" "ignorecase" "tagcase" "smartcase" ];
};
taglength = {
type = number;
vimDefault = 0;
description = ''
If non-zero, tags are significant up to this number of characters.
'';
};
tagrelative = {
type = bool;
vimDefault = true;
description = ''
If on and using a tags file in another directory, file names in that
tags file are relative to the directory where the tags file is.
'';
};
tagstack = {
type = bool;
vimDefault = true;
description = ''
When on, the |tagstack| is used normally. When off, a ":tag" or
":tselect" command with an argument will not push the tag onto the
tagstack. A following ":tag" without an argument, a ":pop" command or
any other command that uses the tagstack will use the unmodified
tagstack, but does change the pointer to the active entry.
Resetting this option is useful when using a ":tag" command in a
mapping which should not change the tagstack.
'';
};
termbidi = {
type = bool;
vimDefault = false;
description = ''
The terminal is in charge of Bi-directionality of text (as specified
by Unicode). The terminal is also expected to do the required shaping
that some languages (such as Arabic) require.
'';
};
termguicolors = {
type = bool;
vimDefault = false;
description = ''
Enables 24-bit RGB color in the |TUI|. Uses "gui" |:highlight|
attributes instead of "cterm" attributes. |guifg|
Requires an ISO-8613-3 compatible terminal.
'';
};
termpastefilter = {
type = extCommasEnum [ "BS" "HT" "FF" "ESC" "DEL" "C0" "C1" ];
vimDefault = [ "BS" "HT" "ESC" "DEL" ];
description = ''
list of options for specifying control characters
to be removed from the text pasted into the terminal window.
'';
};
tildeop = {
type = bool;
vimDefault = false;
description = ''
When on: The tilde command "~" behaves like an operator.
'';
};
timeout = {
type = bool;
vimDefault = true;
description = ''
This option and 'timeoutlen' determine the behavior when part of a
mapped key sequence has been received. For example, if <c-f> is
pressed and 'timeout' is set, Nvim will wait 'timeoutlen' milliseconds
for any key that can follow <c-f> in a mapping.
'';
extraHelp = [ "timeoutlen" ];
};
ttimeout = {
type = bool;
vimDefault = true;
description = ''
This option and 'ttimeoutlen' determine the behavior when part of a
key code sequence has been received by the |TUI|.
For example if <Esc> (the \x1b byte) is received and 'ttimeout' is
set, Nvim waits 'ttimeoutlen' milliseconds for the terminal to
complete a key code sequence. If no input arrives before the timeout,
a single <Esc> is assumed. Many TUI cursor key codes start with <Esc>.
On very slow systems this may fail, causing cursor keys not to work
sometimes. If you discover this problem you can ":set ttimeoutlen=9999".
Nvim will wait for the next character to arrive after an <Esc>.
'';
extraHelp = [ "ttimeoutlen" ];
};
timeoutlen = {
type = number;
vimDefault = 1000;
description = ''
Time in milliseconds to wait for a mapped sequence to complete.
'';
};
ttimeoutlen = {
type = number;
vimDefault = 50;
description = ''
Time in milliseconds to wait for a key code sequence to complete. Also
used for CTRL-\ CTRL-N and CTRL-\ CTRL-G when part of a command has
been typed.
'';
};
title = {
type = bool;
vimDefault = false;
description = ''
When on, the title of the window will be set to the value of
'titlestring' (if it is not empty), or to:
filename [+=-] (path) - NVIM
'';
extraHelp = [ "titlestring" ];
};
titlelen = {
type = number;
vimDefault = 85;
description = ''
Gives the percentage of 'columns' to use for the length of the window
title. When the title is longer, only the end of the path name is
shown.
'';
};
titlestring = {
type = str;
vimDefault = "";
description = ''
When this option is not empty, it will be used for the title of the
window. This happens only when the 'title' option is on.
When this option contains printf-style '%' items, they will be
expanded according to the rules used for 'statusline'.
This option cannot be set in a modeline when 'modelineexpr' is off.
'';
extraHelp = [ "title" "titlelen" ];
};
undodir = {
type = listOf (either str path);
vimDefault = [ "$XDG_STATE_HOME/nvim/undo//" ];
description = ''
List of directory names for undo files, separated with commas.
See 'backupdir' for details of the format.
"." means using the directory of the file. The undo file name for
"file.txt" is ".file.txt.un~".
For other directories the file name is the full path of the edited
file, with path separators replaced with "%".
When writing: The first directory that exists is used. "." always
works, no directories after "." will be used for writing. If none of
the directories exist Nvim will attempt to create the last directory in
the list.
When reading all entries are tried to find an undo file. The first
undo file that exists is used. When it cannot be read an error is
given, no further entry is used.
Note that unlike 'directory' and 'backupdir', 'undodir' always acts as
though the trailing slashes are present (see 'backupdir' for what this
means).
'';
extraHelp = [ "backupdir" "undo-persistence" ];
};
undoreload = {
type = number;
vimDefault = 10000;
description = ''
Save the whole buffer for undo when reloading it. This applies to the
":e!" command and reloading for when the buffer changed outside of
Vim. |FileChangedShell|
The save only happens when this option is negative or when the number
of lines is smaller than the value of this option.
Set this option to zero to disable undo for a reload.
When saving undo for a reload, any undo file is not read.
Note that this causes the whole buffer to be stored in memory. Set
this option to a lower value if you run out of memory.
'';
};
updatecount = {
type = number;
vimDefault = 200;
description = ''
After typing this many characters the swap file will be written to
disk. When zero, no swap file will be created at all (see chapter on
recovery |crash-recovery|). 'updatecount' is set to zero by starting
Vim with the "-n" option, see |startup|. When editing in readonly
mode this option will be initialized to 10000.
The swapfile can be disabled per buffer with |'swapfile'|.
'';
extraHelp = [ "crash-recovery" "startup" "swapfile" ];
};
updatetime = {
type = number;
vimDefault = 4000;
description = ''
If this many milliseconds nothing is typed the swap file will be
written to disk (see |crash-recovery|). Also used for the
|CursorHold| autocommand event.
'';
extraHelp = [ "crash-recovery" "CursorHold" ];
};
verbose = {
type = number;
vimDefault = 0;
description = ''
Sets the verbosity level.
Level Messages
----------------------------------------------------------------------
1 Lua assignments to options, mappings, etc.
2 When a file is ":source"'ed, or |shada| file is read or written.
3 UI info, terminal capabilities.
4 Shell commands.
5 Every searched tags file and include file.
8 Files for which a group of autocommands is executed.
9 Executed autocommands.
11 Finding items in a path.
12 Vimscript function calls.
13 When an exception is thrown, caught, finished, or discarded.
14 Anything pending in a ":finally" clause.
15 Ex commands from a script (truncated at 200 characters).
16 Ex commands.
If 'verbosefile' is set then the verbose messages are not displayed.
'';
extraHelp = [ "verbosefile" ];
};
verbosefile = {
type = either str path;
vimDefault = "";
description = ''
When not empty all messages are written in a file with this name.
When the file exists messages are appended.
Writing to the file ends when Vim exits or when 'verbosefile' is made
empty. Writes are buffered, thus may not show up for some time.
Setting 'verbosefile' to a new value is like making it empty first.
The difference with |:redir| is that verbose messages are not
displayed when 'verbosefile' is set.
'';
};
viewdir = {
type = str;
vimDefault = "$XDG_STATE_HOME/nvim/view//";
description = ''
Name of the directory where to store files for |:mkview|.
'';
extraHelp = [ ":mkview" ];
};
viewoptions = {
type = extCommasEnum [ "cursor" "curdir" "folds" "options" "localoptions" "slash" "unix" ];
vimDefault = [ "folds" "cursor" "curdir" ];
description = ''
Changes the effect of the |:mkview| command.
'';
extraHelp = [ ":mkview" ];
};
visualbell = {
type = bool;
vimDefault = false;
description = ''
Use visual bell instead of beeping. Also see 'errorbells'.
'';
extraHelp = [ "errorbells" ];
};
warn = {
type = bool;
vimDefault = true;
description = ''
Give a warning message when a shell command is used while the buffer
has been changed.
'';
};
whichwrap = {
type = extCommasEnum [ "b" "s" "h" "l" "<" ">" "~" "[" "]" ];
vimDefault = [ "b" "s" ];
description = ''
Allow specified keys that move the cursor left/right to move to the
previous/next line when the cursor is on the first/last character in
the line. Concatenate characters to allow this for these keys:
char key mode
b <BS> Normal and Visual
s <Space> Normal and Visual
h "h" Normal and Visual (not recommended)
l "l" Normal and Visual (not recommended)
< <Left> Normal and Visual
> <Right> Normal and Visual
~ "~" Normal
[ <Left> Insert and Replace
] <Right> Insert and Replace
'';
};
wildchar = {
type = either str number;
vimDefault = lib.mod.tab;
description = ''
Character you have to type to start wildcard expansion in the
command-line, as specified with 'wildmode'.
More info here: |cmdline-completion|.
The character is not recognized when used inside a macro. See
'wildcharm' for that.
Some keys will not work, such as CTRL-C, <CR> and Enter.
Although 'wc' is a number option, you can set it to a special key:
'';
extraHelp = [ "wildmode" "cmdline-completion" "wildcharm" ];
};
wildcharm = {
type = str;
vimDefault = "";
description = ''
'wildcharm' works exactly like 'wildchar', except that it is
recognized when used inside a macro. You can find "spare" command-line
keys suitable for this option by looking at |ex-edit-index|.
'';
extraHelp = [ "wildchar" "ex-edit-index" ];
};
wildignore = {
type = extCommas;
vimDefault = [ ];
description = ''
A list of file patterns. A file that matches with one of these
patterns is ignored when expanding |wildcards|, completing file or
directory names, and influences the result of |expand()|, |glob()| and
|globpath()| unless a flag is passed to disable this.
The pattern is used like with |:autocmd|, see |autocmd-pattern|.
Also see 'suffixes'.
'';
extraHelp = [
"wildcards"
"expand()"
"glob()"
"globpath()"
":autocmd"
"autocmd-pattern"
"suffixes"
];
};
wildcardignorecase = {
type = bool;
vimDefault = false;
description = ''
When set case is ignored when completing file names and directories.
Has no effect when 'fileignorecase' is set.
Does not apply when the shell is used to expand wildcards, which
happens when there are special characters.
'';
extraHelp = [ "fileignorecase" ];
};
wildmenu = {
type = bool;
vimDefault = true;
description = ''
When 'wildmenu' is on, command-line completion operates in an enhanced
mode. On pressing 'wildchar' (usually <Tab>) to invoke completion,
the possible matches are shown.
'';
};
wildmode = {
type = str;
vimDefault = "full";
description = ''
Completion mode that is used for the character specified with
'wildchar'. It is a comma-separated list of up to four parts. Each
part specifies what to do for each consecutive use of 'wildchar'. The
first part specifies the behavior for the first use of 'wildchar',
The second part for the second use, etc.
Each part consists of a colon separated list consisting of the
following possible values:
"" Complete only the first match.
"full" Complete the next full match. After the last match,
the original string is used and then the first match
again. Will also start 'wildmenu' if it is enabled.
"longest" Complete till longest common string. If this doesn't
result in a longer string, use the next part.
"list" When more than one match, list all matches.
"lastused" When completing buffer names and more than one buffer
matches, sort buffers by time last used (other than
the current buffer).
'';
};
wildoptions = {
type = extCommasEnum [ "fuzzy" "pum" "tagfile" ];
vimDefault = [ "pum" "tagfile" ];
description = ''
A list of words that change how |cmdline-completion| is done.
The following values are supported:
fuzzy Use |fuzzy-matching| to find completion matches. When
this value is specified, wildcard expansion will not
be used for completion. The matches will be sorted by
the "best match" rather than alphabetically sorted.
This will find more matches than the wildcard
expansion. Currently fuzzy matching based completion
is not supported for file and directory names and
instead wildcard expansion is used.
pum Display the completion matches using the popup menu
in the same style as the |ins-completion-menu|.
tagfile When using CTRL-D to list matching tags, the kind of
tag and the file of the tag is listed. Only one match
is displayed per line. Often used tag kinds are:
d #define
f function
'';
extraHelp = [ "cmdline-completion" "ins-completion-menu" "fuzzy-matching" ];
};
winaltkeys = {
type = enum [ "no" "yes" "menu" ];
vimDefault = "menu";
description = ''
{only used in Win32}
Some GUI versions allow the access to menu entries by using the ALT
key in combination with a character that appears underlined in the
menu. This conflicts with the use of the ALT key for mappings and
entering special characters. This option tells what to do:
no Don't use ALT keys for menus. ALT key combinations can be
mapped, but there is no automatic handling.
yes ALT key handling is done by the windowing system. ALT key
combinations cannot be mapped.
menu Using ALT in combination with a character that is a menu
shortcut key, will be handled by the windowing system. Other
keys can be mapped.
If the menu is disabled by excluding 'm' from 'guioptions', the ALT
key is never used for the menu.
This option is not used for <F10>; on Win32.
'';
extraHelp = [ "guioptions" ];
};
window = {
type = number;
vimDefault = "screen height - 1";
description = ''
Window height used for |CTRL-F| and |CTRL-B| when there is only one
window and the value is smaller than 'lines' minus one. The screen
will scroll 'window' minus two lines, with a minimum of one.
When 'window' is equal to 'lines' minus one CTRL-F and CTRL-B scroll
in a much smarter way, taking care of wrapping lines.
When resizing the Vim window, the value is smaller than 1 or more than
or equal to 'lines' it will be set to 'lines' minus 1.
Note: Do not confuse this with the height of the Vim window, use
'lines' for that.
'';
extraHelp = [ "lines" ];
};
winheight = {
type = number;
vimDefault = 1;
description = ''
Minimal number of lines for the current window. This is not a hard
minimum, Vim will use fewer lines if there is not enough room. If the
focus goes to a window that is smaller, its size is increased, at the
cost of the height of other windows.
'';
};
winminheight = {
type = number;
vimDefault = 1;
description = ''
The minimal height of a window, when it's not the current window.
This is a hard minimum, windows will never become smaller.
When set to zero, windows may be "squashed" to zero lines (i.e. just a
status bar) if necessary. They will return to at least one line when
they become active (since the cursor has to have somewhere to go.)
Use 'winheight' to set the minimal height of the current window.
This option is only checked when making a window smaller. Don't use a
large number, it will cause errors when opening more than a few
windows. A value of 0 to 3 is reasonable.
'';
extraHelp = [ "winheight" ];
};
winminwidth = {
type = number;
vimDefault = 1;
description = ''
The minimal width of a window, when it's not the current window.
This is a hard minimum, windows will never become smaller.
When set to zero, windows may be "squashed" to zero columns (i.e. just
a vertical separator) if necessary. They will return to at least one
line when they become active (since the cursor has to have somewhere
to go.)
Use 'winwidth' to set the minimal width of the current window.
This option is only checked when making a window smaller. Don't use a
large number, it will cause errors when opening more than a few
windows. A value of 0 to 12 is reasonable.
'';
extraHelp = [ "winwidth" ];
};
winwidth = {
type = number;
vimDefault = 20;
description = ''
Minimal number of columns for the current window. This is not a hard
minimum, Vim will use fewer columns if there is not enough room. If
the current window is smaller, its size is increased, at the cost of
the width of other windows. Set it to 999 to make the current window
always fill the screen. Set it to a small number for normal editing.
The width is not adjusted after one of the commands to change the
width of the current window.
'winwidth' applies to the current window. Use 'winminwidth' to set
the minimal width for other windows.
'';
extraHelp = [ "winminwidth" ];
};
wrapscan = {
type = bool;
vimDefault = true;
description = ''
Searches wrap around the end of the file. Also applies to |]s| and
|[s|, searching for spelling mistakes.
'';
};
write = {
type = bool;
vimDefault = true;
description = ''
Allows writing files. When not set, writing a file is not allowed.
Can be used for a view-only mode, where modifications to the text are
still allowed. Can be reset with the |-m| or |-M| command line
argument. Filtering text is still possible, even though this requires
writing a temporary file.
'';
};
writeany = {
type = bool;
vimDefault = false;
description = ''
Allows writing to any file with no need for "!" override.
'';
};
writebackup = {
type = bool;
vimDefault = true;
description = ''
Make a backup before overwriting a file. The backup is removed after
the file was successfully written, unless the 'backup' option is
also on.
WARNING: Switching this option off means that when Vim fails to write
your buffer correctly and then, for whatever reason, Vim exits, you
lose both the original file and what you were writing. Only reset
this option if your file system is almost full and it makes the write
fail (and make sure not to exit Vim until the write was successful).
See |backup-table| for another explanation.
When the 'backupskip' pattern matches, a backup is not made anyway.
Depending on 'backupcopy' the backup is a new file or the original
file renamed (and a new file is written).
'';
extraHelp = [ "backup" "backup-table" "backupskip" "backupcopy" ];
};
writedelay = {
type = number;
vimDefault = 0;
description = ''
Only takes effect together with 'redrawdebug'.
The number of milliseconds to wait after each line or each flush
'';
extraHelp = [ "redrawdebug" ];
};
};
window = with lib.types; sharedGlobalOrWindow // {
arabic = {
type = bool;
vimDefault = false;
description = ''
This option can be set to start editing Arabic text.
'';
};
breakindent = {
type = bool;
vimDefault = false;
description = ''
Every wrapped line will continue visually indented (same amount of
space as the beginning of that line), thus preserving horizontal blocks
of text.
'';
};
breakindentopt = {
type = extCommas;
vimDefault = [ ];
description = ''
Settings for 'breakindent
'';
};
colorcolumn = {
type = extCommas;
vimDefault = [ ];
description = ''
'colorcolumn' is a comma-separated list of screen columns that are
highlighted with ColorColumn |hl-ColorColumn|. Useful to align
text. Will make screen redrawing slower.
'';
};
concealcursor = {
type = str;
vimDefault = "";
description = ''
Sets the modes in which text in the cursor line can also be concealed.
'';
};
conceallevel = {
type = number;
vimDefault = 0;
description = ''
Determine how text with the "conceal" syntax attribute |:syn-conceal|
is shown
'';
extraHelp = [ "syn-conceal" ];
};
cursorbind = {
type = bool;
vimDefault = false;
description = ''
When this option is set, as the cursor in the current
window moves other cursorbound windows (windows that also have
this option set) move their cursors to the corresponding line and
column. This option is useful for viewing the
differences between two versions of a file (see 'diff'); in diff mode,
inserted and deleted lines (though not characters within a line) are
taken into account.
'';
};
cursorcolumn = {
type = bool;
vimDefault = false;
description = ''
Highlight the screen column of the cursor with CursorColumn
|hl-CursorColumn|. Useful to align text. Will make screen redrawing
slower.
'';
extraHelp = [ "hl-CursorColumn" ];
};
cursorline = {
type = bool;
vimDefault = false;
description = ''
Highlight the text line of the cursor with CursorLine |hl-CursorLine|.
Useful to easily spot the cursor. Will make screen redrawing slower.
When Visual mode is active the highlighting isn't used to make it
easier to see the selected text.
'';
extraHelp = [ "hl-CursorLine" ];
};
cursorlineopt = {
type = extCommasEnum [ "line" "screenline" "number" "both" ];
vimDefault = [ "number" "line" ];
description = ''
list of settings for how 'cursorline' is displayed.
'';
};
diff = {
type = bool;
vimDefault = false;
description = ''
Join the current window in the group of windows that shows differences
between files.
'';
extraHelp = [ "diff-mode" ];
};
foldcolumn = {
type = str;
vimDefault = "0";
description = ''
When and how to draw the foldcolumn. Valid values are:
"auto": resize to the minimum amount of folds to display.
"auto:[1-9]": resize to accommodate multiple folds up to the selected level
"0": to disable foldcolumn
"[1-9]": to display a fixed number of columns
'';
extraHelp = [ "folding" ];
};
foldenable = {
type = bool;
vimDefault = false;
description = ''
When off, all folds are open. This option can be used to quickly
switch between showing all text unfolded and viewing the text with
folds (including manually opened or closed folds). It can be toggled
with the |zi| command. The 'foldcolumn' will remain blank when
'foldenable' is off.
'';
extraHelp = [ "folding" ];
};
foldexpr = {
type = str;
vimDefault = "0";
description = ''
The expression used for when 'foldmethod' is "expr". It is evaluated
for each line to obtain its fold level.
'';
extraHelp = [ "fold-expr" ];
};
foldignore = {
type = str;
vimDefault = "#";
description = ''
Used only when 'foldmethod' is "indent". Lines starting with
characters in 'foldignore' will get their fold level from surrounding
lines. White space is skipped before checking for this character.
'';
extraHelp = [ "fold-indent" ];
};
foldlevel = {
type = number;
vimDefault = 0;
description = ''
Sets the fold level: Folds with a higher level will be closed.
Setting this option to zero will close all folds. Higher numbers will
close fewer folds.
This option is set by commands like |zm|, |zM| and |zR|.
'';
extraHelp = [ "fold-foldlevel" ];
};
foldmarker = {
type = listOf str;
apply = x: assert (x == null || builtins.length x == 2 || abort "`foldmarker` must contain start and end markers in the list"); x;
vimDefault = [ "{{{" "}}}" ];
description = ''
The start and end marker used when 'foldmethod' is "marker".
'';
};
foldmethod = {
type = (enum [ "manual" "indent" "expr" "marker" "syntax" "diff" ]);
vimDefault = "manual";
description = ''
The kind of folding used for the current window.
'';
extraHelp = [
"fold-manual"
"fold-indent"
"fold-expr"
"fold-marker"
"fold-syntax"
"fold-diff"
];
};
foldminlines = {
type = number;
vimDefault = 1;
description = ''
Sets the number of screen lines above which a fold can be displayed
closed. Also for manually closed folds.
'';
};
foldnestmax = {
type = number;
vimDefault = 20;
description = ''
Sets the maximum nesting of folds for the "indent" and "syntax"
methods. This avoids that too many folds will be created. Using more
than 20 doesn't work, because the internal limit is 20.
'';
};
foldtext = {
type = str;
vimDefault = "foldtext()";
description = ''
An expression which is used to specify the text displayed for a closed fold.
'';
extraHelp = [ "fold-foldtext" ];
};
linebreak = {
type = bool;
vimDefault = false;
description = ''
If on, Vim will wrap long lines at a character in 'breakat' rather
than at the last character that fits on the screen. Unlike
'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
it only affects the way the file is displayed, not its contents.
'';
};
list = {
type = bool;
vimDefault = false;
description = ''
List mode: By default, show tabs as ">", trailing spaces as "-", and
non-breakable space characters as "+". Useful to see the difference
between tabs and spaces and for trailing blanks. Further changed by
the 'listchars' option.
'';
extraHelp = [ "listchars" ];
};
listchars = {
type = submodule {
options =
let
inherit (builtins) stringLength;
mkListcharsOption = k: { description, min ? 1, max ? 1 }: mkVimOptOption k {
type = lib.types.str;
apply = x:
assert (
(x == null || (stringLength x >= min /*&& stringLength x <= max*/))
# ^^^^^^^
# FIXME: stringLength doesn't support utf8 characters.
|| abort ''
The number of characters ${x} does not correspond to the boundaries
(min: ${toString min}; max: ${toString max})
''
);
x;
inherit description;
};
in
(mapAttrs mkListcharsOption {
eol = {
description = ''
Character to show at the end of each line. When
omitted, there is no extra character at the end of the
line.
'';
};
tab = {
description = ''
Two or three characters to be used to show a tab.
The third character is optional.
'';
max = 3;
};
space = {
description = ''
Character to show for a space. When omitted, spaces are left blank.
'';
};
multispace = {
description = ''
One or more characters to use cyclically to show for
multiple consecutive spaces. Overrides the "space"
setting, except for single spaces.
'';
max = 99;
};
lead = {
description = ''
Character to show for leading spaces. When omitted,
leading spaces are blank. Overrides the "space" and
"multispace" settings for leading spaces.
'';
};
leadmultispace = {
description = ''
Like the |lcs-multispace| value, but for leading
spaces only. Also overrides |lcs-lead| for leading
multiple spaces.
'';
max = 99;
};
trail = {
description = ''
Character to show for trailing spaces. When omitted,
trailing spaces are blank. Overrides the "space" and
"multispace" settings for trailing spaces.
'';
};
extends = {
description = ''
Character to show in the last column, when 'wrap' is
off and the line continues beyond the right of the
screen.
'';
};
precedes = {
description = ''
Character to show in the first visible column of the
physical line, when there is text preceding the
character visible in the first column.
'';
};
conceal = {
description = ''
Character to show in place of concealed text, when
'conceallevel' is set to 1. A space when omitted.
'';
};
nbsp = {
description = ''
Character to show for a non-breakable space character
(0xA0 (160 decimal) and U+202F).
'';
};
});
};
};
number = {
type = bool;
vimDefault = false;
description = ''
Print the line number in front of each line. When the 'n' option is
excluded from 'cpoptions' a wrapped line will not use the column of
line numbers.
Use the 'numberwidth' option to adjust the room for the line number.
When a long, wrapped line doesn't start with the first character, '-'
characters are put before the number.
For highlighting see |hl-LineNr|, |hl-CursorLineNr|, and the
|:sign-define| "numhl" argument.
The 'relativenumber' option changes the displayed number to be
relative to the cursor. Together with 'number' there are these
four combinations (cursor in line 3):
'';
extraHelp = [
"cpoptions"
"relativenumber"
"hl-LineNr"
"hl-CursorLineNr"
];
};
numberwidth = {
type = number;
vimDefault = 4;
description = ''
Minimal number of columns to use for the line number. Only relevant
when the 'number' or 'relativenumber' option is set or printing lines
with a line number. Since one space is always between the number and
the text, there is one less character for the number itself.
The value is the minimum width.
The minimum value is 1, the maximum value is 20.
'';
extraHelp = [ "number" "relativenumber" ];
};
relativenumber = {
type = bool;
vimDefault = false;
description = ''
Show the line number relative to the line with the cursor in front of
each line. Relative line numbers help you use the |count| you can
precede some vertical motion commands (e.g. j k + -) with, without
having to calculate it yourself. Especially useful in combination with
other commands (e.g. y d c < > gq gw =).
'';
};
rightleft = {
type = bool;
vimDefault = false;
description = ''
When on, display orientation becomes right-to-left, i.e., characters
that are stored in the file appear from the right to the left.
Using this option, it is possible to edit files for languages that
are written from the right to the left such as Hebrew and Arabic.
'';
extraHelp = [ "rileft.txt" ];
};
rightleftcmd = {
type = enum [ "search" ];
vimDefault = "search";
description = ''
Each word in this option enables the command line editing to work in
right-to-left mode for a group of commands:
search "/" and "?" commands
'';
extraHelp = [ "rightleft" ];
};
scroll = {
type = number;
vimDefault = 0;
description = ''
Number of lines to scroll with CTRL-U and CTRL-D commands. Will be
set to half the number of lines in the window when the window size
changes. This may happen when enabling the |status-line| or
'tabline' option after setting the 'scroll' option.
If you give a count to the CTRL-U or CTRL-D command it will
be used as the new value for 'scroll'. Reset to half the window
height with ":set scroll=0".
'';
extraHelp = [ "CTRL-U" "CTRL-D" ];
};
scrollbind = {
type = bool;
vimDefault = false;
description = ''
See also |scroll-binding|. When this option is set, the current
window scrolls as other scrollbind windows (windows that also have
this option set) scroll. This option is useful for viewing the
differences between two versions of a file, see 'diff'.
See |'scrollopt'| for options that determine how this option should be
interpreted.
This option is mostly reset when splitting a window to edit another
file. This means that ":split | edit file" results in two windows
with scroll-binding, but ":split file" does not.
'';
extraHelp = [ "scroll-binding" "scrollopt" ];
};
signcolumn = {
type = str;
vimDefault = "auto";
description = ''
When and how to draw the signcolumn. Valid values are:
"auto" only when there is a sign to display
"auto:[1-9]" resize to accommodate multiple signs up to the
given number (maximum 9), e.g. "auto:4"
"auto:[1-8]-[2-9]"
resize to accommodate multiple signs up to the
given maximum number (maximum 9) while keeping
at least the given minimum (maximum 8) fixed
space. The minimum number should always be less
than the maximum number, e.g. "auto:2-5"
"no" never
"yes" always
"yes:[1-9]" always, with fixed space for signs up to the given
number (maximum 9), e.g. "yes:3"
"number" display signs in the 'number' column. If the number
column is not present, then behaves like "auto".
'';
};
spell = {
type = bool;
vimDefault = false;
description = ''
When on spell checking will be done.
The languages are specified with 'spelllang'.
'';
extraHelp = [ "spelllang" ];
};
statuscolumn = {
type = str;
vimDefault = "";
description = ''
EXPERIMENTAL
When non-empty, this option determines the content of the area to the
side of a window, normally containing the fold, sign and number columns.
The format of this option is like that of 'statusline'.
'';
extraHelp = [ "statusline" ];
};
winblend = {
type = number;
vimDefault = 0;
description = ''
Enables pseudo-transparency for a floating window. Valid values are in
the range of 0 for fully opaque window (disabled) to 100 for fully
transparent background. Values between 0-30 are typically most useful.
UI-dependent. Works best with RGB colors. 'termguicolors'
'';
extraHelp = [ "termguicolors" ];
};
winhighlight = {
type = extCommas;
vimDefault = [ ];
description = ''
Window-local highlights. Comma-delimited list of highlight
|group-name| pairs "{hl-from}:{hl-to},..." where each {hl-from} is
a |highlight-groups| item to be overridden by {hl-to} group in
the window.
Note: highlight namespaces take precedence over 'winhighlight'.
See |nvim_win_set_hl_ns()| and |nvim_set_hl()|.
Highlights of vertical separators are determined by the window to the
left of the separator. The 'tabline' highlight of a tabpage is
decided by the last-focused window of the tabpage. Highlights of
the popupmenu are determined by the current window. Highlights in the
message area cannot be overridden.
'';
extraHelp = [
"group-name"
"highlight-groups"
"nvim_win_set_hl_ns()"
"nvim_set_hl"
];
};
winfixheight = {
type = bool;
vimDefault = false;
description = ''
Keep the window height when windows are opened or closed and
'equalalways' is set. Also for |CTRL-W_=|. Set by default for the
|preview-window| and |quickfix-window|.
The height may be changed anyway when running out of room.
'';
extraHelp = [ "equalalways" "CTRL-W_=" "preview-window" "quickfix-window" ];
};
winfixwidth = {
type = bool;
vimDefault = false;
description = ''
Keep the window width when windows are opened or closed and
'equalalways' is set. Also for |CTRL-W_=|.
The width may be changed anyway when running out of room.
'';
extraHelp = [ "equalalways" "CTRL-W_=" ];
};
wrap = {
type = bool;
vimDefault = true;
description = ''
This option changes how text is displayed. It doesn't change the text
in the buffer, see 'textwidth' for that.
When on, lines longer than the width of the window will wrap and
displaying continues on the next line. When off lines will not wrap
and only part of long lines will be displayed. When the cursor is
moved to a part that is not shown, the screen will scroll
horizontally.
The line will be broken in the middle of a word if necessary. See
'linebreak' to get the break at a word boundary.
'';
extraHelp = [ "textwidth" "linebreak" ];
};
};
buffer = with lib.types; sharedGlobalOrBuffer // {
autoindent = {
type = bool;
vimDefault = true;
description = ''
Copy indent from current line when starting a new line (typing <CR>
in Insert mode or when using the "o" or "O" command). If you do not
type anything on the new line except <BS> or CTRL-D and then type
<Esc>, CTRL-O or <CR>, the indent is deleted again.
'';
};
binary = {
type = bool;
vimDefault = false;
description = ''
This option should be set before editing a binary file. You can also
use the |-b| Vim argument.
'';
};
bomb = {
type = bool;
vimDefault = false;
description = ''
When writing a file and the following conditions are met, a BOM (Byte
Order Mark) is prepended to the file:
- this option is on
- the 'binary' option is off
- 'fileencoding' is "utf-8", "ucs-2", "ucs-4" or one of the little/big
endian variants.
'';
};
bufhidden = {
type = (enum [ "" "hide" "unload" "delete" "wipe" ]);
vimDefault = "";
description = ''
This option specifies what happens when a buffer is no longer
displayed in a window
'';
};
buflisted = {
type = bool;
vimDefault = true;
description = ''
When this option is set, the buffer shows up in the buffer list.
'';
};
buftype = {
type = (enum [ "" "acwrite" "help" "nofile" "nowrite" "quickfix" "terminal" "prompt" ]);
vimDefault = "";
description = ''
This option is used together with 'bufhidden' and 'swapfile' to
specify special kinds of buffers.
'';
extraHelp = [ "special-buffers" ];
};
cindent = {
type = bool;
vimDefault = false;
description = ''
Enables automatic C program indenting.
'';
};
cinkeys = {
type = str;
vimDefault = "0{,0},0),0],:,0#,!^F,o,O,e";
description = ''
A list of keys that, when typed in Insert mode, cause reindenting of
the current line.
'';
};
cinoptions = {
type = str;
vimDefault = "";
description = ''
The 'cinoptions' affect the way 'cindent' reindents lines in a C
program.
'';
extraHelp = [ "cinoptions-values" ];
};
cinwords = {
type = extCommas;
vimDefault = [ "if" "else" "while" "do" "for" "switch" ];
description = ''
These keywords start an extra indent in the next line when
'smartindent' or 'cindent' is set. For 'cindent' this is only done at
an appropriate place (inside {}).
'';
};
cinscopedecls = {
type = extCommas;
vimDefault = [ "public" "protected" "private" ];
description = ''
Keywords that are interpreted as a C++ scope declaration by |cino-g|.
Useful e.g. for working with the Qt framework that defines additional
scope declarations "signals", "public slots" and "private slots"
'';
};
comments = {
type = extCommas;
vimDefault = ''
[
"s1/*"
"mb:8"
"ex:*/"
"://"
"b:#"
":%"
":XCOMM"
"n:>"
"fb:-"
]
'';
description = ''
list of strs that can start a comment line.
'';
extraHelp = [ "format-comments" ];
};
commentstring = {
type = str;
vimDefault = "";
description = ''
A template for a comment. The "%s" in the value is replaced with the
comment text. Currently only used to add markers for folding, see
|fold-marker|.
'';
extraHelp = [ "fold-marker" ];
};
complete = {
type = extCommas;
vimDefault = [ "." "w" "b" "u" "t" ];
description = ''
This option specifies how keyword completion |ins-completion| works
when CTRL-P or CTRL-N are used.
'';
extraHelp = [ "ins-completion" ];
};
completefunc = {
type = str;
vimDefault = "";
description = ''
This option specifies a function to be used for Insert mode completion
with CTRL-X CTRL-U.
'';
extraHelp = [
"complete-functions"
"i_CTRL-X_CTRL-U"
];
};
copyindent = {
type = bool;
vimDefault = false;
description = ''
Copy the structure of the existing lines indent when autoindenting a
new line. Normally the new indent is reconstructed by a series of
tabs followed by spaces as required (unless |'expandtab'| is enabled,
in which case only spaces are used). Enabling this option makes the
new line copy whatever characters were used for indenting on the
existing line.
'';
extraHelp = [
"expandtab"
"preverseindent"
];
};
endofline = {
type = bool;
vimDefault = true;
description = ''
When writing a file and this option is off and the 'binary' option
is on, or 'fixeol' option is off, no <EOL> will be written for the
last line in the file. This option is automatically set or reset when
starting to edit a new file, depending on whether file has an <EOL>
for the last line in the file. Normally you don't have to set or
reset this option.
'';
};
expandtab = {
type = bool;
vimDefault = false;
description = ''
In Insert mode: Use the appropriate number of spaces to insert a
<Tab>. Spaces are used in indents with the '>' and '<' commands and
when 'autoindent' is on. To insert a real tab when 'expandtab' is
on, use CTRL-V<Tab>. See also |:retab| and |ins-expandtab|.
'';
};
fileencoding = {
type = str;
vimDefault = "";
description = ''
File-content encoding for the current buffer. Conversion is done with
iconv() or as specified with 'charconvert'.
When 'fileencoding' is not UTF-8, conversion will be done when
writing the file. For reading see below.
When 'fileencoding' is empty, the file will be saved with UTF-8
encoding (no conversion when reading or writing a file).
'';
};
fileformat = {
type = (enum [ "dos" "unix" "mac" ]);
vimDefault = ''
Windows default: "dos",
Unix default: "unix"
'';
description = ''
This gives the <EOL> of the current buffer, which is used for
reading/writing the buffer from/to a file:
- dos <CR><NL>
- unix <NL>
- mac <CR>
When "dos" is used, CTRL-Z at the end of a file is ignored.
'';
};
filetype = {
type = str;
vimDefault = "";
description = ''
When this option is set, the FileType autocommand event is triggered.
Otherwise this option does not always reflect the current file type.
This option is normally set when the file type is detected. To enable
this use the ":filetype on" command. |:filetype|
When a dot appears in the value then this separates two filetype names.
'';
extraHelp = [ ":filetype" ];
};
fixendofline = {
type = bool;
vimDefault = true;
description = ''
When writing a file and this option is on, <EOL> at the end of file
will be restored if missing. Turn this option off if you want to
preserve the situation from the original file.
When the 'binary' option is set the value of this option doesn't
matter.
'';
extraHelp = [
"binary"
"endofline"
"eol-and-eof"
];
};
formatexpr = {
type = str;
vimDefault = "";
description = ''
Expression which is evaluated to format a range of lines for the |gq|
operator or automatic formatting (see 'formatoptions'). When this
option is empty 'formatprg' is used.
'';
};
formatlistpat = {
type = str;
vimDefault = ''^\s*\d\+[\]:.)}\t ]\s*'';
description = ''
A pattern that is used to recognize a list header. This is used for
the "n" flag in 'formatoptions'.
The default recognizes a number, followed by an optional punctuation
'';
extraHelp = [ "formatoptions" ];
};
formatoptions = {
type = str;
vimDefault = "tcqj";
description = ''
This is a sequence of letters which describes how automatic
formatting is to be done.
'';
extraHelp = [ "fo-table" ];
};
iminsert = {
type = number;
vimDefault = 0;
description = ''
Specifies whether :lmap or an Input Method (IM) is to be used in
Insert mode. Valid values:
- 0 :lmap is off and IM is off
- 1 :lmap is ON and IM is off
- 2 :lmap is off and IM is ON
'';
};
imsearch = {
type = number;
vimDefault = -1;
description = ''
Specifies whether :lmap or an Input Method (IM) is to be used when
entering a search pattern. Valid values:
- -1 the value of 'iminsert' is used, makes it look like
'iminsert' is also used when typing a search pattern
- 0 :lmap is off and IM is off
- 1 :lmap is ON and IM is off
- 2 :lmap is off and IM is ON
'';
};
includexpr = {
type = str;
vimDefault = "";
description = ''
Expression to be used to transform the str found with the 'include'
option to a file name.
'';
};
indentexpr = {
type = str;
vimDefault = "";
description = ''
Expression which is evaluated to obtain the proper indent for a line.
It is used when a new line is created, for the |=| operator and
in Insert mode as specified with the 'indentkeys' option.
'';
};
indentkeys = {
type = str;
vimDefault = "0{,0},0),0],:,0#,!^F,o,O,e";
description = ''
A list of keys that, when typed in Insert mode, cause reindenting of
the current line.
'';
};
infercase = {
type = bool;
vimDefault = false;
description = ''
When doing keyword completion in insert mode |ins-completion|, and
'ignorecase' is also on, the case of the match is adjusted depending
on the typed text. If the typed text contains a lowercase letter
where the match has an upper case letter, the completed part is made
lowercase.
'';
};
iskeyward = {
type = str;
vimDefault = "@,48-57,_,192-255";
description = ''
Keywords are used in searching and recognizing with many commands:
"w", "*", "[i", etc. It is also used for "\k" in a |pattern|.
'';
extraHelp = [ "pattern" ];
};
keymap = {
type = str;
vimDefault = "";
description = ''
Name of a keyboard mapping.
'';
extraHelp = [ "mbyte-keymap" ];
};
lisp = {
type = bool;
vimDefault = false;
description = ''
Lisp mode: When <Enter> is typed in insert mode set the indent for
the next line to Lisp standards (well, sort of). Also happens with
"cc" or "S".
'';
};
lispoptions = {
type = listOf str;
vimDefault = [ ];
description = ''
list of items that influence the Lisp indenting when
enabled with the |'lisp'| option. Currently only one item is
supported:
- expr:1 use 'indentexpr' for Lisp indenting when it is set
- expr:0 do not use 'indentexpr' for Lisp indenting (default)
'';
extraHelp = [ "list" ];
};
matchpairs = {
type = extCommas;
vimDefault = [ "(:)" "{:}" "[:]" ];
description = ''
Characters that form pairs. The |%| command jumps from one to the other.
Only character pairs are allowed that are different, thus you cannot
jump between two double quotes.
The characters must be separated by a colon.
'';
};
modeline = {
type = bool;
vimDefault = ''
true (false for root)
'';
description = ''
If 'modeline' is on 'modelines' gives the number of lines that is
checked for set commands. If 'modeline' is off or 'modelines' is zero
no lines are checked.
'';
extraHelp = [ "modelines" ];
};
modified = {
type = bool;
vimDefault = false;
description = ''
When on, the buffer is considered to be modified.
'';
extraHelp = [ "gzip-example" ];
};
nrformats = {
type = extCommasEnum [ "alpha" "octal" "hex" "bin" "unsigned" ];
vimDefault = [ "bin" "hex" ];
description = ''
This defines what bases Vim will consider for numbers when using the
CTRL-A and CTRL-X commands for adding to and subtracting from a number
respectively;
'';
extraHelp = [ "CTRL-A" "CTRL-X" ];
};
omnifunc = {
type = str;
vimDefault = "";
description = ''
This option specifies a function to be used for Insert mode omni
completion with CTRL-X CTRL-O.
'';
extraHelp = [
"i_CTRL-X_CTRL-O"
"complete-functions"
];
};
preserveindent = {
type = bool;
vimDefault = false;
description = ''
When changing the indent of the current line, preserve as much of the
indent structure as possible. Normally the indent is replaced by a
series of tabs followed by spaces as required (unless |'expandtab'| is
enabled, in which case only spaces are used). Enabling this option
means the indent will preserve as many existing characters as possible
for indenting, and only add additional tabs or spaces as required.
'expandtab' does not apply to the preserved white space, a Tab remains
a Tab.
NOTE: When using ">>" multiple times the resulting indent is a mix of
tabs and spaces. You might not like this.
'';
extraHelp = [ "expandtab" "copyindent" ":retab" ];
};
quoteescape = {
type = str;
vimDefault = ''\'';
description = ''
The characters that are used to escape quotes in a string. Used for
objects like a', a" and a` |a'|.
When one of the characters in this option is found inside a string,
the following character will be skipped. The default value makes the
text "foo\"bar\\" considered to be one string.
'';
extraHelp = [ "a'" ];
};
readonly = {
type = bool;
vimDefault = false;
description = ''
If on, writes fail unless you use a '!'. Protects you from
accidentally overwriting a file. Default on when Vim is started
in read-only mode ("vim -R") or when the executable is called "view".
When using ":w!" the 'readonly' option is reset for the current
buffer
'';
extraHelp = [ "cpoptions" ":view" ];
};
scrollback = {
type = number;
vimDefault = 10000;
description = ''
Maximum number of lines kept beyond the visible screen. Lines at the
top are deleted if new lines exceed this limit.
Minimum is 1, maximum is 100000.
Only in |terminal| buffers.
'';
extraHelp = [ "terminal" ];
};
shiftwidth = {
type = number;
vimDefault = 8;
description = ''
Number of spaces to use for each step of (auto)indent. Used for
|'cindent'|, |>>|, |<<|, etc.
When zero the 'tabstop' value will be used.
'';
extraHelp = [
"cindent"
">>"
"<<"
"tabstop"
];
};
smartindent = {
type = bool;
vimDefault = false;
description = ''
Do smart autoindenting when starting a new line. Works for C-like
programs, but can also be used for other languages. 'cindent' does
something like this, works better in most cases, but is more strict,
see |C-indenting|. When 'cindent' is on or 'indentexpr' is set,
setting 'si' has no effect. 'indentexpr' is a more advanced
alternative.
Normally 'autoindent' should also be on when using 'smartindent'.
An indent is automatically inserted:
- After a line ending in "{".
- After a line starting with a keyword from 'cinwords'.
- Before a line starting with "}" (only with the "O" command).
'';
extraHelp = [ "cindent" "C-indenting" "indentexpr" "autoindent" ];
};
softtabstop = {
type = number;
vimDefault = 0;
description = ''
Number of spaces that a <Tab> counts for while performing editing
operations, like inserting a <Tab> or using <BS>. It "feels" like
<Tab>s are being inserted, while in fact a mix of spaces and <Tab>s is
used. This is useful to keep the 'tabstop' setting at its standard value
of 8, while being able to edit like it is set to 'softtabstop'.
'';
extraHelp = [ "tabstop" ];
};
spellcapcheck = {
type = str;
vimDefault = ''"[.?!]\_[\])'" \t]\+'';
description = ''
Pattern to locate the end of a sentence. The following word will be
checked to start with a capital letter.
Only used when 'spell' is set.
'';
extraHelp = [ "spell" ];
};
spellfile = {
type = listOf (either str path);
vimDefault = [ ];
description = ''
Name of the word list file where words are added for the |zg| and |zw|
commands. It must end in ".{encoding}.add". You need to include the
path, otherwise the file is placed in the current directory.
The path may include characters from 'isfname', space, comma and '@'.
'';
extraHelp = [ "isfname" ];
};
spellang = {
type = listOf str;
vimDefault = "en";
description = ''
The word list name must consist of alphanumeric characters, a dash or
an underscore. It should not include a comma or dot. Using a dash is
recommended to separate the two letter language name from a
specification.
'';
};
spelloptions = {
type = extCommasEnum [ "camel" "noplainbuffer" ];
vimDefault = [ ];
description = ''
list of options for spell checking:
camel When a word is CamelCased, assume "Cased" is a
separate word: every upper-case character in a word
that comes after a lower case character indicates the
start of a new word.
noplainbuffer Only spellcheck a buffer when 'syntax' is enabled,
or when extmarks are set within the buffer. Only
designated regions of the buffer are spellchecked in
this case.
'';
};
suffixesadd = {
type = extCommas;
vimDefault = [ ];
description = ''
list of suffixes, which are used when searching for a
file for the "gf", "[I", etc. commands.
'';
};
swapfile = {
type = bool;
vimDefault = true;
description = ''
Use a swapfile for the buffer. This option can be reset when a
swapfile is not wanted for a specific buffer. For example, with
confidential information that even root must not be able to access.
Careful: All text will be in memory:
- Don't use this for big files.
- Recovery will be impossible!
A swapfile will only be present when |'updatecount'| is non-zero and
'swapfile' is set.
When 'swapfile' is reset, the swap file for the current buffer is
immediately deleted. When 'swapfile' is set, and 'updatecount' is
non-zero, a swap file is immediately created.
'';
extraHelp = [ "updatecount" "swap-file" "dictionary" ];
};
synmaxcol = {
type = number;
vimDefault = 3000;
description = ''
Maximum column in which to search for syntax items. In long lines the
text after this column is not highlighted and following lines may not
be highlighted correctly, because the syntax state is cleared.
This helps to avoid very slow redrawing for an XML file that is one
long line.
Set to zero to remove the limit.
'';
};
syntax = {
type = str;
vimDefault = "";
description = ''
When this option is set, the syntax with this name is loaded, unless
syntax highlighting has been switched off with ":syntax off".
Otherwise this option does not always reflect the current syntax (the
b:current_syntax variable does).
This option is most useful in a modeline, for a file which syntax is
not automatically recognized.
'';
extraHelp = [ "modeline" ];
};
tabstop = {
type = number;
vimDefault = 8;
description = ''
Number of spaces that a <Tab> in the file counts for. Also see
the |:retab| command, and the 'softtabstop' option.
Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places.
The value must be more than 0 and less than 10000.
'';
extraHelp = [ ":retab" "softtabstop" ];
};
tagfunc = {
type = str;
vimDefault = "";
description = ''
This option specifies a function to be used to perform tag searches.
The function gets the tag pattern and should return a List of matching
tags. See |tag-function| for an explanation of how to write the
function and an example.
'';
extraHelp = [ "tag-function" ];
};
textwidth = {
type = number;
vimDefault = 0;
description = ''
Maximum width of text that is being inserted. A longer line will be
broken after white space to get this width. A zero value disables
this.
When 'textwidth' is zero, 'wrapmargin' may be used. See also
'formatoptions' and |ins-textwidth|.
When 'formatexpr' is set it will be used to break the line.
'';
extraHelp = [ "wrapmargin" "formatoptions" "formatexpr" "ins-textwidth" ];
};
undofile = {
type = bool;
vimDefault = false;
description = ''
When on, Vim automatically saves undo history to an undo file when
writing a buffer to a file, and restores undo history from the same
file on buffer read.
The directory where the undo file is stored is specified by 'undodir'.
For more information about this feature see |undo-persistence|.
The undo file is not read when 'undoreload' causes the buffer from
before a reload to be saved for undo.
When 'undofile' is turned off the undo file is NOT deleted.
'';
extraHelp = [ "undo-persistence" "undodir" "undoreload" ];
};
varsofttabstop = {
type = str;
vimDefault = "";
description = ''
A list of the number of spaces that a <Tab> counts for while editing,
such as inserting a <Tab> or using <BS>. It "feels" like variable-
width <Tab>s are being inserted, while in fact a mixture of spaces
and <Tab>s is used. Tab widths are separated with commas, with the
final value applying to all subsequent tabs.
Note that the value of |'softtabstop'| will be ignored while
'varsofttabstop' is set.
'';
extraHelp = [ "softtabstop" ];
};
vartabstop = {
type = str;
vimDefault = "";
description = ''
A list of the number of spaces that a <Tab> in the file counts for,
separated by commas. Each value corresponds to one tab, with the
final value applying to all subsequent tabs.
Note that the value of |'tabstop'| will be ignored while 'vartabstop'
is set.
'';
extraHelp = [ "tabstop" ];
};
wrapmargin = {
type = bool;
vimDefault = true;
description = ''
Number of characters from the right window border where wrapping
starts. When typing text beyond this limit, an <EOL> will be inserted
and inserting continues on the next line.
Options that add a margin, such as 'number' and 'foldcolumn', cause
the text width to be further reduced.
When 'textwidth' is non-zero, this option is not used.
See also 'formatoptions' and |ins-textwidth|.
'';
extraHelp = [ "number" "foldcolumn" "textwidth" "formatoptions" "ins-textwidth" ];
};
};
opts = mapAttrs (_: mapAttrs mkVimOptOption) {
inherit global window buffer;
};
in
opts // { all = opts.global // opts.window // opts.buffer; }