local misc = require("core.misc") local auto = misc.auto -- color stuff if vim.fn.has("termguicolors") then vim.opt.termguicolors = true end vim.opt.laststatus = 3 -- numbers vim.opt.number = true vim.opt.relativenumber = true -- buffer vim.opt.scrolloff = 5 vim.opt.wrap = true -- wraping lines vim.opt.linebreak = true -- fix where line is wraped vim.opt.cursorline = true vim.opt.colorcolumn = { 80 } -- indents + tabs local tabwidth = 2 vim.opt.expandtab = true vim.opt.smarttab = true vim.opt.cindent = true vim.opt.autoindent = true vim.opt.tabstop = tabwidth vim.opt.shiftwidth = tabwidth vim.opt.softtabstop = tabwidth -- Schedule the setting after `UiEnter` because it can increase startup-time. -- (yoinked from kickstart.nvim) vim.schedule(function() vim.opt.clipboard = "unnamedplus" -- system clipboard end) vim.opt.updatetime = 200 -- file saving vim.opt.swapfile = false vim.opt.undofile = true vim.opt.confirm = true -- searching vim.opt.ignorecase = true vim.opt.smartcase = true vim.opt.wrapscan = true vim.opt.showmatch = true vim.opt.incsearch = true -- wild menus vim.opt.wildoptions = "pum" vim.opt.pumblend = 3 vim.opt.pumheight = 20 vim.opt.wildignorecase = true vim.opt.wildignore = "*.o" -- netrw vim.g.netrw_banner = 0 vim.g.netrw_winsize = 30 vim.g.netrw_liststyle = 1 vim.g.netrw_sizestyle = "H" vim.g.netrw_hide = 1 -- border (this doesn"t actually do anything within vim, I"m just setting it -- here so it"s easy to find) vim.g.border_style = "solid" -- folding auto("FileType", { callback = function() -- FIXME: it causes errors every once in a while -- support lsp folding -- if vim.fn.has("nvim-0.11") then -- auto("LspAttach", { -- callback = function(args) -- local client = vim.lsp.get_client_by_id(args.data.client_id) -- if not client then -- return -- end -- if client:supports_method("textDocument/foldingRange") then -- local win = vim.api.nvim_get_current_win() -- vim.wo[win][0].foldmethod = "expr" -- vim.wo[win][0].foldexpr = "v:lua.vim.lsp.foldexpr()" -- end -- end, -- }) -- end -- or just rely on treesitter if require("nvim-treesitter.parsers").has_parser() then vim.opt.foldmethod = "expr" vim.opt.foldexpr = "nvim_treesitter#foldexpr()" else vim.opt.foldmethod = "syntax" end end }) -- lsp folding: vim.o.foldexpr = "v:lua.vim.lsp.foldexpr()" -- waiting on https://github.com/neovim/neovim/pull/31311 to hit a release require("core.lsp.functions").add_capabilities({ textDocument = { foldingRange = { dynamicRegistration = false, lineFoldingOnly = true } } }) vim.opt.foldlevelstart = 99 vim.opt.foldlevel = 99 vim.opt.foldenable = true vim.o.fillchars = "fold: " _G.Fold_text = require("core.folding") vim.opt.foldtext = "v:lua.Fold_text()" -- statusline function _G.Status() local function percentage() local percent, line, lines line = vim.api.nvim_win_get_cursor(0)[1] lines = vim.api.nvim_buf_line_count(0) percent = math.floor((line / lines) * 100) if percent == 0 then return "Top" elseif percent == 100 then return "Bot" end return percent.."%%" end return table.concat { "%t", -- file name " %h", -- help buffer tag "%m", -- modify tag "%r", -- readonly flag "%=", -- seperate left and right side -- print out the number of lsp clients attached "λ"..#vim.lsp.get_clients({ bufnr = 0 }).." ", "%<", -- we can start truncating here (I want to keep the file name) "%l,%c%V", -- line, column-virtual column "%<", -- we can start truncating here " "..percentage() -- percentage through the buffer } end vim.o.statusline="%!v:lua.Status()"