From 4dce5e62c40a51d639d69bdc69a45bd6cc68c3e9 Mon Sep 17 00:00:00 2001 From: Stefan Imhoff Date: Fri, 15 Mar 2024 20:21:52 +0100 Subject: [PATCH] chore(nvim): improve configuration for nvim-ufo --- nvim/lua/plugins/ufo.lua | 41 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/nvim/lua/plugins/ufo.lua b/nvim/lua/plugins/ufo.lua index 7789690..7dc9e36 100644 --- a/nvim/lua/plugins/ufo.lua +++ b/nvim/lua/plugins/ufo.lua @@ -4,13 +4,48 @@ return { "kevinhwang91/nvim-ufo", dependencies = "kevinhwang91/promise-async", config = function() - vim.o.foldcolumn = "1" + vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]] + vim.o.foldcolumn = "0" vim.o.foldlevel = 99 - vim.o.foldlevelstart = 99 + vim.o.foldlevelstart = 100 vim.o.foldenable = true + local handler = function(virtText, lnum, endLnum, width, truncate) + local newVirtText = {} + local suffix = (" 󰁂 %d "):format(endLnum - lnum) + local sufWidth = vim.fn.strdisplaywidth(suffix) + local targetWidth = width - sufWidth + local curWidth = 0 + for _, chunk in ipairs(virtText) do + local chunkText = chunk[1] + local chunkWidth = vim.fn.strdisplaywidth(chunkText) + if targetWidth > curWidth + chunkWidth then + table.insert(newVirtText, chunk) + else + chunkText = truncate(chunkText, targetWidth - curWidth) + local hlGroup = chunk[2] + table.insert(newVirtText, { chunkText, hlGroup }) + chunkWidth = vim.fn.strdisplaywidth(chunkText) + if curWidth + chunkWidth < targetWidth then + suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth) + end + break + end + curWidth = curWidth + chunkWidth + end + table.insert(newVirtText, { suffix, "MoreMsg" }) + return newVirtText + end + require("ufo").setup({ - provider_selector = function(bufnr, filetype, bufftype) + fold_virt_text_handler = handler, + close_fold_kinds_for_ft = { + default = { "imports", "comment" }, + }, + open_fold_hl_timeout = 300, + enable_get_fold_virt_text = false, + preview = {}, + provider_selector = function() return { "lsp", "indent" } end, })