summaryrefslogtreecommitdiffstats
path: root/.config/nvim/lua/plugins/nvim-ufo.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/plugins/nvim-ufo.lua')
-rw-r--r--.config/nvim/lua/plugins/nvim-ufo.lua78
1 files changed, 78 insertions, 0 deletions
diff --git a/.config/nvim/lua/plugins/nvim-ufo.lua b/.config/nvim/lua/plugins/nvim-ufo.lua
new file mode 100644
index 0000000..a3d69ba
--- /dev/null
+++ b/.config/nvim/lua/plugins/nvim-ufo.lua
@@ -0,0 +1,78 @@
1return {
2 {
3 "kevinhwang91/nvim-ufo",
4 event = "BufEnter",
5 keys = {
6 {
7 "zR",
8 function()
9 require("ufo").openAllFolds()
10 end,
11 desc = "ufo: open all folds",
12 },
13 {
14 "zM",
15 function()
16 require("ufo").closeAllFolds()
17 end,
18 desc = "ufo: close all folds",
19 },
20 {
21 "zr",
22 function()
23 require("ufo").openFoldsExceptKinds()
24 end,
25 desc = "ufo: open folds except kinds",
26 },
27 {
28 "zm",
29 function()
30 require("ufo").closeFoldsWith()
31 end,
32 desc = "ufo: close folds with"
33 },
34 {
35 "zp",
36 function()
37 require("ufo").peekFoldedLinesUnderCursor()
38 end,
39 desc = "ufo: peek fold"
40 },
41 },
42 dependencies = {
43 "kevinhwang91/promise-async",
44 },
45 opts = {
46 preview = {
47 mappings = {
48 scrollB = "<C-b>",
49 scrollF = "<C-f>",
50 scrollU = "<C-u>",
51 scrollD = "<C-d>",
52 },
53 },
54 provider_selector = function(_, filetype, buftype)
55 local function handleFallbackException(bufnr, err, providerName)
56 if type(err) == "string" and err:match("UfoFallbackException") then
57 return require("ufo").getFolds(bufnr, providerName)
58 else
59 return require("promise").reject(err)
60 end
61 end
62
63 return (filetype == "" or buftype == "nofile") and
64 "indent" -- only use indent until a file is opened
65 or function(bufnr)
66 return require("ufo")
67 .getFolds(bufnr, "lsp")
68 :catch(function(err)
69 return handleFallbackException(bufnr, err, "treesitter")
70 end)
71 :catch(function(err)
72 return handleFallbackException(bufnr, err, "indent")
73 end)
74 end
75 end,
76 },
77 }
78}