|
1 | 1 | local M = {} |
| 2 | + |
2 | 3 | function M.setup() |
3 | | - local ts_config = require("nvim-treesitter.configs") |
| 4 | + vim.api.nvim_create_autocmd('FileType', { |
| 5 | + pattern = { '*' }, |
| 6 | + callback = function() |
| 7 | + if vim.treesitter.get_parser(nil, nil, { error = false }) then |
| 8 | + vim.treesitter.start() |
| 9 | + end |
| 10 | + end, |
| 11 | + }) |
4 | 12 |
|
5 | | - ---@diagnostic disable-next-line: missing-fields |
6 | | - local opts = { |
7 | | - indent = { |
8 | | - enable = true, |
9 | | - disable = { |
10 | | - "nix", |
11 | | - "python", |
12 | | - }, |
13 | | - }, |
14 | | - highlight = { |
15 | | - enable = true, |
16 | | - disable = { |
17 | | - "nix", |
18 | | - }, |
19 | | - }, |
20 | | - textobjects = { |
21 | | - select = { |
22 | | - enable = true, |
23 | | - lookahead = true, |
24 | | - keymaps = { |
25 | | - ["af"] = "@function.outer", |
26 | | - ["if"] = "@function.inner", |
27 | | - ["ac"] = "@class.outer", |
28 | | - ["ic"] = "@class.inner", |
29 | | - ["am"] = "@comment.outer", |
30 | | - ["im"] = "@comment.inner", |
31 | | - ["ao"] = "@loop.outer", |
32 | | - ["io"] = "@loop.inner", |
33 | | - }, |
34 | | - }, |
35 | | - }, |
36 | | - } |
| 13 | + vim.api.nvim_create_autocmd('FileType', { |
| 14 | + pattern = { '*' }, |
| 15 | + callback = function(ev) |
| 16 | + local filetype = ev.match |
| 17 | + if filetype ~= 'nix' or filetype ~= 'python' then |
| 18 | + vim.bo[ev.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" |
| 19 | + end |
| 20 | + end, |
| 21 | + }) |
37 | 22 |
|
38 | | - -- Defer Treesitter setup after first render to improve startup time of 'nvim {filename}' |
39 | | - vim.defer_fn(function() |
40 | | - ts_config.setup(opts) |
41 | | - end, 0) |
| 23 | + vim.opt.foldmethod = 'expr' |
| 24 | + vim.opt.foldexpr = 'v:lua.vim.treesitter.foldexpr()' |
| 25 | + vim.opt.foldlevel = 99 |
| 26 | + |
| 27 | + vim.g.textobjects_select_enable = true |
| 28 | + vim.g.textobjects_select_lookahead = true |
| 29 | + |
| 30 | + local keymaps = { |
| 31 | + ['af'] = '@function.outer', |
| 32 | + ['if'] = '@function.inner', |
| 33 | + ['ac'] = '@class.outer', |
| 34 | + ['ic'] = '@class.inner', |
| 35 | + ['am'] = '@comment.outer', |
| 36 | + ['im'] = '@comment.inner', |
| 37 | + ['ao'] = '@loop.outer', |
| 38 | + ['io'] = '@loop.inner', |
| 39 | + } |
| 40 | + |
| 41 | + for keymap, textobject in pairs(keymaps) do |
| 42 | + vim.keymap.set('x', keymap, function() |
| 43 | + require('nvim-treesitter.textobjects.select').select_textobject(nil, textobject) |
| 44 | + end, { noremap = true, silent = true }) |
| 45 | + end |
42 | 46 | end |
43 | 47 |
|
44 | 48 | return M |
0 commit comments