From 5933b5142f2b9b4541025386248ed644040ce520 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Thu, 16 May 2024 16:54:10 +0300 Subject: [PATCH] modules/vim: add more options --- modules/vim/options.nix | 521 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 521 insertions(+) diff --git a/modules/vim/options.nix b/modules/vim/options.nix index c452dca..6d401ff 100644 --- a/modules/vim/options.nix +++ b/modules/vim/options.nix @@ -62,6 +62,42 @@ let ''; 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 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" ]; + }; }; sharedGlobalOrBuffer = with lib; with types; { @@ -1661,9 +1697,350 @@ let "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 . + ''; + extraHelp = [ "ignorecase" ]; + }; + + smarttab = { + type = bool; + vimDefault = true; + description = '' + When on, a in front of a line inserts blanks according to + 'shiftwidth'. 'tabstop' or 'softtabstop' is used in other places. A + will delete a 'shiftwidth' worth of space at the start of the + line. + When off, a 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 or spaces) depends on the 'expandtab' + option. Also see |ins-expandtab|. When 'expandtab' is not set, the + number of spaces is minimized by using s. + ''; + extraHelp = [ + "shiftwidth" + "tabstop" + "softtabstop" + "shift-left-right" + "ins-expandtab" + "expandtab" + ]; + }; + + spellsuggest = { + type = commas; + 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. + ''; + }; }; window = with lib; with types; sharedGlobalOrWindow // { @@ -2126,6 +2503,51 @@ let ''; 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" ]; + }; }; buffer = with lib; with types; sharedGlobalOrBuffer // { @@ -2647,6 +3069,105 @@ let ''; 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 counts for while performing editing + operations, like inserting a or using . It "feels" like + s are being inserted, while in fact a mix of spaces and 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 = listOf (enum [ "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. + ''; + }; + }; in mapAttrs (_: mapAttrs mkVimOptOption) {