@@ -94,67 +94,77 @@ vim.g.maplocalleader = ' '
vim.g . have_nerd_font = false
-- [[ Setting options ]]
-- See `:help vim.opt `
-- See `:help vim.o`
-- NOTE: You can change these options as you wish!
-- For more options, you can see `:help option-list`
-- Make line numbers default
vim.opt . number = true
vim.o . number = true
-- You can also add relative line numbers, to help with jumping.
-- Experiment for yourself to see if you like it!
-- vim.opt .relativenumber = true
-- vim.o.relativenumber = true
-- Enable mouse mode, can be useful for resizing splits for example!
vim.opt . mouse = ' a '
vim.o . mouse = ' a '
-- Don't show the mode, since it's already in the status line
vim.opt . showmode = false
vim.o . showmode = false
-- Sync clipboard between OS and Neovim.
-- 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.opt . clipboard = ' unnamedplus '
vim.o . clipboard = ' unnamedplus '
end )
-- Enable break indent
vim.opt . breakindent = true
vim.o . breakindent = true
-- Save undo history
vim.opt . undofile = true
vim.o . undofile = true
-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
vim.opt . ignorecase = true
vim.opt . smartcase = true
vim.o . ignorecase = true
vim.o . smartcase = true
-- Keep signcolumn on by default
vim.opt . signcolumn = ' yes '
vim.o . signcolumn = ' yes '
-- Decrease update time
vim.opt . updatetime = 250
vim.o . updatetime = 250
-- Decrease mapped sequence wait time
vim.opt . timeoutlen = 300
vim.o . timeoutlen = 300
-- Configure how new splits should be opened
vim.opt . splitright = true
vim.opt . splitbelow = true
vim.o . splitright = true
vim.o . splitbelow = true
-- Sets how neovim will display certain whitespace characters in the editor.
-- See `:help 'list'`
-- and `:help 'listchars'`
vim.opt . list = 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`
vim.o . list = true
vim.opt . listchars = { tab = ' » ' , trail = ' · ' , nbsp = ' ␣ ' }
-- Preview substitutions live, as you type!
vim.opt . inccommand = ' split '
vim.o . inccommand = ' split '
-- Show which line your cursor is on
vim.opt . cursorline = true
vim.o . cursorline = true
-- Minimal number of screen lines to keep above and below the cursor.
vim.opt . scrolloff = 10
vim.o . scrolloff = 10
-- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`),
-- instead raise a dialog asking if you wish to save the current file(s)
-- See `:help 'confirm'`
vim.o . confirm = true
-- [[ Basic Keymaps ]]
-- See `:help vim.keymap.set()`
@@ -189,17 +199,23 @@ vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right win
vim.keymap . set ( ' n ' , ' <C-j> ' , ' <C-w><C-j> ' , { desc = ' Move focus to the lower window ' } )
vim.keymap . set ( ' n ' , ' <C-k> ' , ' <C-w><C-k> ' , { desc = ' Move focus to the upper window ' } )
-- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes
-- vim.keymap.set("n", "<C-S-h>", "<C-w>H", { desc = "Move window to the left" })
-- vim.keymap.set("n", "<C-S-l>", "<C-w>L", { desc = "Move window to the right" })
-- vim.keymap.set("n", "<C-S-j>", "<C-w>J", { desc = "Move window to the lower" })
-- vim.keymap.set("n", "<C-S-k>", "<C-w>K", { desc = "Move window to the upper" })
-- [[ Basic Autocommands ]]
-- See `:help lua-guide-autocommands`
-- Highlight when yanking (copying) text
-- Try it with `yap` in normal mode
-- See `:help vim.highlight .on_yank()`
-- See `:help vim.hl .on_yank()`
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.highlight . on_yank ( )
vim.hl . on_yank ( )
end ,
} )
@@ -212,8 +228,11 @@ if not (vim.uv or vim.loop).fs_stat(lazypath) then
if vim.v . shell_error ~= 0 then
error ( ' Error cloning lazy.nvim: \n ' .. out )
end
end ---@diagnostic disable-next-line: undefined-field
vim.opt . rtp : prepend ( lazypath )
end
---@type vim.Option
local rtp = vim.opt . rtp
rtp : prepend ( lazypath )
-- [[ Configure and install plugins ]]
--
@@ -227,8 +246,8 @@ vim.opt.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).
' tpope/vim-sleuth ' , -- Detect tabstop and shiftwidth automatically
-- NOTE: Plugins can be added via a link or github org/name. To run setup automatically, use `opts = {}`
{ ' NMAC427/guess-indent.nvim ' , opts = { } } ,
-- NOTE: Plugins can also be added by using a table,
-- with the first argument being the link and the following
@@ -284,7 +303,7 @@ require('lazy').setup({
event = ' VimEnter ' , -- Sets the loading event to 'VimEnter'
opts = {
-- delay between pressing a key and opening which-key (milliseconds)
-- this setting is independent of vim.opt .timeoutlen
-- this setting is independent of vim.o.timeoutlen
delay = 0 ,
icons = {
-- set icon mappings to true if you have a Nerd Font
@@ -325,11 +344,7 @@ require('lazy').setup({
-- Document existing key chains
spec = {
{ ' <leader>c ' , group = ' [C]ode ' , mode = { ' n ' , ' x ' } } ,
{ ' <leader>d ' , group = ' [D]ocument ' } ,
{ ' <leader>r ' , group = ' [R]ename ' } ,
{ ' <leader>s ' , group = ' [S]earch ' } ,
{ ' <leader>w ' , group = ' [W]orkspace ' } ,
{ ' <leader>t ' , group = ' [T]oggle ' } ,
{ ' <leader>h ' , group = ' Git [H]unk ' , mode = { ' n ' , ' v ' } } ,
} ,
@@ -345,8 +360,17 @@ 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 ' ,
branch = ' 0.1.x ' ,
dependencies = {
' nvim-lua/plenary.nvim ' ,
{ -- If encountering errors, see telescope-fzf-native README for installation instructions
@@ -421,8 +445,47 @@ require('lazy').setup({
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 ' } )
-- 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 is a little bit redundant, but we can switch off telescope for an optional
-- picker like snacks more easily when the keymaps are defined in the plugin itself.
-- It sets up buffer-local keymaps, autocommands, and other LSP-related settings
-- whenever an LSP client attaches to a buffer.
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 ,
} )
-- Slightly advanced example of overriding default behavior and theme
vim.keymap . set ( ' n ' , ' <leader>/ ' , function ( )
-- You can pass additional configuration to Telescope to change the theme, layout, etc.
@@ -449,18 +512,6 @@ require('lazy').setup({
} ,
-- 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 ' ,
@@ -468,15 +519,15 @@ require('lazy').setup({
-- Automatically install LSPs and related tools to stdpath for Neovim
-- 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({})`
{ ' williamboman /mason.nvim' , opts = { } } ,
' williamboman /mason-lspconfig.nvim' ,
{ ' mason-org /mason.nvim' , opts = { } } ,
' mason-org /mason-lspconfig.nvim' ,
' WhoIsSethDaniel/mason-tool-installer.nvim ' ,
-- Useful status updates for LSP.
{ ' j-hui/fidget.nvim ' , opts = { } } ,
-- Allows extra capabilities provided by nvim- cmp
' hrsh7th/cmp-nvim-ls p' ,
-- Allows extra capabilities provided by blink. cmp
' saghen/blink.cm p' ,
} ,
config = function ( )
-- Brief aside: **What is LSP?**
@@ -521,42 +572,17 @@ require('lazy').setup({
vim.keymap . set ( mode , keys , func , { buffer = event.buf , desc = ' LSP: ' .. desc } )
end
-- 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 ( ' gd ' , require ( ' telescope.builtin ' ) . lsp_definitions , ' [G]oto [D]efinition ' )
-- Find references for the word under your cursor.
map ( ' gr ' , 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 ( ' gI ' , require ( ' telescope.builtin ' ) . lsp_implementations , ' [G]oto [I]mplementation ' )
-- 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 ( ' <leader>D ' , require ( ' telescope.builtin ' ) . lsp_type_definitions , ' Type [D]efinition ' )
-- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc.
map ( ' <leader>ds ' , require ( ' telescope.builtin ' ) . lsp_document_symbols , ' [D]ocument [S]ymbols ' )
-- Fuzzy find all the symbols in your current workspace.
-- Similar to document symbols, except searches over your entire project.
map ( ' <leader>ws ' , require ( ' telescope.builtin ' ) . lsp_dynamic_workspace_symbols , ' [W]orkspace [S]ymbols ' )
-- Rename the variable under your cursor.
-- Most Language Servers support renaming across files, etc.
map ( ' <leader> rn' , vim.lsp . buf.rename , ' [R]e[n]ame ' )
map ( ' g rn' , vim.lsp . buf.rename , ' [R]e[n]ame ' )
-- Execute a code action, usually your cursor needs to be on top of an error
-- or a suggestion from your LSP for this to activate.
map ( ' <leader>c a' , vim.lsp . buf.code_action , ' [C] ode [A]ction ' , { ' n ' , ' x ' } )
map ( ' gr a' , vim.lsp . buf.code_action , ' [G]oto Code [A]ction ' , { ' n ' , ' x ' } )
-- WARN: This is not Goto Definition, this is Goto Declaration.
-- For example, in C this would take you to the header.
map ( ' gD ' , vim.lsp . buf.declaration , ' [G]oto [D]eclaration ' )
map ( ' gr D ' , vim.lsp . buf.declaration , ' [G]oto [D]eclaration ' )
-- The following two autocommands are used to highlight references of the
-- word under your cursor when your cursor rests there for a little while.
@@ -564,7 +590,7 @@ require('lazy').setup({
--
-- 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) 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 ,
@@ -591,7 +617,7 @@ 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) then
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 ' )
@@ -599,22 +625,40 @@ require('lazy').setup({
end ,
} )
-- Change d iagnostic symbols in the sign column (gutter)
-- if vim.g.have_nerd_font then
-- local signs = { ERROR = '', WARN = '', INFO = '', HINT = '' }
-- local diagnostic_signs = {}
-- for type, icon in pairs(signs) do
-- diagnostic_signs[ vim.diagnostic. severity[type]] = icon
-- end
-- vim.diagnostic.config { signs = { text = diagnostic_signs } }
-- end
-- D iagnostic 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 nvim- cmp, luasnip, etc. Neovim now has *more* capabilities.
-- So, we create new capabilities with nvim cmp, and then broadcast that to the servers.
local capabilities = vim.lsp . protocol.make_client _capabilities( )
capabilities = vim.tbl_deep_extend ( ' force ' , capabilities , require ( ' cmp_nvim_lsp ' ) . default_capabilities ( ) )
-- When you add blink. cmp, luasnip, etc. Neovim now has *more* capabilities.
-- So, we create new capabilities with blink. cmp, and then broadcast that to the servers.
local capabilities = require ( ' blink.cmp ' ) . get_lsp _capabilities( )
-- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
@@ -637,22 +681,6 @@ require('lazy').setup({
--
-- 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
@@ -662,30 +690,50 @@ 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 , {
' 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 {
handlers = {
function ( server_name )
local server = servers [ server_name ] or { }
-- This handles overriding only values explicitly passe d
-- by the server configuration above. Useful when disabling
-- certain features of an LSP (for example, turning off formatting for ts_ls)
server.capabilities = vim.tbl_deep_extend ( ' force ' , { } , capabilities , server.capabilities or { } )
require ( ' lspconfig ' ) [ server_name ] . setup ( server )
end ,
for name , server in pairs ( servers ) do
server.capabilities = vim.tbl_deep_extend ( ' force ' , { } , capabilities , server.capabilities or { } )
vim.lsp . config ( name , server )
vim.lsp . enable ( name )
en d
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 ,
} ,
@@ -710,16 +758,14 @@ require('lazy').setup({
-- have a well standardized coding style. You can add additional
-- languages here or re-enable it for the disabled ones.
local disable_filetypes = { c = true , cpp = true }
local lsp_format_opt
if disable_filetypes [ vim.bo [ bufnr ] . filetype ] then
lsp_format_opt = ' never '
return nil
else
lsp_format_opt = ' fallback '
return {
timeout_ms = 500 ,
lsp_format = ' fallback ' ,
}
end
return {
timeout_ms = 500 ,
lsp_format = lsp_format_opt ,
}
end ,
formatters_by_ft = {
lua = { ' stylua ' } ,
@@ -733,12 +779,14 @@ require('lazy').setup({
} ,
{ -- Autocompletion
' hrsh7th/nvim- cmp' ,
event = ' Insert Enter' ,
' saghen/blink. cmp' ,
event = ' Vim Enter' ,
version = ' 1.* ' ,
dependencies = {
-- Snippet Engine & its associated nvim-cmp source
-- Snippet Engine
{
' L3MON4D3/LuaSnip ' ,
version = ' 2.* ' ,
build = ( function ( )
-- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments.
@@ -759,93 +807,70 @@ require('lazy').setup({
-- end,
-- },
} ,
opts = { } ,
} ,
' saadparwaiz1/cmp_luasnip ' ,
-- Adds other completion capabilities.
-- nvim-cmp does not ship with all sources by default. They are split
-- into multiple repos for maintenance purposes.
' hrsh7th/cmp-nvim-lsp ' ,
' hrsh7th/cmp-path ' ,
} ,
config = function ( )
-- See `:help cmp`
local cmp = require ' cmp '
local luasnip = require ' luasnip '
luasnip.config . setup { }
cmp.setup {
snippet = {
expand = function ( args )
luasnip.lsp_expand ( args.body )
end ,
} ,
completion = { completeopt = ' menu,menuone,noinsert ' } ,
-- For an understanding of why these mappings were
-- chosen, you will need to read `:help ins-completion`
--- @module 'blink.cmp'
--- @type blink.cmp.Config
opts = {
keymap = {
-- 'default' (recommended) for mappings similar to built-in completions
-- <c-y> to accept ([y]es) the completion.
-- This will auto-import if your LSP supports it.
-- This will expand snippets if the LSP sent a snippet.
-- 'super-tab' for tab to accept
-- 'enter' for enter to accept
-- 'none' for no mappings
--
-- For an understanding of why the 'default' preset is recommended ,
-- you will need to read `:help ins-completion`
--
-- No, but seriously. Please read `:help ins-completion`, it is really good!
mapping = cmp.mapping . preset.insert {
-- Select the [n]ext item
[ ' <C-n> ' ] = cmp.mapping . select_next_item ( ) ,
-- Select the [p]revious item
[ ' <C-p> ' ] = cmp.mapping . select_prev_item ( ) ,
--
-- All presets have the following mappings:
-- <tab>/<s-tab>: move to right/left of your snippet expansion
-- <c-space>: Open menu or open docs if already open
-- <c-n>/<c-p> or <up>/<down>: Select next/previous item
-- <c-e>: Hide menu
-- <c-k>: Toggle signature help
--
-- See :h blink-cmp-config-keymap for defining your own keymap
preset = ' default ' ,
-- Scroll the documentation window [b]ack / [f]orward
[ ' <C-b> ' ] = cmp.mapping . scroll_docs ( - 4 ) ,
[ ' <C-f> ' ] = cmp.mapping . scroll_docs ( 4 ) ,
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
} ,
-- Accept ([y]es) the completion.
-- This will auto-import if your LSP supports it.
-- This will expand snippets if the LSP sent a snippet.
[ ' <C-y> ' ] = cmp.mapping . confirm { select = true } ,
appearance = {
-- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- Adjusts spacing to ensure icons are aligned
nerd_font_variant = ' mono ' ,
} ,
-- If you prefer more traditional completion keymaps,
-- you can uncomment the following lines
--['<CR>'] = cmp.mapping.confirm { select = true },
--['<Tab>'] = cmp.mapping.select_next_item() ,
--['<S-Tab>'] = cmp.mapping.select_prev_item() ,
completion = {
-- By default, you may press `<c-space>` to show the documentation.
-- Optionally, set `auto_show = true` to show the documentation after a delay.
documentation = { auto_show = false , auto_show_delay_ms = 500 } ,
} ,
-- Manually trigger a completion from nvim-cmp.
-- Generally you don't need this, because nvim-cmp will display
-- completions whenever it has completion options available.
[ ' <C-Space> ' ] = cmp.mapping . complete { } ,
sources = {
default = { ' lsp ' , ' path ' , ' snippets ' } ,
} ,
-- Think of <c-l> as moving to the right of your snippet expansion.
-- So if you have a snippet that's like:
-- function $name($args)
-- $body
-- end
--
-- <c-l> will move you to the right of each of the expansion locations.
-- <c-h> is similar, except moving you backwards.
[ ' <C-l> ' ] = cmp.mapping ( function ( )
if luasnip.expand_or_locally_jumpable ( ) then
luasnip.expand_or_jump ( )
end
end , { ' i ' , ' s ' } ) ,
[ ' <C-h> ' ] = cmp.mapping ( function ( )
if luasnip.locally_jumpable ( - 1 ) then
luasnip.jump ( - 1 )
end
end , { ' i ' , ' s ' } ) ,
snippets = { preset = ' luasnip ' } ,
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
} ,
sources = {
{
name = ' lazydev ' ,
-- set group index to 0 to skip loading LuaLS completions as lazydev recommends it
group_index = 0 ,
} ,
{ name = ' nvim_lsp ' } ,
{ name = ' luasnip ' } ,
{ name = ' path ' } ,
} ,
}
end ,
-- Blink.cmp includes an optional, recommended rust fuzzy matcher,
-- which automatically downloads a prebuilt binary when enabled.
--
-- By default, we use the Lua implementation instead, but you may enable
-- the rust implementation via `'prefer_rust_with_warning'`
--
-- See :h blink-cmp-config-fuzzy for more information
fuzzy = { implementation = ' lua ' } ,
-- Shows a signature help window while you type arguments for a function
signature = { e nabled = true } ,
} ,
} ,
{ -- You can easily change to a different colorscheme.
@@ -855,14 +880,18 @@ require('lazy').setup({
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
' folke/tokyonight.nvim ' ,
priority = 1000 , -- Make sure to load this before all the other start plugins.
init = function ( )
config = function ( )
---@diagnostic disable-next-line: missing-fields
require ( ' tokyonight ' ) . setup {
styles = {
comments = { italic = false } , -- Disable italics in comments
} ,
}
-- Load the colorscheme here.
-- Like many other themes, this one has different styles, and you could load
-- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
vim.cmd . colorscheme ' tokyonight-night '
-- You can configure highlights by doing something like:
vim.cmd . hi ' Comment gui=none '
end ,
} ,
@@ -870,7 +899,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
--
@@ -903,33 +932,21 @@ require('lazy').setup({
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.configs ' , -- 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