fixed folding -- again

This commit is contained in:
Mathias Schneider
2026-04-15 18:28:02 +02:00
parent 814860ca63
commit 392f1b7861
3 changed files with 92 additions and 37 deletions
+10
View File
@@ -92,3 +92,13 @@ vim.keymap.set("n", "<A-j>", ":m .+1<CR>==", { desc = "Move line down" })
vim.keymap.set("n", "<A-k>", ":m .-2<CR>==", { desc = "Move line up" }) vim.keymap.set("n", "<A-k>", ":m .-2<CR>==", { desc = "Move line up" })
vim.keymap.set("v", "<A-j>", ":m '>+1<CR>gv=gv", { desc = "Move selection down" }) vim.keymap.set("v", "<A-j>", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
vim.keymap.set("v", "<A-k>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" }) vim.keymap.set("v", "<A-k>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
-- Folding keymaps
vim.keymap.set("n", "za", "za", { desc = "Toggle fold under cursor" })
vim.keymap.set("n", "zA", "zA", { desc = "Toggle fold recursively" })
vim.keymap.set("n", "zR", "zR", { desc = "Open all folds" })
vim.keymap.set("n", "zM", "zM", { desc = "Close all folds" })
vim.keymap.set("n", "zo", "zo", { desc = "Open fold under cursor" })
vim.keymap.set("n", "zc", "zc", { desc = "Close fold under cursor" })
vim.keymap.set("n", "zO", "zO", { desc = "Open all folds under cursor" })
vim.keymap.set("n", "zC", "zC", { desc = "Close all folds under cursor" })
+34 -9
View File
@@ -10,20 +10,45 @@
- vim.go.* for global option shorthand - vim.go.* for global option shorthand
]] ]]
-- ============================================================================
-- TREESITTER (Built-in Neovim 0.10+ features)
-- ============================================================================
-- Enable Treesitter syntax highlighting (native in Neovim 0.10+)
-- This replaces the old nvim-treesitter highlight module
vim.api.nvim_create_autocmd("FileType", {
pattern = "*",
callback = function()
if vim.bo.buftype == "" and vim.bo.filetype ~= "" then
pcall(vim.treesitter.start)
end
end,
desc = "Enable Treesitter highlighting",
})
-- ============================================================================ -- ============================================================================
-- FOLDING SETTINGS (Code folding) -- FOLDING SETTINGS (Code folding)
-- ============================================================================ -- ============================================================================
-- Foldmethod determines how code blocks are detected and folded -- NOTE: In Neovim 0.10+, Treesitter folding must be set per-buffer via FileType autocmd
-- "expr" means folds are based on expressions (we use treesitter for this) -- Setting it globally causes the foldexpr to evaluate before Treesitter attaches
vim.opt.foldmethod = "expr"
-- Foldexpr is the expression used to determine fold level
-- v:lua.vim.treesitter.foldexpr() uses Treesitter to calculate folds
vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
-- Foldlevel: Higher number = more folds are open by default -- Foldlevel: Higher number = more folds are open by default
-- 99 means almost all folds are open when opening a file -- 1-2 means you'll see folds by default; 99 means all folds are open
vim.opt.foldlevel = 99 vim.opt.foldlevel = 1
vim.opt.foldlevelstart = 1
-- Setup Treesitter folding for each buffer after filetype is detected
-- This ensures the parser is loaded before foldexpr evaluates
vim.api.nvim_create_autocmd("FileType", {
pattern = "*",
callback = function()
-- Only set folding for file buffers with Treesitter support
if vim.bo.buftype == "" then
vim.wo.foldmethod = "expr"
vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
end
end,
desc = "Setup Treesitter folding per filetype",
})
-- ============================================================================ -- ============================================================================
-- LINE NUMBERS -- LINE NUMBERS
+36 -16
View File
@@ -3,15 +3,22 @@ return {
build = ":TSUpdate", build = ":TSUpdate",
event = { "BufReadPost", "BufNewFile" }, event = { "BufReadPost", "BufNewFile" },
config = function() config = function()
-- Ensure nvim-treesitter queries are preferred over runtime queries -- In the latest nvim-treesitter (post-refactor), the plugin only handles
-- This fixes the "except*" syntax error with updated parsers -- parser installation. Highlighting, folding, and indenting are handled
vim.opt.runtimepath:prepend(vim.fn.stdpath("data") .. "/lazy/nvim-treesitter") -- by native Neovim Treesitter integration.
local ok, configs = pcall(require, "nvim-treesitter.configs") -- CRITICAL: Add nvim-treesitter/runtime to runtimepath so queries are found
if ok then local ts_runtime = vim.fn.stdpath("data") .. "/lazy/nvim-treesitter/runtime"
configs.setup({ vim.opt.runtimepath:prepend(ts_runtime)
auto_install = true,
ensure_installed = { -- Setup nvim-treesitter (minimal config for parser installation)
require("nvim-treesitter").setup({
-- Parser installation directory (default: stdpath('data')/site)
install_dir = vim.fn.stdpath("data") .. "/site",
})
-- Auto-install parsers for these languages when opening a file
local ensure_installed = {
"python", "python",
"lua", "lua",
"json", "json",
@@ -25,14 +32,27 @@ return {
"bash", "bash",
"markdown", "markdown",
"markdown_inline", "markdown_inline",
}, }
highlight = {
enable = true, -- Install parsers
-- Disable additional_vim_regex_highlighting to avoid conflicts local ok, install = pcall(require, "nvim-treesitter.install")
additional_vim_regex_highlighting = false, if ok then
}, for _, lang in ipairs(ensure_installed) do
indent = { enable = true }, vim.schedule(function()
}) install.install({ lang })
end)
end
end
-- Enable Treesitter-based indenting (natively supported by Neovim)
vim.api.nvim_create_autocmd("FileType", {
pattern = "*",
callback = function()
if vim.bo.buftype == "" and vim.bo.filetype ~= "" then
vim.bo.indentexpr = "v:lua.vim.treesitter.indentexpr()"
end end
end, end,
desc = "Enable Treesitter indenting",
})
end,
} }