-- https://github.com/nvim-treesitter/nvim-treesitter/blob/main/doc/nvim-treesitter.txt vim.api.nvim_create_autocmd("FileType", { pattern = { "c", "cpp", "lua", "typescript" }, callback = function() vim.treesitter.start() vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" vim.wo.foldmethod = "expr" vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" end, }) -- https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup vim.api.nvim_create_autocmd("VimEnter", { callback = function(data) -- buffer is a real file on the disk local real_file = vim.fn.filereadable(data.file) == 1 -- buffer is a [No Name] local no_name = data.file == "" and vim.bo[data.buf].buftype == "" if not real_file and not no_name then return end -- open the tree, find the file but don't focus it require("nvim-tree.api").tree.toggle({ focus = false, find_file = true }) end, }) -- https://github.com/nvim-tree/nvim-tree.lua/wiki/Auto-Close vim.api.nvim_create_autocmd("QuitPre", { callback = function() local invalid_win = {} local wins = vim.api.nvim_list_wins() for _, w in ipairs(wins) do local bufname = vim.api.nvim_buf_get_name(vim.api.nvim_win_get_buf(w)) if bufname:match("NvimTree_") ~= nil then table.insert(invalid_win, w) end end if #invalid_win == #wins - 1 then -- Should quit, so we close all invalid windows. for _, w in ipairs(invalid_win) do vim.api.nvim_win_close(w, true) end end end, }) vim.api.nvim_create_autocmd("LspAttach", { callback = function(event) local client = vim.lsp.get_client_by_id(event.data.client_id) local keymaps = require("config.keymaps") keymaps.lsp(event.buf, client) end, })