configure treesitter
This commit is contained in:
parent
443364e23e
commit
907331f4f2
4 changed files with 176 additions and 5 deletions
146
lua/plugins/treesitter.lua
Normal file
146
lua/plugins/treesitter.lua
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
-- Treesitter: Syntax highlighting, incremental selection, textobjects, autotag
|
||||
return {
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
build = ":TSUpdate",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
"windwp/nvim-ts-autotag",
|
||||
},
|
||||
config = function()
|
||||
require("nvim-treesitter.configs").setup({
|
||||
-- Install parsers for primary languages
|
||||
ensure_installed = {
|
||||
"lua",
|
||||
"vim",
|
||||
"vimdoc",
|
||||
"php",
|
||||
"html",
|
||||
"javascript",
|
||||
"typescript",
|
||||
"tsx",
|
||||
"css",
|
||||
"scss",
|
||||
"json",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"bash",
|
||||
"regex",
|
||||
},
|
||||
|
||||
-- Auto-install missing parsers
|
||||
auto_install = true,
|
||||
|
||||
-- Syntax highlighting
|
||||
highlight = {
|
||||
enable = true,
|
||||
-- Disable for very large files
|
||||
disable = function(lang, buf)
|
||||
local max_filesize = 100 * 1024 -- 100 KB
|
||||
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
|
||||
if ok and stats and stats.size > max_filesize then
|
||||
return true
|
||||
end
|
||||
end,
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
|
||||
-- Incremental selection
|
||||
incremental_selection = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
init_selection = "<CR>",
|
||||
node_incremental = "<CR>",
|
||||
scope_incremental = "<S-CR>",
|
||||
node_decremental = "<BS>",
|
||||
},
|
||||
},
|
||||
|
||||
-- Indentation (experimental, disable if issues)
|
||||
indent = {
|
||||
enable = false, -- Start disabled; can enable per-filetype if stable
|
||||
},
|
||||
|
||||
-- Textobjects
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true, -- Jump forward to next textobject
|
||||
keymaps = {
|
||||
-- Functions
|
||||
["af"] = "@function.outer",
|
||||
["if"] = "@function.inner",
|
||||
-- Classes
|
||||
["ac"] = "@class.outer",
|
||||
["ic"] = "@class.inner",
|
||||
-- Parameters/arguments
|
||||
["aa"] = "@parameter.outer",
|
||||
["ia"] = "@parameter.inner",
|
||||
-- Conditionals
|
||||
["ai"] = "@conditional.outer",
|
||||
["ii"] = "@conditional.inner",
|
||||
-- Loops
|
||||
["al"] = "@loop.outer",
|
||||
["il"] = "@loop.inner",
|
||||
-- Comments
|
||||
["a/"] = "@comment.outer",
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true, -- Add to jumplist
|
||||
goto_next_start = {
|
||||
["]f"] = "@function.outer",
|
||||
["]c"] = "@class.outer",
|
||||
["]a"] = "@parameter.inner",
|
||||
},
|
||||
goto_next_end = {
|
||||
["]F"] = "@function.outer",
|
||||
["]C"] = "@class.outer",
|
||||
["]A"] = "@parameter.inner",
|
||||
},
|
||||
goto_previous_start = {
|
||||
["[f"] = "@function.outer",
|
||||
["[c"] = "@class.outer",
|
||||
["[a"] = "@parameter.inner",
|
||||
},
|
||||
goto_previous_end = {
|
||||
["[F"] = "@function.outer",
|
||||
["[C"] = "@class.outer",
|
||||
["[A"] = "@parameter.inner",
|
||||
},
|
||||
},
|
||||
swap = {
|
||||
enable = true,
|
||||
swap_next = {
|
||||
["<leader>a"] = "@parameter.inner",
|
||||
},
|
||||
swap_previous = {
|
||||
["<leader>A"] = "@parameter.inner",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Setup autotag
|
||||
require("nvim-ts-autotag").setup({
|
||||
opts = {
|
||||
enable_close = true, -- Auto close tags
|
||||
enable_rename = true, -- Auto rename pairs of tags
|
||||
enable_close_on_slash = true, -- Auto close on trailing </
|
||||
},
|
||||
-- Limit to relevant filetypes
|
||||
per_filetype = {
|
||||
["html"] = { enable_close = true },
|
||||
["php"] = { enable_close = true },
|
||||
["javascript"] = { enable_close = true },
|
||||
["javascriptreact"] = { enable_close = true },
|
||||
["typescript"] = { enable_close = true },
|
||||
["typescriptreact"] = { enable_close = true },
|
||||
["vue"] = { enable_close = true },
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue