Skip to content

Commit

Permalink
feat(nvim): add nvim-ufo for better folding
Browse files Browse the repository at this point in the history
  • Loading branch information
schardev committed Sep 21, 2024
1 parent 3c6625b commit bebb3eb
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 34 deletions.
42 changes: 23 additions & 19 deletions config/nvim/lazy-lock.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "45db5addf8d0a201e1cf247cae4cdce605ad3768" },
"LuaSnip": { "branch": "master", "commit": "e808bee352d1a6fcf902ca1a71cee76e60e24071" },
"alpha-nvim": { "branch": "main", "commit": "b6f4129302db197a7249e67a90de3f2b676de13e" },
"bufferline.nvim": { "branch": "main", "commit": "0b2fd861eee7595015b6561dade52fb060be10c4" },
"catppuccin": { "branch": "main", "commit": "4fd72a9ab64b393c2c22b168508fd244877fec96" },
"catppuccin": { "branch": "main", "commit": "63685e1562ef53873c9764b483d7ac5c7a608922" },
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
"cmp-calc": { "branch": "main", "commit": "5947b412da67306c5b68698a02a846760059be2e" },
"cmp-git": { "branch": "main", "commit": "50d526dff0f6bc441b51fc269d9fdc99a50c76af" },
Expand All @@ -12,38 +12,42 @@
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
"cmp-spell": { "branch": "master", "commit": "694a4e50809d6d645c1ea29015dad0c293f019d6" },
"cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" },
"conform.nvim": { "branch": "master", "commit": "0ebe875d9c306f5fc829db38492ffff2a70d8e9d" },
"conform.nvim": { "branch": "master", "commit": "1a99fdc1d3aa9ccdf3021e67982a679a8c5c740c" },
"fidget.nvim": { "branch": "main", "commit": "d855eed8a06531a7e8fd0684889b2943f373c469" },
"gitsigns.nvim": { "branch": "main", "commit": "1ef74b546732f185d0f806860fa5404df7614f28" },
"indent-blankline.nvim": { "branch": "master", "commit": "18603eb949eba08300799f64027af11ef922283f" },
"lazy.nvim": { "branch": "main", "commit": "48b52b5cfcf8f88ed0aff8fde573a5cc20b1306d" },
"lazy.nvim": { "branch": "main", "commit": "460e1cd8f24e364d54543a4b0e83f6f4ec1f65fb" },
"lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" },
"leap.nvim": { "branch": "main", "commit": "c6bfb191f1161fbabace1f36f578a20ac6c7642c" },
"lualine.nvim": { "branch": "master", "commit": "b431d228b7bbcdaea818bdc3e25b8cdbe861f056" },
"luvit-meta": { "branch": "main", "commit": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60" },
"markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "482350b050bd413931c2cdd4857443c3da7d57cb" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "25c11854aa25558ee6c03432edfa0df0217324be" },
"mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" },
"neogen": { "branch": "main", "commit": "e932ba918b56723436b77aa3efb844a11b2851ab" },
"nvim-autopairs": { "branch": "master", "commit": "fd2badc24e675f947162a16c124d395bde80dbd6" },
"nvim-autopairs": { "branch": "master", "commit": "f158dcb865c36f72c92358f87787dab2c272eaf3" },
"nvim-cmp": { "branch": "main", "commit": "ae644feb7b67bf1ce4260c231d1d4300b19c6f30" },
"nvim-colorizer.lua": { "branch": "master", "commit": "194ec600488f7c7229668d0e80bd197f3a2b84ff" },
"nvim-lint": { "branch": "master", "commit": "a7ce9c78a7c710c28bee56dfab10a5c0c80b7fb5" },
"nvim-lspconfig": { "branch": "master", "commit": "bdbc65aadc708ce528efb22bca5f82a7cca6b54d" },
"nvim-colorizer.lua": { "branch": "master", "commit": "0671e0eabc6842676d3310370e8fae4e1c51d7f9" },
"nvim-lint": { "branch": "master", "commit": "c823e2d0621b5c15aa6b46be4d69b1379bcb8fa6" },
"nvim-lspconfig": { "branch": "master", "commit": "b064131428f6bbbbc905f4451ba6779fda334a3a" },
"nvim-surround": { "branch": "main", "commit": "ec2dc7671067e0086cdf29c2f5df2dd909d5f71f" },
"nvim-tree.lua": { "branch": "master", "commit": "ea55ef12036897fdc4476b115a395d2a34965c82" },
"nvim-treesitter": { "branch": "master", "commit": "bfe74a4899882a4ef45abb80813f14644a110a34" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "fe3deb7f67ce0cc4ebfe2ea6c1c7ae1c7a939d73" },
"nvim-tree.lua": { "branch": "master", "commit": "e7cdecc6363acef8232f2f099fe21096ffdc071f" },
"nvim-treesitter": { "branch": "master", "commit": "929ca9c76ee20bb27cffbde4ee90583b6c54d616" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "bf8d2ad35d1d1a687eae6c065c3d524f7ab61b23" },
"nvim-ts-context-commentstring": { "branch": "main", "commit": "375c2d86cee6674afd75b4f727ce3a80065552f7" },
"nvim-ufo": { "branch": "main", "commit": "203c9f434feec57909ab4b1e028abeb3349b7847" },
"nvim-vtsls": { "branch": "main", "commit": "45c6dfea9f83a126e9bfc5dd63430562b3f8af16" },
"nvim-web-devicons": { "branch": "master", "commit": "3722e3d1fb5fe1896a104eb489e8f8651260b520" },
"nvim-web-devicons": { "branch": "master", "commit": "26220156aafb198b2de6a4cf80c1b120a3768da0" },
"persistence.nvim": { "branch": "main", "commit": "f6aad7dde7fcf54148ccfc5f622c6d5badd0cc3d" },
"plenary.nvim": { "branch": "master", "commit": "ec289423a1693aeae6cd0d503bac2856af74edaa" },
"plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" },
"promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" },
"rainbow-delimiters.nvim": { "branch": "master", "commit": "5f73b24aeb94f5274c218955573153c69ce4d1ee" },
"schemastore.nvim": { "branch": "main", "commit": "fe8b332804c77c810243494406e3e8014f338009" },
"schemastore.nvim": { "branch": "main", "commit": "6e2af7e093a4b92e3dce014aa1cbb5449ad1ebf9" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" },
"telescope.nvim": { "branch": "master", "commit": "5972437de807c3bc101565175da66a1aa4f8707a" },
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
"telescope.nvim": { "branch": "master", "commit": "b5fd7f7ae0ea4537511077ed8ef4a6021cedba2f" },
"typescript.nvim": { "branch": "main", "commit": "4de85ef699d7e6010528dcfbddc2ed4c2c421467" },
"undotree": { "branch": "master", "commit": "56c684a805fe948936cda0d1b19505b84ad7e065" },
"vim-fugitive": { "branch": "master", "commit": "1d18c696c4284e9ce9467a5c04d3adf8af43f994" },
"which-key.nvim": { "branch": "main", "commit": "bfec3d6bc0a9b0b2cb11644642f78c2c3915eef0" }
"undotree": { "branch": "master", "commit": "78b5241191852ffa9bb5da5ff2ee033160798c3b" },
"vim-fugitive": { "branch": "master", "commit": "d4877e54cef67f5af4f950935b1ade19ed6b7370" },
"which-key.nvim": { "branch": "main", "commit": "fb070344402cfc662299d9914f5546d840a22126" }
}
1 change: 0 additions & 1 deletion config/nvim/lua/core/options.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ set.breakindent = true -- Preserve indentation while wrapping
set.cmdheight = 2 -- Set command panel height
set.colorcolumn = "80" -- Highlight 80th column
set.cursorline = true -- Highlight current line number
set.foldlevel = 99 -- Fold after this level (hax to prevent folding by default)
set.hlsearch = false -- Disable search highlighting
set.ignorecase = true -- Ignore case for pattern matching by default
set.laststatus = 3 -- Enable global statusline
Expand Down
2 changes: 2 additions & 0 deletions config/nvim/lua/plugins/colorscheme.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ return {
"catppuccin/nvim",
name = "catppuccin",
priority = 1000,
---@type CatppuccinOptions
opts = {
no_italic = true,

Expand All @@ -13,6 +14,7 @@ return {
["@comment"] = { fg = colors.overlay1 },
VertSplit = { fg = colors.overlay1 },
WinSeparator = { fg = colors.overlay1 },
Folded = { bg = colors.surface0 },
}
end,
},
Expand Down
14 changes: 0 additions & 14 deletions config/nvim/lua/plugins/nvim-treesitter.lua
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,6 @@ return {
},
},
config = function()
local configs_treesitter =
vim.api.nvim_create_augroup("ConfigsTreesitter", { clear = true })
local autocmd = vim.api.nvim_create_autocmd

local enabled_parsers = {
"bash",
"css",
Expand Down Expand Up @@ -59,16 +55,6 @@ return {
"https://github.com/schardev/tree-sitter-scss"
scss_parser.install_info.revision = "master"

autocmd("FileType", {
group = configs_treesitter,
pattern = vim.tbl_extend(
"force",
enabled_parsers,
{ "typescriptreact" }
),
command = "setlocal foldmethod=expr foldexpr=nvim_treesitter#foldexpr()",
})

---@diagnostic disable-next-line: missing-fields
require("nvim-treesitter.configs").setup({
-- One of "all", "maintained" (parsers with maintainers), or a list of languages
Expand Down
64 changes: 64 additions & 0 deletions config/nvim/lua/plugins/nvim-ufo.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---@type LazySpec
return {
"kevinhwang91/nvim-ufo",
event = "BufReadPost",
dependencies = "kevinhwang91/promise-async",
config = function()
-- vim.o.foldcolumn = "1"
vim.o.foldlevel = 99
vim.o.foldlevelstart = 99
vim.o.foldenable = true
vim.opt.fillchars:append([[fold: ,foldopen:,foldsep: ,foldclose:]])

local ufo = require("ufo")
local nnoremap = require("core.utils").mapper_factory("n")

nnoremap("zR", ufo.openAllFolds, { desc = "Open all folds" })
nnoremap("zM", ufo.closeAllFolds, { desc = "Close all folds" })

---@diagnostic disable-next-line: missing-fields
require("ufo").setup({
open_fold_hl_timeout = 150,
provider_selector = function()
return { "treesitter", "indent" }
end,
fold_virt_text_handler = function(
virt_text,
lnum,
end_lnum,
width,
truncate
)
local new_virt_text = {}
local suffix = ("  %d "):format(end_lnum - lnum)
local target_width = width - vim.fn.strdisplaywidth(suffix)
local cur_width = 0

for _, chunk in ipairs(virt_text) do
local chunk_text = chunk[1]
local chunk_width = vim.fn.strdisplaywidth(chunk_text)

if target_width > cur_width + chunk_width then
table.insert(new_virt_text, chunk)
else
local hlgroup = chunk[2]
chunk_text = truncate(chunk_text, target_width - cur_width)
table.insert(new_virt_text, { chunk_text, hlgroup })
chunk_width = vim.fn.strdisplaywidth(chunk_text)
-- str width returned from truncate() may less than 2nd argument, need padding
if cur_width + chunk_width < target_width then
suffix = suffix
.. (" "):rep(target_width - cur_width - chunk_width)
end
break
end

cur_width = cur_width + chunk_width
end

table.insert(new_virt_text, { suffix, "MoreMsg" })
return new_virt_text
end,
})
end,
}

0 comments on commit bebb3eb

Please sign in to comment.