@ -114,9 +114,7 @@ vim.o.showmode = false
-- Schedule the setting after `UiEnter` because it can increase startup-time.
-- Remove this option if you want your OS clipboard to remain independent.
-- See `:help 'clipboard'`
vim.schedule ( function ( )
vim.o . clipboard = ' unnamedplus '
end )
vim.schedule ( function ( ) vim.o . clipboard = ' unnamedplus ' end )
-- Enable break indent
vim.o . breakindent = true
@ -148,7 +146,7 @@ vim.o.splitbelow = true
-- Notice listchars is set using `vim.opt` instead of `vim.o`.
-- It is very similar to `vim.o` but offers an interface for conveniently interacting with tables.
-- See `:help lua-options`
-- and `:help lua- options-guide `
-- and `:help lua- guide- options`
vim.o . list = true
vim.opt . listchars = { tab = ' » ' , trail = ' · ' , nbsp = ' ␣ ' }
@ -173,7 +171,22 @@ vim.o.confirm = true
-- See `:help hlsearch`
vim.keymap . set ( ' n ' , ' <Esc> ' , ' <cmd>nohlsearch<CR> ' )
-- Diagnostic keymaps
-- Diagnostic Config & Keymaps
-- See :help vim.diagnostic.Opts
vim.diagnostic . config {
update_in_insert = false ,
severity_sort = true ,
float = { border = ' rounded ' , source = ' if_many ' } ,
underline = { severity = vim.diagnostic . severity.ERROR } ,
-- Can switch between these as you prefer
virtual_text = true , -- Text shows up at the end of the line
virtual_lines = false , -- Teest shows up underneath the line, with virtual lines
-- Auto open the float, so you can easily read the errors when jumping with `[d` and `]d`
jump = { float = true } ,
}
vim.keymap . set ( ' n ' , ' <leader>q ' , vim.diagnostic . setloclist , { desc = ' Open diagnostic [Q]uickfix list ' } )
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
@ -214,9 +227,7 @@ vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper win
vim.api . nvim_create_autocmd ( ' TextYankPost ' , {
desc = ' Highlight when yanking (copying) text ' ,
group = vim.api . nvim_create_augroup ( ' kickstart-highlight-yank ' , { clear = true } ) ,
callback = function ( )
vim.hl . on_yank ( )
end ,
callback = function ( ) vim.hl . on_yank ( ) end ,
} )
-- [[ Install `lazy.nvim` plugin manager ]]
@ -225,9 +236,7 @@ local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
if not ( vim.uv or vim.loop ) . fs_stat ( lazypath ) then
local lazyrepo = ' https://github.com/folke/lazy.nvim.git '
local out = vim.fn . system { ' git ' , ' clone ' , ' --filter=blob:none ' , ' --branch=stable ' , lazyrepo , lazypath }
if vim.v . shell_error ~= 0 then
error ( ' Error cloning lazy.nvim: \n ' .. out )
end
if vim.v . shell_error ~= 0 then error ( ' Error cloning lazy.nvim: \n ' .. out ) end
end
---@type vim.Option
@ -246,15 +255,8 @@ rtp:prepend(lazypath)
--
-- NOTE: Here is where you install your plugins.
require ( ' lazy ' ) . setup ( {
-- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link).
' NMAC427/guess-indent.nvim ' , -- Detect tabstop and shiftwidth automatically
-- NOTE: Plugins can also be added by using a table,
-- with the first argument being the link and the following
-- keys can be used to configure plugin behavior/loading/etc.
--
-- Use `opts = {}` to automatically pass options to a plugin's `setup()` function, forcing the plugin to be loaded.
--
-- NOTE: Plugins can be added via a link or github org/name. To run setup automatically, use `opts = {}`
{ ' NMAC427/guess-indent.nvim ' , opts = { } } ,
-- Alternatively, use `config = function() ... end` for full control over the configuration.
-- If you prefer to call `setup` explicitly, use:
@ -300,51 +302,15 @@ require('lazy').setup({
{ -- Useful plugin to show you pending keybinds.
' folke/which-key.nvim ' ,
event = ' VimEnter ' , -- Sets the loading event to 'VimEnter'
event = ' VimEnter ' ,
opts = {
-- delay between pressing a key and opening which-key (milliseconds)
-- this setting is independent of vim.o.timeoutlen
delay = 0 ,
icons = {
-- set icon mappings to true if you have a Nerd Font
mappings = vim.g . have_nerd_font ,
-- If you are using a Nerd Font: set icons.keys to an empty table which will use the
-- default which-key.nvim defined Nerd Font icons, otherwise define a string table
keys = vim.g . have_nerd_font and { } or {
Up = ' <Up> ' ,
Down = ' <Down> ' ,
Left = ' <Left> ' ,
Right = ' <Right> ' ,
C = ' <C-…> ' ,
M = ' <M-…> ' ,
D = ' <D-…> ' ,
S = ' <S-…> ' ,
CR = ' <CR> ' ,
Esc = ' <Esc> ' ,
ScrollWheelDown = ' <ScrollWheelDown> ' ,
ScrollWheelUp = ' <ScrollWheelUp> ' ,
NL = ' <NL> ' ,
BS = ' <BS> ' ,
Space = ' <Space> ' ,
Tab = ' <Tab> ' ,
F1 = ' <F1> ' ,
F2 = ' <F2> ' ,
F3 = ' <F3> ' ,
F4 = ' <F4> ' ,
F5 = ' <F5> ' ,
F6 = ' <F6> ' ,
F7 = ' <F7> ' ,
F8 = ' <F8> ' ,
F9 = ' <F9> ' ,
F10 = ' <F10> ' ,
F11 = ' <F11> ' ,
F12 = ' <F12> ' ,
} ,
} ,
icons = { mappings = vim.g . have_nerd_font } ,
-- Document existing key chains
spec = {
{ ' <leader>s ' , group = ' [S]earch ' } ,
{ ' <leader>s ' , group = ' [S]earch ' , mode = { ' n ' , ' v ' } } ,
{ ' <leader>t ' , group = ' [T]oggle ' } ,
{ ' <leader>h ' , group = ' Git [H]unk ' , mode = { ' n ' , ' v ' } } ,
} ,
@ -360,6 +326,16 @@ require('lazy').setup({
{ -- Fuzzy Finder (files, lsp, etc)
' nvim-telescope/telescope.nvim ' ,
-- By default, Telescope is included and acts as your picker for everything.
-- If you would like to switch to a different picker (like snacks, or fzf-lua)
-- you can disable the Telescope plugin by setting enabled to false and enable
-- your replacement picker by requiring it explicitly (e.g. 'custom.plugins.snacks')
-- Note: If you customize your config for yourself,
-- it’ s best to remove the Telescope plugin config entirely
-- instead of just disabling it here, to keep your config clean.
enabled = true ,
event = ' VimEnter ' ,
dependencies = {
' nvim-lua/plenary.nvim ' ,
@ -372,9 +348,7 @@ require('lazy').setup({
-- `cond` is a condition used to determine whether this plugin should be
-- installed and loaded.
cond = function ( )
return vim.fn . executable ' make ' == 1
end ,
cond = function ( ) return vim.fn . executable ' make ' == 1 end ,
} ,
{ ' nvim-telescope/telescope-ui-select.nvim ' } ,
@ -414,9 +388,7 @@ require('lazy').setup({
-- },
-- pickers = {}
extensions = {
[ ' ui-select ' ] = {
require ( ' telescope.themes ' ) . get_dropdown ( ) ,
} ,
[ ' ui-select ' ] = { require ( ' telescope.themes ' ) . get_dropdown ( ) } ,
} ,
}
@ -430,14 +402,49 @@ require('lazy').setup({
vim.keymap . set ( ' n ' , ' <leader>sk ' , builtin.keymaps , { desc = ' [S]earch [K]eymaps ' } )
vim.keymap . set ( ' n ' , ' <leader>sf ' , builtin.find_files , { desc = ' [S]earch [F]iles ' } )
vim.keymap . set ( ' n ' , ' <leader>ss ' , builtin.builtin , { desc = ' [S]earch [S]elect Telescope ' } )
vim.keymap . set ( ' n ' , ' <leader>sw ' , builtin.grep_string , { desc = ' [S]earch current [W]ord ' } )
vim.keymap . set ( { ' n ' , ' v ' } , ' <leader>sw ' , builtin.grep_string , { desc = ' [S]earch current [W]ord ' } )
vim.keymap . set ( ' n ' , ' <leader>sg ' , builtin.live_grep , { desc = ' [S]earch by [G]rep ' } )
vim.keymap . set ( ' n ' , ' <leader>sd ' , builtin.diagnostics , { desc = ' [S]earch [D]iagnostics ' } )
vim.keymap . set ( ' n ' , ' <leader>sr ' , builtin.resume , { desc = ' [S]earch [R]esume ' } )
vim.keymap . set ( ' n ' , ' <leader>s. ' , builtin.oldfiles , { desc = ' [S]earch Recent Files ("." for repeat) ' } )
vim.keymap . set ( ' n ' , ' <leader>sc ' , builtin.commands , { desc = ' [S]earch [C]ommands ' } )
vim.keymap . set ( ' n ' , ' <leader><leader> ' , builtin.buffers , { desc = ' [ ] Find existing buffers ' } )
-- Slightly advanced example of overriding default behavior and theme
-- This runs on LSP attach per buffer (see main LSP attach function in 'neovim/nvim-lspconfig' config for more info,
-- it is better explained there). This allows easily switching between pickers if you prefer using something else!
vim.api . nvim_create_autocmd ( ' LspAttach ' , {
group = vim.api . nvim_create_augroup ( ' telescope-lsp-attach ' , { clear = true } ) ,
callback = function ( event )
local buf = event.buf
-- Find references for the word under your cursor.
vim.keymap . set ( ' n ' , ' grr ' , builtin.lsp_references , { buffer = buf , desc = ' [G]oto [R]eferences ' } )
-- Jump to the implementation of the word under your cursor.
-- Useful when your language has ways of declaring types without an actual implementation.
vim.keymap . set ( ' n ' , ' gri ' , builtin.lsp_implementations , { buffer = buf , desc = ' [G]oto [I]mplementation ' } )
-- Jump to the definition of the word under your cursor.
-- This is where a variable was first declared, or where a function is defined, etc.
-- To jump back, press <C-t>.
vim.keymap . set ( ' n ' , ' grd ' , builtin.lsp_definitions , { buffer = buf , desc = ' [G]oto [D]efinition ' } )
-- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc.
vim.keymap . set ( ' n ' , ' gO ' , builtin.lsp_document_symbols , { buffer = buf , desc = ' Open Document Symbols ' } )
-- Fuzzy find all the symbols in your current workspace.
-- Similar to document symbols, except searches over your entire project.
vim.keymap . set ( ' n ' , ' gW ' , builtin.lsp_dynamic_workspace_symbols , { buffer = buf , desc = ' Open Workspace Symbols ' } )
-- Jump to the type of the word under your cursor.
-- Useful when you're not sure what type a variable is and you want to see
-- the definition of its *type*, not where it was *defined*.
vim.keymap . set ( ' n ' , ' grt ' , builtin.lsp_type_definitions , { buffer = buf , desc = ' [G]oto [T]ype Definition ' } )
end ,
} )
-- Override default behavior and theme when searching
vim.keymap . set ( ' n ' , ' <leader>/ ' , function ( )
-- You can pass additional configuration to Telescope to change the theme, layout, etc.
builtin.current_buffer_fuzzy_find ( require ( ' telescope.themes ' ) . get_dropdown {
@ -448,33 +455,24 @@ require('lazy').setup({
-- It's also possible to pass additional configuration options.
-- See `:help telescope.builtin.live_grep()` for information about particular keys
vim.keymap . set ( ' n ' , ' <leader>s/ ' , function ( )
vim.keymap . set (
' n ' ,
' <leader>s/ ' ,
function ( )
builtin.live_grep {
grep_open_files = true ,
prompt_title = ' Live Grep in Open Files ' ,
}
end , { desc = ' [S]earch [/] in Open Files ' } )
end ,
{ desc = ' [S]earch [/] in Open Files ' }
)
-- Shortcut for searching your Neovim configuration files
vim.keymap . set ( ' n ' , ' <leader>sn ' , function ( )
builtin.find_files { cwd = vim.fn . stdpath ' config ' }
end , { desc = ' [S]earch [N]eovim files ' } )
vim.keymap . set ( ' n ' , ' <leader>sn ' , function ( ) builtin.find_files { cwd = vim.fn . stdpath ' config ' } end , { desc = ' [S]earch [N]eovim files ' } )
end ,
} ,
-- LSP Plugins
{
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
' folke/lazydev.nvim ' ,
ft = ' lua ' ,
opts = {
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = ' ${3rd}/luv/library ' , words = { ' vim%.uv ' } } ,
} ,
} ,
} ,
{
-- Main LSP Configuration
' neovim/nvim-lspconfig ' ,
@ -483,7 +481,6 @@ require('lazy').setup({
-- Mason must be loaded before its dependents so we need to set it up here.
-- NOTE: `opts = {}` is the same as calling `require('mason').setup({})`
{ ' mason-org/mason.nvim ' , opts = { } } ,
' mason-org/mason-lspconfig.nvim ' ,
' WhoIsSethDaniel/mason-tool-installer.nvim ' ,
-- Useful status updates for LSP.
@ -543,42 +540,17 @@ require('lazy').setup({
-- or a suggestion from your LSP for this to activate.
map ( ' gra ' , vim.lsp . buf.code_action , ' [G]oto Code [A]ction ' , { ' n ' , ' x ' } )
-- Find references for the word under your cursor.
map ( ' grr ' , require ( ' telescope.builtin ' ) . lsp_references , ' [G]oto [R]eferences ' )
-- Jump to the implementation of the word under your cursor.
-- Useful when your language has ways of declaring types without an actual implementation.
map ( ' gri ' , require ( ' telescope.builtin ' ) . lsp_implementations , ' [G]oto [I]mplementation ' )
-- Jump to the definition of the word under your cursor.
-- This is where a variable was first declared, or where a function is defined, etc.
-- To jump back, press <C-t>.
map ( ' grd ' , require ( ' telescope.builtin ' ) . lsp_definitions , ' [G]oto [D]efinition ' )
-- WARN: This is not Goto Definition, this is Goto Declaration.
-- For example, in C this would take you to the header.
map ( ' grD ' , vim.lsp . buf.declaration , ' [G]oto [D]eclaration ' )
-- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc.
map ( ' gO ' , require ( ' telescope.builtin ' ) . lsp_document_symbols , ' Open Document Symbols ' )
-- Fuzzy find all the symbols in your current workspace.
-- Similar to document symbols, except searches over your entire project.
map ( ' gW ' , require ( ' telescope.builtin ' ) . lsp_dynamic_workspace_symbols , ' Open Workspace Symbols ' )
-- Jump to the type of the word under your cursor.
-- Useful when you're not sure what type a variable is and you want to see
-- the definition of its *type*, not where it was *defined*.
map ( ' grt ' , require ( ' telescope.builtin ' ) . lsp_type_definitions , ' [G]oto [T]ype Definition ' )
-- The following two autocommands are used to highlight references of the
-- word under your cursor when your cursor rests there for a little while.
-- See `:help CursorHold` for information about when this is executed
--
-- When you move your cursor, the highlights will be cleared (the second autocommand).
local client = vim.lsp . get_client_by_id ( event.data . client_id )
if client and client : supports_method ( vim.lsp . protocol.Methods . textDocument_documentHighlight , event.buf ) then
if client and client : supports_method ( ' textDocument/documentHighlight ' , event.buf ) then
local highlight_augroup = vim.api . nvim_create_augroup ( ' kickstart-lsp-highlight ' , { clear = false } )
vim.api . nvim_create_autocmd ( { ' CursorHold ' , ' CursorHoldI ' } , {
buffer = event.buf ,
@ -605,43 +577,12 @@ require('lazy').setup({
-- code, if the language server you are using supports them
--
-- This may be unwanted, since they displace some of your code
if client and client : supports_method ( vim.lsp . protocol.Methods . textDocument_inlayHint , event.buf ) then
map ( ' <leader>th ' , function ( )
vim.lsp . inlay_hint.enable ( not vim.lsp . inlay_hint.is_enabled { bufnr = event.buf } )
end , ' [T]oggle Inlay [H]ints ' )
if client and client : supports_method ( ' textDocument/inlayHint ' , event.buf ) then
map ( ' <leader>th ' , function ( ) vim.lsp . inlay_hint.enable ( not vim.lsp . inlay_hint.is_enabled { bufnr = event.buf } ) end , ' [T]oggle Inlay [H]ints ' )
end
end ,
} )
-- Diagnostic Config
-- See :help vim.diagnostic.Opts
vim.diagnostic . config {
severity_sort = true ,
float = { border = ' rounded ' , source = ' if_many ' } ,
underline = { severity = vim.diagnostic . severity.ERROR } ,
signs = vim.g . have_nerd_font and {
text = {
[ vim.diagnostic . severity.ERROR ] = ' ' ,
[ vim.diagnostic . severity.WARN ] = ' ' ,
[ vim.diagnostic . severity.INFO ] = ' ' ,
[ vim.diagnostic . severity.HINT ] = ' ' ,
} ,
} or { } ,
virtual_text = {
source = ' if_many ' ,
spacing = 2 ,
format = function ( diagnostic )
local diagnostic_message = {
[ vim.diagnostic . severity.ERROR ] = diagnostic.message ,
[ vim.diagnostic . severity.WARN ] = diagnostic.message ,
[ vim.diagnostic . severity.INFO ] = diagnostic.message ,
[ vim.diagnostic . severity.HINT ] = diagnostic.message ,
}
return diagnostic_message [ diagnostic.severity ]
end ,
} ,
}
-- LSP servers and clients are able to communicate to each other what features they support.
-- By default, Neovim doesn't support everything that is in the LSP specification.
-- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities.
@ -650,41 +591,18 @@ require('lazy').setup({
-- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
--
-- Add any additional override configuration in the following tables. Available keys are:
-- - cmd (table): Override the default command used to start the server
-- - filetypes (table): Override the default list of associated filetypes for the server
-- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
-- - settings (table): Override the default settings passed when initializing the server.
-- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
-- See `:help lsp-config` for information about keys and how to configure
local servers = {
-- clangd = {},
-- gopls = {},
-- pyright = {},
-- rust_analyzer = {},
-- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs
--
-- Some languages (like typescript) have entire language plugins that can be useful:
-- https://github.com/pmizio/typescript-tools.nvim
--
-- But for many setups, the LSP (`ts_ls`) will work just fine
-- ts_ls = {},
--
lua_ls = {
-- cmd = { ... },
-- filetypes = { ... },
-- capabilities = {},
settings = {
Lua = {
completion = {
callSnippet = ' Replace ' ,
} ,
-- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
-- diagnostics = { disable = { 'missing-fields' } },
} ,
} ,
} ,
}
-- Ensure the servers and tools above are installed
@ -694,32 +612,47 @@ require('lazy').setup({
-- :Mason
--
-- You can press `g?` for help in this menu.
--
-- `mason` had to be setup earlier: to configure its options see the
-- `dependencies` table for `nvim-lspconfig` above.
--
-- You can add other tools here that you want Mason to install
-- for you, so that they are available from within Neovim.
local ensure_installed = vim.tbl_keys ( servers or { } )
vim.list_extend ( ensure_installed , {
' lua_ls ' , -- Lua Language server
' stylua ' , -- Used to format Lua code
-- You can add other tools here that you want Mason to install
} )
require ( ' mason-tool-installer ' ) . setup { ensure_installed = ensure_installed }
require ( ' mason-lspconfig ' ) . setup {
ensure_installed = { } , -- explicitly set to an empty table (Kickstart populates installs via mason-tool-installer)
automatic_installation = false ,
handlers = {
function ( server_name )
local server = servers [ server_name ] or { }
-- This handles overriding only values explicitly passed
-- by the server configuration above. Useful when disabling
-- certain features of an LSP (for example, turning off formatting for ts_ls)
for name , server in pairs ( servers ) do
server.capabilities = vim.tbl_deep_extend ( ' force ' , { } , capabilities , server.capabilities or { } )
require ( ' lspconfig ' ) [ server_name ] . setup ( server )
end ,
vim.lsp . config ( name , server )
vim.lsp . enable ( name )
end
-- Special Lua Config, as recommended by neovim help docs
vim.lsp . config ( ' lua_ls ' , {
on_init = function ( client )
if client.workspace_folders then
local path = client.workspace_folders [ 1 ] . name
if path ~= vim.fn . stdpath ' config ' and ( vim.uv . fs_stat ( path .. ' /.luarc.json ' ) or vim.uv . fs_stat ( path .. ' /.luarc.jsonc ' ) ) then return end
end
client.config . settings.Lua = vim.tbl_deep_extend ( ' force ' , client.config . settings.Lua , {
runtime = {
version = ' LuaJIT ' ,
path = { ' lua/?.lua ' , ' lua/?/init.lua ' } ,
} ,
}
workspace = {
checkThirdParty = false ,
-- NOTE: this is a lot slower and will cause issues when working on your own configuration.
-- See https://github.com/neovim/nvim-lspconfig/issues/3189
library = vim.api . nvim_get_runtime_file ( ' ' , true ) ,
} ,
} )
end ,
settings = {
Lua = { } ,
} ,
} )
vim.lsp . enable ' lua_ls '
end ,
} ,
@ -730,9 +663,7 @@ require('lazy').setup({
keys = {
{
' <leader>f ' ,
function ( )
require ( ' conform ' ) . format { async = true , lsp_format = ' fallback ' }
end ,
function ( ) require ( ' conform ' ) . format { async = true , lsp_format = ' fallback ' } end ,
mode = ' ' ,
desc = ' [F]ormat buffer ' ,
} ,
@ -777,9 +708,7 @@ require('lazy').setup({
-- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments.
-- Remove the below condition to re-enable on windows.
if vim.fn . has ' win32 ' == 1 or vim.fn . executable ' make ' == 0 then
return
end
if vim.fn . has ' win32 ' == 1 or vim.fn . executable ' make ' == 0 then return end
return ' make install_jsregexp '
end ) ( ) ,
dependencies = {
@ -795,7 +724,6 @@ require('lazy').setup({
} ,
opts = { } ,
} ,
' folke/lazydev.nvim ' ,
} ,
--- @module 'blink.cmp'
--- @type blink.cmp.Config
@ -841,10 +769,7 @@ require('lazy').setup({
} ,
sources = {
default = { ' lsp ' , ' path ' , ' snippets ' , ' lazydev ' } ,
providers = {
lazydev = { module = ' lazydev.integrations.blink ' , score_offset = 100 } ,
} ,
default = { ' lsp ' , ' path ' , ' snippets ' } ,
} ,
snippets = { preset = ' luasnip ' } ,
@ -889,7 +814,7 @@ require('lazy').setup({
{ ' folke/todo-comments.nvim ' , event = ' VimEnter ' , dependencies = { ' nvim-lua/plenary.nvim ' } , opts = { signs = false } } ,
{ -- Collection of various small independent plugins/modules
' echasnovsk i/mini.nvim' ,
' nvim-min i/mini.nvim' ,
config = function ( )
-- Better Around/Inside textobjects
--
@ -917,38 +842,23 @@ require('lazy').setup({
-- default behavior. For example, here we set the section for
-- cursor location to LINE:COLUMN
---@diagnostic disable-next-line: duplicate-set-field
statusline.section_location = function ( )
return ' %2l:%-2v '
end
statusline.section_location = function ( ) return ' %2l:%-2v ' end
-- ... and there is more!
-- Check out: https://github.com/ echasnovsk i/mini.nvim
-- Check out: https://github.com/ nvim-min i/mini.nvim
end ,
} ,
{ -- Highlight, edit, and navigate code
' nvim-treesitter/nvim-treesitter ' ,
build = ' :TSUpdate ' ,
main = ' nvim-treesitter.config ' , -- Sets main module to use for opts
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
opts = {
ensure_installed = { ' bash ' , ' c ' , ' diff ' , ' html ' , ' lua ' , ' luadoc ' , ' markdown ' , ' markdown_inline ' , ' query ' , ' vim ' , ' vimdoc ' } ,
-- Autoinstall languages that are not installed
auto_install = true ,
highlight = {
enable = true ,
-- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules.
-- If you are experiencing weird indenting issues, add the language to
-- the list of additional_vim_regex_highlighting and disabled languages for indent.
additional_vim_regex_highlighting = { ' ruby ' } ,
} ,
indent = { enable = true , disable = { ' ruby ' } } ,
} ,
-- There are additional nvim-treesitter modules that you can use to interact
-- with nvim-treesitter. You should go explore a few and see what interests you:
--
-- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
-- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
-- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
config = function ( )
local filetypes = { ' bash ' , ' c ' , ' diff ' , ' html ' , ' lua ' , ' luadoc ' , ' markdown ' , ' markdown_inline ' , ' query ' , ' vim ' , ' vimdoc ' }
require ( ' nvim-treesitter ' ) . install ( filetypes )
vim.api . nvim_create_autocmd ( ' FileType ' , {
pattern = filetypes ,
callback = function ( ) vim.treesitter . start ( ) end ,
} )
end ,
} ,
-- The following comments only work if you have downloaded the kickstart repo, not just copy pasted the