diff options
Diffstat (limited to 'nvim/dot-config/nvim-final')
| -rw-r--r-- | nvim/dot-config/nvim-final/after/ftplugin/lua.lua | 3 | ||||
| -rw-r--r-- | nvim/dot-config/nvim-final/colors/solarized.lua | 490 | ||||
| -rw-r--r-- | nvim/dot-config/nvim-final/init.lua | 713 | ||||
| -rw-r--r-- | nvim/dot-config/nvim-final/lua/mo/zen.lua | 89 | ||||
| -rw-r--r-- | nvim/dot-config/nvim-final/nvim-pack-lock.json | 12 | ||||
| -rw-r--r-- | nvim/dot-config/nvim-final/plugin/autocommands.lua | 7 | ||||
| -rw-r--r-- | nvim/dot-config/nvim-final/stylua.toml | 12 |
7 files changed, 1326 insertions, 0 deletions
diff --git a/nvim/dot-config/nvim-final/after/ftplugin/lua.lua b/nvim/dot-config/nvim-final/after/ftplugin/lua.lua new file mode 100644 index 0000000..53dd1d2 --- /dev/null +++ b/nvim/dot-config/nvim-final/after/ftplugin/lua.lua @@ -0,0 +1,3 @@ +vim.cmd([[ +setlocal keywordprg=:help +]]) diff --git a/nvim/dot-config/nvim-final/colors/solarized.lua b/nvim/dot-config/nvim-final/colors/solarized.lua new file mode 100644 index 0000000..090090b --- /dev/null +++ b/nvim/dot-config/nvim-final/colors/solarized.lua @@ -0,0 +1,490 @@ +local function oklab_to_linear_rgb(L, a, b) + -- Oklab to LMS conversion + -- Reference: Björn Ottosson, "A perceptual color space for image processing" + local l = L + 0.3963377774 * a + 0.2158037573 * b + local m = L - 0.1055613458 * a - 0.0638541728 * b + local s = L - 0.0894841775 * a - 1.2914855480 * b + + -- LMS to linear RGB + -- Cube the LMS values (inverse of cube root) + local l3, m3, s3 = l * l * l, m * m * m, s * s * s + + -- Linear RGB transformation matrix + local r = 4.0767416621 * l3 - 3.3077115913 * m3 + 0.2309699292 * s3 + local g = -1.2684380046 * l3 + 2.6097574011 * m3 - 0.3413193965 * s3 + local b_out = -0.0041960863 * l3 - 0.7034186147 * m3 + 1.7076147010 * s3 + + return r, g, b_out +end + +local function linear_to_srgb_component(c) + -- sRGB gamma correction (companding) + -- Reference: IEC 61966-2-1:1999 + if c <= 0.0031308 then + return c * 12.92 -- Linear segment + else + return 1.055 * (c ^ (1 / 2.4)) - 0.055 -- Power function (gamma ≈ 2.2) + end +end + +local function oklab_to_srgb(L, a, b) + local r, g, b_comp = oklab_to_linear_rgb(L, a, b) + + r = linear_to_srgb_component(r) + g = linear_to_srgb_component(g) + b_comp = linear_to_srgb_component(b_comp) + + -- Clamp and convert to 8-bit + r = math.floor(math.max(0, math.min(1, r)) * 255 + 0.5) + g = math.floor(math.max(0, math.min(1, g)) * 255 + 0.5) + b_comp = math.floor(math.max(0, math.min(1, b_comp)) * 255 + 0.5) + + return string.format('#%02x%02x%02x', r, g, b_comp) +end + +-- ═══════════════════════════════════════════════════════════════════════════ +-- MONOTONE COLORS +-- ═══════════════════════════════════════════════════════════════════════════ +local base03 = oklab_to_srgb(0.267337, -0.037339, -0.031128) +local base02 = oklab_to_srgb(0.309207, -0.039852, -0.033029) +local base01 = oklab_to_srgb(0.523013, -0.021953, -0.017864) +local base00 = oklab_to_srgb(0.568165, -0.021219, -0.019038) + +local base0 = oklab_to_srgb(0.709236, -0.023223, -0.013451) +local base1 = oklab_to_srgb(0.697899, -0.015223, -0.004594) +local base2 = oklab_to_srgb(0.930609, -0.001091, 0.026010) +local base3 = oklab_to_srgb(0.973528, -0.000043, 0.026053) + +-- ═══════════════════════════════════════════════════════════════════════════ +-- ACCENT COLORS +-- ═══════════════════════════════════════════════════════════════════════════ +local yellow = oklab_to_srgb(0.654479, 0.010005, 0.133641) +local orange = oklab_to_srgb(0.63, 0.133661 * 0.69, 0.110183 * 0.69) +local red = oklab_to_srgb(0.63, 0.183749 * 0.72, 0.094099 * 0.72) +local magenta = oklab_to_srgb(0.592363, 0.201958, -0.014497) +local violet = oklab_to_srgb(0.582316, 0.019953, -0.124557) +local blue = oklab_to_srgb(0.614879, -0.059069, -0.126255) +local cyan = oklab_to_srgb(0.643664, -0.101063, -0.013097) +local green = oklab_to_srgb(0.644391, -0.072203, 0.132448) + +-- ═══════════════════════════════════════════════════════════════════════════ +-- MODE SELECTION +-- ═══════════════════════════════════════════════════════════════════════════ + +-- Set to 'dark' or 'light' +local mode = vim.o.background or 'dark' + +local colors = {} + +if mode == 'dark' then + -- Dark mode: dark background, light text + colors.bg = base03 + colors.bg_highlight = base02 + colors.fg_comment = base01 + colors.fg = base0 + colors.fg_emphasis = base1 +else + colors.bg = base3 + colors.bg_highlight = base2 + colors.fg_comment = base1 + colors.fg = base00 + colors.fg_emphasis = base01 +end + +-- Accent colors are the same in both modes +colors.yellow = yellow +colors.orange = orange +colors.red = red +colors.magenta = magenta +colors.violet = violet +colors.blue = blue +colors.cyan = cyan +colors.green = green + +colors.cursorline_bg = colors.bg_highlight +colors.selection_bg = base02 +colors.visual_bg = base02 + +vim.g.colors_name = 'dicom' + +local function h(group, properties) + vim.api.nvim_set_hl(0, group, properties) +end + +local function hex_to_rgb(hex) + hex = hex:gsub('#', '') + return { + tonumber(hex:sub(1, 2), 16), + tonumber(hex:sub(3, 4), 16), + tonumber(hex:sub(5, 6), 16), + } +end + +local function rgb_to_hex(c) + return string.format('#%02x%02x%02x', c[1], c[2], c[3]) +end + +local function blend(fg, t, target_bg) + local a, b = hex_to_rgb(fg), hex_to_rgb(target_bg or colors.bg) + local c = { + math.floor(a[1] * (1 - t) + b[1] * t + 0.5), + math.floor(a[2] * (1 - t) + b[2] * t + 0.5), + math.floor(a[3] * (1 - t) + b[3] * t + 0.5), + } + return rgb_to_hex(c) +end + +-- ============================================================================= +-- Research-Driven Syntax Highlighting Strategy +-- Based on: Hannebauer et al. (2018), Tonsky (2025), Schloss (2023) +-- ============================================================================= + +-- 1. Core Editor Surface +h('Normal', { fg = colors.fg, bg = colors.bg }) +h('EndOfBuffer', { fg = colors.bg }) +h('CursorLine', { bg = colors.cursorline_bg }) +h('CursorLineNr', { fg = colors.yellow, bold = true }) +h('LineNr', { fg = colors.fg_comment }) +h('WinSeparator', { fg = colors.bg_highlight, bg = colors.bg }) + +-- 2. Visual & Search (High Arousal) +h('Visual', { bg = colors.selection_bg }) +h('Search', { fg = colors.bg, bg = colors.yellow }) +h('IncSearch', { fg = colors.bg, bg = colors.orange }) + +h('Keyword', { fg = colors.green }) +h('Statement', { fg = colors.green }) +h('Conditional', { fg = colors.green }) +h('Repeat', { fg = colors.green }) + +h('Function', { fg = colors.blue }) + +-- Types +h('Type', { fg = colors.yellow }) +h('StorageClass', { fg = colors.yellow }) +h('Structure', { fg = colors.yellow }) +h('Typedef', { fg = colors.yellow }) + +-- Constants +h('Constant', { fg = colors.cyan }) +h('String', { fg = colors.cyan }) +h('Character', { fg = colors.cyan }) +h('Number', { fg = colors.cyan }) +h('Boolean', { fg = colors.cyan }) +h('Float', { fg = colors.cyan }) + +-- PreProc +h('PreProc', { fg = colors.orange }) +h('Include', { fg = colors.orange }) +h('Define', { fg = colors.orange }) +h('Macro', { fg = colors.orange }) +h('PreCondit', { fg = colors.orange }) + +-- Special Characters - Cyan (escape/special) +h('Special', { fg = colors.cyan }) + +h('Identifier', { fg = colors.fg }) +h('Variable', { fg = colors.fg }) +h('Operator', { fg = colors.fg }) + +h('Delimiter', { fg = colors.fg }) +h('NonText', { fg = colors.bg_highlight }) + +-- ----------------------------------------------------------------------------- +-- Layer 6: COMMENTS +-- Luminance: L=comment (dimmest) +-- ----------------------------------------------------------------------------- + +h('Comment', { fg = colors.fg_comment, italic = true }) + +-- ============================================================================= +-- 4. UI Components +-- ============================================================================= + +h('StatusLine', { bg = colors.fg, fg = colors.bg_highlight }) +h('StatusLineNC', { bg = colors.fg_comment, fg = colors.bg_highlight }) +h('WildMenu', { fg = colors.bg, bg = colors.blue }) +h('ColorColumn', { bg = colors.bg_highlight }) + +-- Popup Menu +h('Pmenu', { fg = colors.fg, bg = colors.bg_highlight }) +h('PmenuSel', { fg = colors.fg_emphasis, bg = colors.selection, reverse = true }) +h('PmenuSbar', { bg = colors.bg_highlight }) +h('PmenuThumb', { bg = colors.fg_comment }) +h('PmenuMatch', { fg = colors.cyan, bold = true }) +h('PmenuMatchSel', { bg = colors.selection, bold = true, fg = colors.fg_emphasis }) + +-- Float & Borders +h('NormalFloat', { bg = colors.bg_highlight }) +h('FloatBorder', { fg = colors.comment }) +h('Title', { fg = colors.bg_highlight, bold = true }) + +-- ============================================================================= +-- 5. Diagnostics - Semantic Consistency +-- ============================================================================= +-- +-- Research basis (Schloss 2023): +-- Color-concept associations are universal: +-- Red → danger/anger (cross-cultural consistency) +-- Orange → warning/caution +-- Blue → information/calm +-- Cyan → hint/auxiliary +-- +-- This mapping perfectly aligns with research! ✓ +-- + +h('ErrorMsg', { fg = colors.red, bold = true }) +h('WarningMsg', { fg = colors.orange }) +h('ModeMsg', { fg = colors.cyan, bold = true }) +h('Todo', { fg = colors.violet, bold = true, reverse = true }) +h('MatchParen', { bg = colors.selection_bg, bold = true }) + +-- QuickFix & List +h('qfFileName', { fg = colors.blue }) +h('qfLineNr', { fg = colors.cyan }) +h('qfSeparator', { fg = colors.bg_highlight }) +h('QuickFixLine', { bg = colors.cursorline_bg, bold = true }) +h('qfText', { link = 'Normal' }) + +-- Underlined/Directory +h('Underlined', { fg = colors.violet, underline = true }) +h('Directory', { fg = colors.blue }) + +-- sync to terminal +h('Magenta', { fg = colors.magenta }) +h('Violet', { fg = colors.violet }) + +-- ============================================================================= +-- 6. Treesitter Highlights (Optimized) +-- ============================================================================= + +-- Neutral Layer ⭐️ KEY OPTIMIZATION +h('@variable', { link = 'Identifier' }) -- Neutral +h('@variable.builtin', { link = '@variable' }) -- Neutral +h('@variable.parameter', { link = '@variable' }) -- Neutral +h('@variable.parameter.builtin', { link = '@variable.builtin' }) +h('@variable.member', { link = '@variable' }) -- Neutral +h('@parameter', { fg = colors.fg }) -- Neutral +h('@property', { fg = colors.fg }) -- Neutral + +-- Constants Layer ⭐️ OPTIMIZED +h('@constant', { fg = colors.cyan }) -- Constants = frozen +h('@constant.builtin', { fg = colors.cyan }) +h('@constant.macro', { fg = colors.cyan }) + +-- Modules/Namespaces +h('@module', { link = 'Identifier' }) +h('@module.builtin', { link = '@module' }) + +-- Labels +h('@label', { link = 'Label' }) + +-- Strings Layer +h('@string', { link = 'String' }) +h('@string.documentation', { link = 'Comment' }) +h('@string.regexp', { link = '@string' }) +h('@string.escape', { link = 'Special' }) +h('@string.special', { link = '@string' }) +h('@string.special.symbol', { link = '@string' }) +h('@string.special.path', { link = '@string' }) +h('@string.special.url', { link = 'Underlined' }) + +h('@character', { link = 'String' }) +h('@character.special', { link = '@character' }) + +-- Numbers Layer +h('@boolean', { link = 'Constant' }) +h('@number', { link = 'Number' }) +h('@number.float', { link = 'Float' }) + +-- Types Layer +h('@type', { link = 'Type' }) +h('@type.builtin', { link = 'Type' }) +h('@type.definition', { link = 'Type' }) + +-- Attributes/Decorators +h('@attribute', { link = 'Macro' }) +h('@attribute.builtin', { link = 'Special' }) + +-- Functions Layer +h('@function', { link = 'Function' }) +h('@function.builtin', { link = 'Function' }) +h('@function.call', { link = '@function' }) +h('@function.macro', { link = '@function' }) +h('@function.method', { link = '@function' }) +h('@function.method.call', { link = '@function' }) +h('@constructor', { link = 'Function' }) + +-- Operators - Neutral +h('@operator', { link = 'Operator' }) + +-- Keywords Layer +h('@keyword', { link = 'Keyword' }) +h('@keyword.coroutine', { link = '@keyword' }) +h('@keyword.function', { link = 'Keyword' }) +h('@keyword.operator', { link = '@keyword' }) +h('@keyword.import', { link = 'PreProc' }) +h('@keyword.type', { link = '@keyword' }) +h('@keyword.modifier', { link = '@keyword' }) +h('@keyword.repeat', { link = 'Repeat' }) +h('@keyword.return', { link = '@keyword' }) +h('@keyword.debug', { link = '@keyword' }) +h('@keyword.exception', { link = '@keyword' }) +h('@keyword.conditional', { link = 'Conditional' }) +h('@keyword.conditional.ternary', { link = '@operator' }) +h('@keyword.directive', { link = '@keyword' }) +h('@keyword.directive.define', { link = '@keyword' }) + +-- Punctuation +h('@punctuation', { fg = colors.fg }) +h('@punctuation.delimiter', { link = '@punctuation' }) +h('@punctuation.bracket', { link = '@punctuation' }) +h('@punctuation.special', { link = '@punctuation' }) + +-- Comments Layer +h('@comment', { link = 'Comment' }) +h('@comment.documentation', { link = '@comment' }) +h('@comment.error', { fg = colors.red, bold = true }) +h('@comment.warning', { fg = colors.yellow, bold = true }) +h('@comment.todo', { link = 'Special' }) +h('@comment.note', { link = 'Special' }) + +-- Markup (Markdown, etc.) +h('@markup', { link = 'Comment' }) +h('@markup.strong', { bold = true }) +h('@markup.italic', { italic = true }) +h('@markup.strikethrough', { strikethrough = true }) +h('@markup.underline', { link = 'Underlined' }) +h('@markup.heading', { link = 'Title' }) +h('@markup.heading.1', { link = '@markup.heading' }) +h('@markup.heading.2', { link = '@markup.heading' }) +h('@markup.heading.3', { link = '@markup.heading' }) +h('@markup.heading.4', { link = '@markup.heading' }) +h('@markup.heading.5', { link = '@markup.heading' }) +h('@markup.heading.6', { link = '@markup.heading' }) +h('@markup.quote', {}) +h('@markup.math', { link = 'String' }) +h('@markup.link', { link = 'Underlined' }) +h('@markup.link.label', { link = '@markup.link' }) +h('@markup.link.url', { link = '@markup.link' }) +h('@markup.raw', {}) +h('@markup.raw.block', { link = '@markup.raw' }) +h('@markup.list', {}) +h('@markup.list.checked', { fg = colors.green }) +h('@markup.list.unchecked', { link = '@markup.list' }) + +-- Diff +h('@diff.plus', { fg = blend(colors.green, 0.5, colors.statusline_bg) }) +h('@diff.minus', { fg = blend(colors.red, 0.5, colors.statusline_bg) }) +h('@diff.delta', { fg = blend(colors.yellow, 0.5, colors.statusline_bg) }) + +-- HTML/XML +h('@tag', { fg = colors.green }) +h('@tag.attribute', { fg = colors.fg }) +h('@tag.delimiter', { fg = colors.fg }) +h('@tag.builtin', { link = 'Special' }) + +-- Vimdoc Special Handling +h('@constant.comment', { link = 'SpecialComment' }) +h('@number.comment', { link = 'Comment' }) +h('@punctuation.bracket.comment', { link = 'SpecialComment' }) +h('@punctuation.delimiter.comment', { link = 'SpecialComment' }) +h('@label.vimdoc', { link = 'String' }) +h('@markup.heading.1.delimiter.vimdoc', { link = '@markup.heading.1' }) +h('@markup.heading.2.delimiter.vimdoc', { link = '@markup.heading.2' }) + +-- Semantic Aliases +h('@class', { fg = colors.yellow }) +h('@method', { fg = colors.blue }) +h('@interface', { fg = colors.yellow }) +h('@namespace', { fg = colors.fg }) + +-- ============================================================================= +-- 7. LSP Semantic Highlights +-- ============================================================================= + +h('@lsp.type.class', { link = '@type' }) +h('@lsp.type.comment', { link = '@comment' }) +h('@lsp.type.decorator', { link = '@attribute' }) +h('@lsp.type.enum', { link = '@type' }) +h('@lsp.type.enumMember', { link = '@constant' }) +h('@lsp.type.event', { link = '@type' }) +h('@lsp.type.function', { link = '@function' }) +h('@lsp.type.interface', { link = '@type' }) +h('@lsp.type.keyword', { link = '@keyword' }) +h('@lsp.type.macro', { link = 'Macro' }) +h('@lsp.type.method', { link = '@function.method' }) +h('@lsp.type.modifier', { link = '@type.qualifier' }) +h('@lsp.type.namespace', { link = '@module' }) +h('@lsp.type.number', { link = '@number' }) +h('@lsp.type.operator', { link = '@operator' }) +h('@lsp.type.parameter', { fg = colors.fg }) +h('@lsp.type.property', { fg = colors.fg }) +h('@lsp.type.regexp', { link = '@string.regexp' }) +h('@lsp.type.string', { link = '@string' }) +h('@lsp.type.struct', { link = '@type' }) +h('@lsp.type.type', { link = '@type' }) +h('@lsp.type.typeParameter', { link = '@type.definition' }) +h('@lsp.type.variable', { link = '@variable' }) + +-- LSP Modifiers +h('@lsp.mod.abstract', {}) +h('@lsp.mod.async', {}) +h('@lsp.mod.declaration', {}) +h('@lsp.mod.defaultLibrary', {}) +h('@lsp.mod.definition', {}) +h('@lsp.mod.deprecated', { link = 'DiagnosticDeprecated' }) +h('@lsp.mod.documentation', {}) +h('@lsp.mod.modification', {}) +h('@lsp.mod.readonly', {}) +h('@lsp.mod.static', {}) + +-- ============================================================================= +-- 8. Diagnostics - Semantic Consistency (Schloss 2023) +-- ============================================================================= + +h('DiagnosticError', { fg = colors.red }) +h('DiagnosticWarn', { fg = colors.yellow }) +h('DiagnosticInfo', { fg = colors.blue }) +h('DiagnosticHint', { fg = colors.cyan }) + +h('DiagnosticVirtualTextError', { bg = blend(colors.red, 0.4) }) +h('DiagnosticVirtualTextWarn', { bg = blend(colors.yellow, 0.4) }) +h('DiagnosticVirtualTextInfo', { bg = blend(colors.blue, 0.4) }) +h('DiagnosticVirtualTextHint', { bg = blend(colors.cyan, 0.4) }) + +h('DiagnosticPrefixError', { fg = colors.red, bg = blend(colors.red, 0.25) }) +h('DiagnosticPrefixWarn', { fg = colors.yellow, bg = blend(colors.yellow, 0.25) }) +h('DiagnosticPrefixInfo', { fg = colors.blue, bg = blend(colors.blue, 0.25) }) +h('DiagnosticPrefixHint', { fg = colors.cyan, bg = blend(colors.cyan, 0.25) }) + +h('DiagnosticUnderlineError', { undercurl = true, sp = colors.red }) +h('DiagnosticUnderlineWarn', { undercurl = true, sp = colors.yellow }) +h('DiagnosticUnderlineInfo', { undercurl = true, sp = colors.blue }) +h('DiagnosticUnderlineHint', { undercurl = true, sp = colors.cyan }) +h('YankHighlight', { fg = colors.bg, bg = colors.fg }) + +-- ============================================================================= +-- 9. LSP & Other Plugin Support +-- ============================================================================= + +h('LspReferenceText', { bg = colors.selection_bg }) +h('LspReferenceRead', { bg = colors.selection_bg }) +h('LspReferenceWrite', { bg = colors.selection_bg }) +h('LspReferenceTarget', { link = 'LspReferenceText' }) +h('LspInlayHint', { link = 'NonText' }) +h('LspCodeLens', { link = 'NonText' }) +h('LspCodeLensSeparator', { link = 'NonText' }) +h('LspSignatureActiveParameter', { link = 'LspReferenceText' }) + +-- Indentmini +h('IndentLine', { link = 'Comment' }) +h('IndentLineCurrent', { link = 'Comment' }) + +-- GitSigns +h('GitSignsAdd', { fg = colors.green }) +h('GitSignsChange', { fg = colors.orange }) +h('GitSignsDelete', { fg = colors.red }) + +-- Dashboard +h('DashboardHeader', { fg = colors.green }) diff --git a/nvim/dot-config/nvim-final/init.lua b/nvim/dot-config/nvim-final/init.lua new file mode 100644 index 0000000..54dee05 --- /dev/null +++ b/nvim/dot-config/nvim-final/init.lua @@ -0,0 +1,713 @@ +vim.loader.enable(true) + +vim.pack.add({ + "https://github.com/nvim-treesitter/nvim-treesitter", +}, { confirm = false }) + +vim.pack.add({ + "https://github.com/zenbones-theme/zenbones.nvim", +}, { load = false }) + +require("mo.zen").setup("seoulbones") + +require("vim._extui").enable({}) +vim.cmd([[ packadd! nvim.undotree ]]) + +vim.cmd([[ +nnoremap <expr> [e '<Cmd>.move --' . v:count1 . '<CR>' +nnoremap <expr> ]e '<Cmd>.move +' . v:count1 . '<CR>' +xnoremap <expr> [e ':move --' . v:count1 . '<CR>gv' +xnoremap <expr> ]e ':move +' . (v:count1 + line('''>') - line('''<')) . '<CR>gv' + +function! Sort(type, ...) abort + '[,']sort + call setpos('.', getpos("''")) +endfunction +nnoremap gs m'<Cmd>set operatorfunc=Sort<CR>g@ +xnoremap gs :sort<CR> +]]) + +vim.keymap.set("n", "gK", "K") + +vim.o.breakindent = true +-- Every wrapped line will continue visually indented (same amount of +-- space as the beginning of that line), thus preserving horizontal +-- blocks of text. + +vim.o.cinoptions = "l1,:0,g0,E-s,N-s,t0,(s,J1,j1" +-- The 'cinoptions' affect the way 'cindent' reindents lines in a C +-- program. + +vim.o.colorcolumn = "+1" +-- '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. +-- The screen column can be an absolute number, or a number preceded with +-- '+' or '-', which is added to or subtracted from 'textwidth'. +-- When 'textwidth' is zero then the items with '-' and '+' are not used. + +vim.o.completeopt = "menu,menuone,preview,noselect,fuzzy" +-- 'completeopt' 'cot' string (default "menu,popup") +-- global or local to buffer |global-local| +-- A comma-separated list of options for Insert mode completion +-- |ins-completion|. The supported values are: +-- +-- fuzzy Enable |fuzzy-matching| for completion candidates. This +-- allows for more flexible and intuitive matching, where +-- characters can be skipped and matches can be found even +-- if the exact sequence is not typed. +-- +-- longest +-- When 'autocomplete' is not active, only the longest common +-- prefix of the matches is inserted. If the popup menu is +-- displayed, you can use CTRL-L to add more characters. +-- Whether case is ignored depends on the type of completion. +-- For buffer text the 'ignorecase' option applies. +-- +-- When 'autocomplete' is active and no completion item is +-- selected, the longest common prefix of the matches is +-- inserted after the cursor. The prefix is taken either +-- from all displayed items or only from items in the current +-- buffer. The inserted text is highlighted with +-- |hl-PreInsert|, and the cursor position does not change +-- (similar to `"preinsert"`). Press CTRL-Y to accept. +-- See also |preinserted()|. +-- +-- menu Use a popup menu to show the possible completions. The +-- menu is only shown when there is more than one match and +-- sufficient colors are available. |ins-completion-menu| +-- +-- menuone Use the popup menu also when there is only one match. +-- Useful when there is additional information about the +-- match, e.g., what file it comes from. +-- +-- nearest Matches are listed based on their proximity to the cursor +-- position, unlike the default behavior, which only +-- considers proximity for matches appearing below the +-- cursor. This applies only to matches from the current +-- buffer. No effect if "fuzzy" is present. +-- +-- noinsert Do not insert any text for a match until the user selects +-- a match from the menu. Only works in combination with +-- "menu" or "menuone". No effect if "longest" is present. +-- +-- noselect Same as "noinsert", except that no menu item is +-- pre-selected. If both "noinsert" and "noselect" are +-- present, "noselect" takes precedence. This is enabled +-- automatically when 'autocomplete' is on, unless +-- "preinsert" is also enabled. +-- +-- nosort Disable sorting of completion candidates based on fuzzy +-- scores when "fuzzy" is enabled. Candidates will appear +-- in their original order. +-- +-- popup Show extra information about the currently selected +-- completion in a popup window. Only works in combination +-- with "menu" or "menuone". Overrides "preview". +-- +-- preinsert +-- Inserts the text of the first completion candidate beyond +-- the current leader, highlighted with |hl-PreInsert|. +-- The cursor does not move. +-- Requires "fuzzy" to be unset, and either "menuone" in +-- 'completeopt' or 'autocomplete' enabled. When +-- 'autocomplete' is enabled, this does not work if +-- 'ignorecase' is set without 'infercase'. +-- See also |preinserted()|. +-- +-- preview Show extra information about the currently selected +-- completion in the preview window. Only works in +-- combination with "menu" or "menuone". +-- +-- Only "fuzzy", "longest", "popup", "preinsert" and "preview" have an +-- effect when 'autocomplete' is enabled. +-- +-- This option does not apply to |cmdline-completion|. See 'wildoptions' +-- for that. +vim.opt.cpoptions:remove("~") +-- 'cpoptions' 'cpo' string (default "aABceFs_") +-- global +-- 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. +-- To avoid problems with flags that are added in the future, use the +-- "+=" and "-=" feature of ":set" |add-option-flags|. +vim.o.cursorline = true +vim.o.cursorlineopt = "number" +vim.o.foldlevelstart = 99 +-- 'foldlevelstart' 'fdls' number (default -1) +-- global +-- 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). +-- This is done before reading any modeline, thus a setting in a modeline +-- overrules this option. Starting to edit a file for |diff-mode| also +-- ignores this option and closes all folds. +-- It is also done before BufReadPre autocommands, to allow an autocmd to +-- overrule the 'foldlevel' value for specific files. +-- When the value is negative, it is not used. +vim.o.foldtext = "" +-- 'foldtext' 'fdt' string (default "foldtext()") +-- local to window +-- An expression which is used to specify the text displayed for a closed +-- fold. The context is set to the script where 'foldexpr' was set, +-- script-local items can be accessed. See |fold-foldtext| for the +-- usage. +-- +-- The expression will be evaluated in the |sandbox| if set from a +-- modeline, see |sandbox-option|. +-- This option cannot be set in a modeline when 'modelineexpr' is off. +-- +-- It is not allowed to change text or jump to another window while +-- evaluating 'foldtext' |textlock|. +-- +-- When set to an empty string, foldtext is disabled, and the line +-- is displayed normally with highlighting and no line wrapping. +vim.o.ignorecase = true +-- 'ignorecase' 'ic' boolean (default off) +-- global +-- Ignore case in search patterns, |cmdline-completion|, when +-- searching in the tags file, |expr-==| and for Insert-mode completion +-- |ins-completion|. +-- Also see 'smartcase' and 'tagcase'. +-- Can be overruled by using "\c" or "\C" in the pattern, see +-- |/ignorecase|. +vim.o.smartcase = true +-- 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" and when filtering matches for the completion menu +-- |compl-states|. +-- 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>. +vim.o.jumpoptions = "view,clean" +-- 'jumpoptions' 'jop' string (default "clean") +-- global +-- List of words that change the behavior of the |jumplist|. +-- stack Make the jumplist behave like the tagstack. +-- Relative location of entries in the jumplist is +-- preserved at the cost of discarding subsequent entries +-- when navigating backwards in the jumplist and then +-- jumping to a location. |jumplist-stack| +-- +-- view When moving through the jumplist, |changelist|, +-- |alternate-file|, using |mark-motions| or when popping +-- the |tagstack| try to restore the |mark-view| in which +-- the action occurred. +-- +-- clean Remove unloaded buffers from the jumplist. +-- EXPERIMENTAL: this flag may change in the future. +vim.o.linebreak = true +-- 'linebreak' 'lbr' boolean (default off) +-- local to window +-- 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. +-- If 'breakindent' is set, line is visually indented. Then, the value +-- of 'showbreak' is used to put in front of wrapped lines. This option +-- is not used when the 'wrap' option is off. +-- Note that <Tab> characters after an <EOL> are mostly not displayed +-- with the right amount of white space. +vim.o.list = true +-- 'list' boolean (default off) +-- local to window +-- 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. +-- +-- When 'listchars' does not contain "tab" field, tabs are shown as "^I" +-- or "<09>", like how unprintable characters are displayed. +-- +-- The cursor is displayed at the start of the space a Tab character +-- occupies, not at the end as usual in Normal mode. To get this cursor +-- position while displaying Tabs with spaces, use: >vim +-- set list lcs=tab:\ \ +-- < +-- Note that list mode will also affect formatting (set with 'textwidth' +-- or 'wrapmargin') when 'cpoptions' includes 'L'. See 'listchars' for +-- changing the way tabs are displayed. +vim.opt.listchars:append("precedes:<", "extends:>") +-- 'listchars' 'lcs' string (default "tab:> ,trail:-,nbsp:+") +-- global or local to window |global-local| +-- Strings to use in 'list' mode and for the |:list| command. It is a +-- comma-separated list of string settings. *E1511* +-- +-- *lcs-eol* +-- eol:c Character to show at the end of each line. When +-- omitted, there is no extra character at the end of the +-- line. +-- *lcs-tab* +-- tab:xy[z] Two or three characters to be used to show a tab. +-- The third character is optional. +-- +-- tab:xy The 'x' is always used, then 'y' as many times as will +-- fit. Thus "tab:>-" displays: > +-- > +-- >- +-- >-- +-- etc. +-- < +-- tab:xyz The 'z' is always used, then 'x' is prepended, and +-- then 'y' is used as many times as will fit. Thus +-- "tab:<->" displays: > +-- > +-- <> +-- <-> +-- <--> +-- etc. +-- < +-- When "tab:" is omitted, a tab is shown as ^I. +-- *lcs-space* +-- space:c Character to show for a space. When omitted, spaces +-- are left blank. +-- *lcs-multispace* +-- multispace:c... +-- One or more characters to use cyclically to show for +-- multiple consecutive spaces. Overrides the "space" +-- setting, except for single spaces. When omitted, the +-- "space" setting is used. For example, +-- `:set listchars=multispace:---+` shows ten consecutive +-- spaces as: > +-- ---+---+-- +-- < +-- *lcs-lead* +-- lead:c Character to show for leading spaces. When omitted, +-- leading spaces are blank. Overrides the "space" and +-- "multispace" settings for leading spaces. You can +-- combine it with "tab:", for example: >vim +-- set listchars+=tab:>-,lead:. +-- < +-- *lcs-leadmultispace* +-- leadmultispace:c... +-- Like the |lcs-multispace| value, but for leading +-- spaces only. Also overrides |lcs-lead| for leading +-- multiple spaces. +-- `:set listchars=leadmultispace:---+` shows ten +-- consecutive leading spaces as: > +-- ---+---+--XXX +-- < +-- Where "XXX" denotes the first non-blank characters in +-- the line. +-- *lcs-trail* +-- trail:c Character to show for trailing spaces. When omitted, +-- trailing spaces are blank. Overrides the "space" and +-- "multispace" settings for trailing spaces. +-- *lcs-extends* +-- extends:c Character to show in the last column, when 'wrap' is +-- off and the line continues beyond the right of the +-- screen. +-- *lcs-precedes* +-- precedes:c Character to show in the first visible column of the +-- physical line, when there is text preceding the +-- character visible in the first column. +-- *lcs-conceal* +-- conceal:c Character to show in place of concealed text, when +-- 'conceallevel' is set to 1. A space when omitted. +-- *lcs-nbsp* +-- nbsp:c Character to show for a non-breakable space character +-- (0xA0 (160 decimal) and U+202F). Left blank when +-- omitted. +-- +-- The characters ':' and ',' should not be used. UTF-8 characters can +-- be used. All characters must be single width. *E1512* +-- +-- Each character can be specified as hex: >vim +-- set listchars=eol:\\x24 +-- set listchars=eol:\\u21b5 +-- set listchars=eol:\\U000021b5 +-- < Note that a double backslash is used. The number of hex characters +-- must be exactly 2 for \\x, 4 for \\u and 8 for \\U. +-- +-- Examples: >vim +-- set lcs=tab:>-,trail:- +-- set lcs=tab:>-,eol:<,nbsp:% +-- set lcs=extends:>,precedes:< +-- < |hl-NonText| highlighting will be used for "eol", "extends" and +-- "precedes". |hl-Whitespace| for "nbsp", "space", "tab", "multispace", +-- "lead" and "trail". +vim.o.number = true +vim.o.pumheight = 10 +-- 'pumheight' 'ph' number (default 0) +-- global +-- Maximum number of items to show in the popup menu +-- (|ins-completion-menu|). Zero means "use available screen space". +vim.o.scrolloff = 2 +-- 'scrolloff' 'so' number (default 0) +-- global or local to window |global-local| +-- 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). +-- After using the local value, go back the global value with one of +-- these two: >vim +-- setlocal scrolloff< +-- setlocal scrolloff=-1 +-- < For scrolling horizontally see 'sidescrolloff'. +vim.o.shada = + "'100,<50,s10,:100,/100,h,r/tmp/,r/private/,rfugitive:,rzipfile:,rterm:" +-- 'shada' 'sd' string (default for +-- Win32: !,'100,<50,s10,h,rA:,rB: +-- others: !,'100,<50,s10,h) +-- global +-- 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. The following is a list of the identifying characters and +-- the effect of their value. +-- CHAR VALUE ~ +-- *shada-!* +-- ! When included, save and restore global variables that start +-- with an uppercase letter, and don't contain a lowercase +-- letter. Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis" +-- and "_K_L_M" are not. Nested List and Dict items may not be +-- read back correctly, you end up with an empty item. +-- *shada-quote* +-- " Maximum number of lines saved for each register. Old name of +-- the '<' item, with the disadvantage that you need to put a +-- backslash before the ", otherwise it will be recognized as the +-- start of a comment! +-- *shada-%* +-- % When included, save and restore the buffer list. If Vim is +-- started with a file name argument, the buffer list is not +-- restored. If Vim is started without a file name argument, the +-- buffer list is restored from the shada file. Quickfix +-- ('buftype'), unlisted ('buflisted'), unnamed and buffers on +-- removable media (|shada-r|) are not saved. +-- When followed by a number, the number specifies the maximum +-- number of buffers that are stored. Without a number all +-- buffers are stored. +-- *shada-'* +-- ' Maximum number of previously edited files for which the marks +-- are remembered. This parameter must always be included when +-- 'shada' is non-empty. +-- If non-zero, then the |jumplist| and the |changelist| are also +-- stored in the shada file. +-- *shada-/* +-- / Maximum number of items in the search pattern history to be +-- saved. If non-zero, then the previous search and substitute +-- patterns are also saved. When not included, the value of +-- 'history' is used. +-- *shada-:* +-- : Maximum number of items in the command-line history to be +-- saved. When not included, the value of 'history' is used. +-- *shada-<* +-- < Maximum number of lines saved for each register. If zero then +-- registers are not saved. When not included, all lines are +-- saved. '"' is the old name for this item. +-- Also see the 's' item below: limit specified in KiB. +-- *shada-@* +-- @ Maximum number of items in the input-line history to be +-- saved. When not included, the value of 'history' is used. +-- *shada-c* +-- c Dummy option, kept for compatibility reasons. Has no actual +-- effect: ShaDa always uses UTF-8 and 'encoding' value is fixed +-- to UTF-8 as well. +-- *shada-f* +-- f Whether file marks need to be stored. If zero, file marks ('0 +-- to '9, 'A to 'Z) are not stored. When not present or when +-- non-zero, they are all stored. '0 is used for the current +-- cursor position (when exiting or when doing |:wshada|). +-- *shada-h* +-- h Disable the effect of 'hlsearch' when loading the shada +-- file. When not included, it depends on whether ":nohlsearch" +-- has been used since the last search command. +-- *shada-n* +-- n Name of the shada file. The name must immediately follow +-- the 'n'. Must be at the end of the option! If the +-- 'shadafile' option is set, that file name overrides the one +-- given here with 'shada'. Environment variables are +-- expanded when opening the file, not when setting the option. +-- *shada-r* +-- r Removable media. The argument is a string (up to the next +-- ','). This parameter can be given several times. Each +-- specifies the start of a path for which no marks will be +-- stored. This is to avoid removable media. For Windows you +-- could use "ra:,rb:". You can also use it for temp files, +-- e.g., for Unix: "r/tmp". Case is ignored. +-- *shada-s* +-- s Maximum size of an item contents in KiB. If zero then nothing +-- is saved. Unlike Vim this applies to all items, except for +-- the buffer list and header. Full item size is off by three +-- unsigned integers: with `s10` maximum item size may be 1 byte +-- (type: 7-bit integer) + 9 bytes (timestamp: up to 64-bit +-- integer) + 3 bytes (item size: up to 16-bit integer because +-- 2^8 < 10240 < 2^16) + 10240 bytes (requested maximum item +-- contents size) = 10253 bytes. +-- +-- Example: >vim +-- set shada='50,<1000,s100,:0,n~/nvim/shada +-- < +-- '50 Marks will be remembered for the last 50 files you +-- edited. +-- <1000 Contents of registers (up to 1000 lines each) will be +-- remembered. +-- s100 Items with contents occupying more then 100 KiB are +-- skipped. +-- :0 Command-line history will not be saved. +-- n~/nvim/shada The name of the file to use is "~/nvim/shada". +-- no / Since '/' is not specified, the default will be used, +-- that is, save all of the search history, and also the +-- previous search and substitute patterns. +-- no % The buffer list will not be saved nor read back. +-- no h 'hlsearch' highlighting will be restored. +-- +-- When setting 'shada' from an empty value you can use |:rshada| to +-- load the contents of the file, this is not done automatically. +-- +-- This option cannot be set from a |modeline| or in the |sandbox|, for +-- security reasons. +vim.o.sidescrolloff = 5 +-- 'sidescrolloff' 'siso' number (default 0) +-- global or local to window |global-local| +-- 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. +-- After using the local value, go back the global value with one of +-- these two: >vim +-- setlocal sidescrolloff< +-- setlocal sidescrolloff=-1 +-- < +-- Example: Try this together with 'sidescroll' and 'listchars' as in the +-- following example to never allow the cursor to move onto the +-- "extends" character: >vim +-- +-- set nowrap sidescroll=1 listchars=extends:>,precedes:< +-- set sidescrolloff=1 +-- < +vim.o.smartcase = true +-- 'smartcase' 'scs' boolean (default off) +-- global +-- 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" and when filtering matches for the completion menu +-- |compl-states|. +-- 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>. +vim.o.smoothscroll = true +-- 'smoothscroll' 'sms' boolean (default off) +-- local to window +-- Scrolling works with screen lines. When 'wrap' is set and the first +-- line in the window wraps part of it may not be visible, as if it is +-- above the window. "<<<" is displayed at the start of the first line, +-- highlighted with |hl-NonText|. +-- You may also want to add "lastline" to the 'display' option to show as +-- much of the last line as possible. +-- NOTE: partly implemented, doesn't work yet for |gj| and |gk|. +vim.o.splitright = true +-- 'splitright' 'spr' boolean (default off) +-- global +-- When on, splitting a window will put the new window right of the +-- current one. |:vsplit| +vim.o.statuscolumn = "%s%=%l%{%&nu||&rnu?'%#WinSeparator#│':''%}" +-- 'statuscolumn' 'stc' string (default "") +-- local to window +-- 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'. +-- +-- Some of the items from the 'statusline' format are different for +-- 'statuscolumn': +-- +-- %l line number column for currently drawn line +-- %s sign column for currently drawn line +-- %C fold column for currently drawn line +-- +-- The 'statuscolumn' width follows that of the default columns and +-- adapts to the 'numberwidth', 'signcolumn' and 'foldcolumn' option values +-- (regardless of whether the sign and fold items are present). +-- Additionally, the 'statuscolumn' grows with the size of the evaluated +-- format string, up to a point (following the maximum size of the default +-- fold, sign and number columns). Shrinking only happens when the number +-- of lines in a buffer changes, or the 'statuscolumn' option is set. +-- +-- The |v:lnum| variable holds the line number to be drawn. +-- The |v:relnum| variable holds the relative line number to be drawn. +-- The |v:virtnum| variable is negative when drawing virtual lines, zero +-- when drawing the actual buffer line, and positive when +-- drawing the wrapped part of a buffer line. +-- +-- When using |v:relnum|, keep in mind that cursor movement by itself will +-- not cause the 'statuscolumn' to update unless 'relativenumber' is set. +-- +-- NOTE: The %@ click execute function item is supported as well but the +-- specified function will be the same for each row in the same column. +-- It cannot be switched out through a dynamic 'statuscolumn' format, the +-- handler should be written with this in mind. +-- +-- Examples: >vim +-- " Line number with bar separator and click handlers: +-- set statuscolumn=%@SignCb@%s%=%T%@NumCb@%l│%T +-- +-- " Line numbers in hexadecimal for non wrapped part of lines: +-- let &stc='%=%{v:virtnum>0?"":printf("%x",v:lnum)} ' +-- +-- " Human readable line numbers with thousands separator: +-- let &stc='%{substitute(v:lnum,"\\d\\zs\\ze\\' +-- . '%(\\d\\d\\d\\)\\+$",",","g")}' +-- +-- " Both relative and absolute line numbers with different +-- " highlighting for odd and even relative numbers: +-- let &stc='%#NonText#%{&nu?v:lnum:""}' . +-- '%=%{&rnu&&(v:lnum%2)?"\ ".v:relnum:""}' . +-- '%#LineNr#%{&rnu&&!(v:lnum%2)?"\ ".v:relnum:""}' +-- +-- < WARNING: this expression is evaluated for each screen line so defining +-- an expensive expression can negatively affect render performance. +-- +vim.o.tagcase = "match" +-- 'tagcase' 'tc' string (default "followic") +-- global or local to buffer |global-local| +-- 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 +vim.o.title = true +-- 'title' boolean (default off) +-- global +-- When on, the title of the window will be set to the value of +-- 'titlestring' (if it is not empty), or to: +-- filename [+=-] (path) - Nvim +-- Where: +-- filename the name of the file being edited +-- - indicates the file cannot be modified, 'ma' off +-- + indicates the file was modified +-- = indicates the file is read-only +-- =+ indicates the file is read-only and modified +-- (path) is the path of the file being edited +-- - Nvim the server name |v:servername| or "Nvim" +vim.o.undofile = true +-- 'undofile' 'udf' boolean (default off) +-- local to buffer +-- 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. +vim.o.updatetime = 250 +-- 'updatetime' 'ut' number (default 4000) +-- global +-- 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. +vim.opt.wildignore:append({ "*.pyc", "__pycache__", "*~", "#*#", "*.o" }) +-- 'wildignore' 'wig' string (default "") +-- global +-- 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'. +-- Example: >vim +-- set wildignore=*.o,*.obj +-- < The use of |:set+=| and |:set-=| is preferred when adding or removing +-- a pattern from the list. This avoids problems when a future version +-- uses another default. +vim.o.wildignorecase = true +-- 'wildignorecase' 'wic' boolean (default off) +-- global +-- 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. +vim.o.wildmode = "longest:full,full" +-- 'wildmode' 'wim' string (default "full") +-- global +-- Completion mode used for the character specified with 'wildchar'. +-- This option is a comma-separated list of up to four parts, +-- corresponding to the first, second, third, and fourth presses of +-- 'wildchar'. Each part is a colon-separated list of completion +-- behaviors, which are applied simultaneously during that phase. +-- +-- The possible behavior values are: +-- "" Only complete (insert) the first match. No further +-- matches are cycled or listed. +-- "full" Complete the next full match. Cycles through all +-- matches, returning to the original input after the +-- last match. If 'wildmenu' is enabled, it will be +-- shown. +-- "longest" Complete to the longest common substring. If this +-- doesn't extend the input, the next 'wildmode' part is +-- used. +-- "list" If multiple matches are found, list all of them. +-- "lastused" When completing buffer names, sort them by most +-- recently used (excluding the current buffer). Only +-- applies to buffer name completion. +-- "noselect" If 'wildmenu' is enabled, show the menu but do not +-- preselect the first item. +-- If only one match exists, it is completed fully, unless "noselect" is +-- specified. +-- +-- Some useful combinations of colon-separated values: +-- "longest:full" Start with the longest common string and show +-- 'wildmenu' (if enabled). Does not cycle +-- through full matches. +-- "list:full" List all matches and complete first match. +-- "list:longest" List all matches and complete till the longest +-- common prefix. +-- "list:lastused" List all matches. When completing buffers, +-- sort them by most recently used (excluding the +-- current buffer). +-- "noselect:lastused" Do not preselect the first item in 'wildmenu' +-- if it is active. When completing buffers, +-- sort them by most recently used (excluding the +-- current buffer). +-- +-- Examples: >vim +-- set wildmode=full +-- < Complete full match on every press (default behavior) >vim +-- set wildmode=longest,full +-- < First press: longest common substring +-- Second press: cycle through full matches >vim +-- set wildmode=list:full +-- < First press: list all matches and complete the first one >vim +-- set wildmode=list,full +-- < First press: list matches only +-- Second press: complete full matches >vim +-- set wildmode=longest,list +-- < First press: longest common substring +-- Second press: list all matches >vim +-- set wildmode=noselect:full +-- < First press: show 'wildmenu' without completing or selecting +-- Second press: cycle full matches >vim +-- set wildmode=noselect:lastused,full +-- < Same as above, but buffer matches are sorted by time last used +-- More info here: |cmdline-completion|. +vim.o.winborder = "none" +-- 'winborder' string (default "") +-- global +-- Defines the default border style of floating windows. The default value +-- is empty, which is equivalent to "none". Valid values include: +-- - "bold": Bold line box. +-- - "double": Double-line box. +-- - "none": No border. +-- - "rounded": Like "single", but with rounded corners ("╭" etc.). +-- - "shadow": Drop shadow effect, by blending with the background. +-- - "single": Single-line box. +-- - "solid": Adds padding by a single whitespace cell. +-- - custom: comma-separated list of exactly 8 characters in clockwise +-- order starting from topleft. Example: >lua +-- vim.o.winborder='+,-,+,|,+,-,+,|' +-- < diff --git a/nvim/dot-config/nvim-final/lua/mo/zen.lua b/nvim/dot-config/nvim-final/lua/mo/zen.lua new file mode 100644 index 0000000..eb674ba --- /dev/null +++ b/nvim/dot-config/nvim-final/lua/mo/zen.lua @@ -0,0 +1,89 @@ +local M = {} +M.themes = { + dark = { + "seoulbones", + "rosebones", + "forestbones", + "zenwritten", + }, + light = { + "seoulbones", + "vimbones", + "rosebones", + "forestbones", + }, +} +M.current = { + dark = 1, + light = 1, +} +M.bg = "dark" + +M.cycle = function() + M.current[M.bg] = M.current[M.bg] + 1 + if M.current[M.bg] > #M.themes[M.bg] then M.current[M.bg] = 1 end + M.set() +end + +M.set = function() + vim.o.background = M.bg + local theme = M.themes[M.bg][M.current[M.bg]] + vim.print("Switching to " .. theme) + + vim.g[theme .. "_compat"] = 1 + vim.cmd.colorscheme(theme) + + -- make strings nonitalic + local str_highlight = + vim.api.nvim_get_hl(0, { name = "String", link = false }) + vim.api.nvim_set_hl( + 0, + "String", + { fg = str_highlight.fg, italic = false, force = true } + ) + + -- make booleans nonitalic and bold + local bool_highlight = + vim.api.nvim_get_hl(0, { name = "Boolean", link = false }) + vim.api.nvim_set_hl( + 0, + "Boolean", + { fg = bool_highlight.fg, italic = false, bold = true, force = true } + ) + + -- make normals in seoulbones darker + if theme == "seoulbones" and M.bg == "dark" then + local norm_highlight = + vim.api.nvim_get_hl(0, { name = "Normal", link = false }) + vim.api.nvim_set_hl( + 0, + "Normal", + { fg = norm_highlight.fg, bg = "#313131", force = true } + ) + end +end + +M.togglebg = function() + M.bg = M.bg == "dark" and "light" or "dark" + M.set() +end + +---@param theme string? +---@param bg "dark"|"light"|nil +M.setup = function(theme, bg) + vim.cmd("packadd zenbones.nvim") + if bg then M.bg = bg end + if theme then + for i, th in ipairs(M.themes[M.bg]) do + if th == theme then + M.current[M.bg] = i + break + end + end + end + M.set() + vim.keymap.set("n", "<F3>", M.cycle, {}) + vim.keymap.set("n", "<F12>", M.togglebg, {}) +end + +return M diff --git a/nvim/dot-config/nvim-final/nvim-pack-lock.json b/nvim/dot-config/nvim-final/nvim-pack-lock.json new file mode 100644 index 0000000..506d313 --- /dev/null +++ b/nvim/dot-config/nvim-final/nvim-pack-lock.json @@ -0,0 +1,12 @@ +{ + "plugins": { + "nvim-treesitter": { + "rev": "300b906a9514d5e0ce02911d371445382fe35a31", + "src": "https://github.com/nvim-treesitter/nvim-treesitter" + }, + "zenbones.nvim": { + "rev": "4635a3f46d1066975d1074cd9f61f93cb1e32f64", + "src": "https://github.com/zenbones-theme/zenbones.nvim" + } + } +}
\ No newline at end of file diff --git a/nvim/dot-config/nvim-final/plugin/autocommands.lua b/nvim/dot-config/nvim-final/plugin/autocommands.lua new file mode 100644 index 0000000..b64ac07 --- /dev/null +++ b/nvim/dot-config/nvim-final/plugin/autocommands.lua @@ -0,0 +1,7 @@ +vim.api.nvim_create_autocmd("BufWritePre", { + pattern = "*", + callback = function(ev) + vim.cmd('execute "normal! mz" | keeppatterns %s/\\v\\s+$//e | normal `z') + end, + desc = "Strip whitespace from file" +}) diff --git a/nvim/dot-config/nvim-final/stylua.toml b/nvim/dot-config/nvim-final/stylua.toml new file mode 100644 index 0000000..4ac5841 --- /dev/null +++ b/nvim/dot-config/nvim-final/stylua.toml @@ -0,0 +1,12 @@ +call_parentheses = "Always" +collapse_simple_statement = "Always" +column_width = 80 +indent_type = "Spaces" +indent_width = 4 +line_endings = "Unix" +quote_style = "AutoPreferDouble" +space_after_function_names = "Never" +syntax = "LuaJIT" + +[sort_requires] +enabled = true |
