nvim/lua/plugins/ufo.lua

57 lines
1.9 KiB
Lua

-- Phase 6.7: nvim-ufo for better folding with Treesitter and LSP support
return {
'kevinhwang91/nvim-ufo',
dependencies = {
'kevinhwang91/promise-async',
},
event = { 'BufReadPost', 'BufNewFile' },
keys = {
{ 'zR', function() require('ufo').openAllFolds() end, desc = 'Open all folds' },
{ 'zM', function() require('ufo').closeAllFolds() end, desc = 'Close all folds' },
{ 'zr', function() require('ufo').openFoldsExceptKinds() end, desc = 'Open folds except kinds' },
{ 'zm', function() require('ufo').closeFoldsWith() end, desc = 'Close folds with' },
{ 'K', function()
local winid = require('ufo').peekFoldedLinesUnderCursor()
if not winid then
-- Fall back to LSP hover if not on a fold
vim.lsp.buf.hover()
end
end, desc = 'Peek fold or LSP hover' },
},
opts = {
provider_selector = function(bufnr, filetype, buftype)
-- Use Treesitter for supported languages, LSP for others, indent as fallback
return { 'treesitter', 'indent' }
end,
-- Open folds when searching
open_fold_hl_timeout = 150,
close_fold_kinds_for_ft = {
default = { 'imports', 'comment' },
},
preview = {
win_config = {
border = { '', '', '', '', '', '', '', '' },
winhighlight = 'Normal:Folded',
winblend = 0,
},
mappings = {
scrollU = '<C-u>',
scrollD = '<C-d>',
jumpTop = '[',
jumpBot = ']',
},
},
},
config = function(_, opts)
-- Set fold settings for nvim-ufo
vim.o.foldcolumn = '1' -- Show fold column
vim.o.foldlevel = 99 -- Open all folds by default
vim.o.foldlevelstart = 99 -- Open all folds when opening a file
vim.o.foldenable = true -- Enable folding
-- Use simple characters for fold indicators
vim.o.fillchars = [[eob: ,fold: ,foldopen:▼,foldsep: ,foldclose:▶]]
require('ufo').setup(opts)
end,
}