Update init.lua
This commit is contained in:
		
							parent
							
								
									989b9da516
								
							
						
					
					
						commit
						df2ae5a223
					
				
							
								
								
									
										645
									
								
								init.lua
								
								
								
								
							
							
						
						
									
										645
									
								
								init.lua
								
								
								
								
							|  | @ -2,85 +2,93 @@ | ||||||
| local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' | local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' | ||||||
| local is_bootstrap = false | local is_bootstrap = false | ||||||
| if vim.fn.empty(vim.fn.glob(install_path)) > 0 then | if vim.fn.empty(vim.fn.glob(install_path)) > 0 then | ||||||
|   is_bootstrap = true | 	is_bootstrap = true | ||||||
|   vim.fn.system { 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path } | 	vim.fn.system { 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path } | ||||||
|   vim.cmd [[packadd packer.nvim]] | 	vim.cmd [[packadd packer.nvim]] | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| require('packer').startup(function(use) | require('packer').startup(function(use) | ||||||
|   -- Package manager | 	-- Package manager | ||||||
|   use 'wbthomason/packer.nvim' | 	use 'wbthomason/packer.nvim' | ||||||
| 
 | 
 | ||||||
|   use { -- LSP Configuration & Plugins | 	use { -- LSP Configuration & Plugins | ||||||
|     'neovim/nvim-lspconfig', | 		'neovim/nvim-lspconfig', | ||||||
|     requires = { | 		requires = { | ||||||
|       -- Automatically install LSPs to stdpath for neovim | 			-- Automatically install LSPs to stdpath for neovim | ||||||
|       'williamboman/mason.nvim', | 			'williamboman/mason.nvim', | ||||||
|       'williamboman/mason-lspconfig.nvim', | 			'williamboman/mason-lspconfig.nvim', | ||||||
| 
 | 
 | ||||||
|       -- Useful status updates for LSP | 			-- Useful status updates for LSP | ||||||
|       'j-hui/fidget.nvim', | 			'j-hui/fidget.nvim', | ||||||
| 
 | 
 | ||||||
|       -- Additional lua configuration, makes nvim stuff amazing | 			-- Additional lua configuration, makes nvim stuff amazing | ||||||
|       'folke/neodev.nvim', | 			'folke/neodev.nvim', | ||||||
|     }, | 		}, | ||||||
|   } | 	} | ||||||
| 
 | 
 | ||||||
|   use { -- Autocompletion | 	use { -- Autocompletion | ||||||
|     'hrsh7th/nvim-cmp', | 		'hrsh7th/nvim-cmp', | ||||||
|     requires = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, | 		requires = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, | ||||||
|   } | 	} | ||||||
| 
 | 
 | ||||||
|   use { -- Highlight, edit, and navigate code | 	use { -- Highlight, edit, and navigate code | ||||||
|     'nvim-treesitter/nvim-treesitter', | 		'nvim-treesitter/nvim-treesitter', | ||||||
|     run = function() | 		run = function() | ||||||
|       pcall(require('nvim-treesitter.install').update { with_sync = true }) | 			pcall(require('nvim-treesitter.install').update { with_sync = true }) | ||||||
|     end, | 		end, | ||||||
|   } | 	} | ||||||
| 
 | 
 | ||||||
|   use { -- Additional text objects via treesitter | 	use { -- Additional text objects via treesitter | ||||||
|     'nvim-treesitter/nvim-treesitter-textobjects', | 		'nvim-treesitter/nvim-treesitter-textobjects', | ||||||
|     after = 'nvim-treesitter', | 		after = 'nvim-treesitter', | ||||||
|   } | 	} | ||||||
| 
 | 
 | ||||||
|   -- Git related plugins | 	-- Git related plugins | ||||||
|   use 'tpope/vim-fugitive' | 	use 'tpope/vim-fugitive' | ||||||
|   use 'tpope/vim-rhubarb' | 	use 'tpope/vim-rhubarb' | ||||||
|   use 'lewis6991/gitsigns.nvim' | 	use 'lewis6991/gitsigns.nvim' | ||||||
| 
 | 
 | ||||||
|   use 'navarasu/onedark.nvim' -- Theme inspired by Atom | 	use 'navarasu/onedark.nvim' -- Theme inspired by Atom | ||||||
|   use 'nvim-lualine/lualine.nvim' -- Fancier statusline | 	use 'nvim-lualine/lualine.nvim' -- Fancier statusline | ||||||
|   use 'lukas-reineke/indent-blankline.nvim' -- Add indentation guides even on blank lines | 	use 'lukas-reineke/indent-blankline.nvim' -- Add indentation guides even on blank lines | ||||||
|   use 'numToStr/Comment.nvim' -- "gc" to comment visual regions/lines | 	use 'numToStr/Comment.nvim' -- "gc" to comment visual regions/lines | ||||||
|   use 'tpope/vim-sleuth' -- Detect tabstop and shiftwidth automatically | 	use 'tpope/vim-sleuth' -- Detect tabstop and shiftwidth automatically | ||||||
| 
 | 
 | ||||||
|   -- Fuzzy Finder (files, lsp, etc) | 	-- Fuzzy Finder (files, lsp, etc) | ||||||
|   use { 'nvim-telescope/telescope.nvim', branch = '0.1.x', requires = { 'nvim-lua/plenary.nvim' } } | 	use { 'nvim-telescope/telescope.nvim', branch = '0.1.x', requires = { 'nvim-lua/plenary.nvim' } } | ||||||
| 
 | 
 | ||||||
|   -- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available | 	-- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available | ||||||
|   use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make', cond = vim.fn.executable 'make' == 1 } | 	use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make', cond = vim.fn.executable 'make' == 1 } | ||||||
| 
 | 
 | ||||||
|   -- Scrollbar | 	-- Scrollbar | ||||||
|   use("petertriho/nvim-scrollbar") | 	use("petertriho/nvim-scrollbar") | ||||||
| 
 | 
 | ||||||
|   -- nvim-tree file browser to replace Netrw | 	-- nvim-tree file browser to replace Netrw | ||||||
|   use { | 	use { | ||||||
|     'nvim-tree/nvim-tree.lua', | 		'nvim-tree/nvim-tree.lua', | ||||||
|     requires = { | 		requires = { | ||||||
|       'nvim-tree/nvim-web-devicons', -- optional, for file icons | 			'nvim-tree/nvim-web-devicons', -- optional, for file icons | ||||||
|     }, | 		}, | ||||||
|     tag = 'nightly' | 		tag = 'nightly' | ||||||
|   } | 	} | ||||||
| 
 | 
 | ||||||
|   -- Add custom plugins to packer from ~/.config/nvim/lua/custom/plugins.lua | 	-- Vim commentary | ||||||
|   local has_plugins, plugins = pcall(require, 'custom.plugins') | 	use 'tpope/vim-commentary' | ||||||
|   if has_plugins then |  | ||||||
|     plugins(use) |  | ||||||
|   end |  | ||||||
| 
 | 
 | ||||||
|   if is_bootstrap then | 	-- prettier.nvim setup | ||||||
|     require('packer').sync() | 	use('neovim/nvim-lspconfig') | ||||||
|   end | 	use('jose-elias-alvarez/null-ls.nvim') | ||||||
|  | 	use('MunifTanjim/prettier.nvim') | ||||||
|  | 
 | ||||||
|  | 	-- Add custom plugins to packer from ~/.config/nvim/lua/custom/plugins.lua | ||||||
|  | 	local has_plugins, plugins = pcall(require, 'custom.plugins') | ||||||
|  | 	if has_plugins then | ||||||
|  | 		plugins(use) | ||||||
|  | 	end | ||||||
|  | 
 | ||||||
|  | 	if is_bootstrap then | ||||||
|  | 		require('packer').sync() | ||||||
|  | 	end | ||||||
| end) | end) | ||||||
| 
 | 
 | ||||||
| -- When we are bootstrapping a configuration, it doesn't | -- When we are bootstrapping a configuration, it doesn't | ||||||
|  | @ -88,26 +96,20 @@ end) | ||||||
| -- | -- | ||||||
| -- You'll need to restart nvim, and then it will work. | -- You'll need to restart nvim, and then it will work. | ||||||
| if is_bootstrap then | if is_bootstrap then | ||||||
|   print '==================================' | 	print '==================================' | ||||||
|   print '    Plugins are being installed' | 	print '    Plugins are being installed' | ||||||
|   print '    Wait until Packer completes,' | 	print '    Wait until Packer completes,' | ||||||
|   print '       then restart nvim' | 	print '       then restart nvim' | ||||||
|   print '==================================' | 	print '==================================' | ||||||
|   return | 	return | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| -- Automatically source and re-compile packer whenever you save this init.lua | -- Automatically source and re-compile packer whenever you save this init.lua | ||||||
| local packer_group = vim.api.nvim_create_augroup('Packer', { clear = true }) | local packer_group = vim.api.nvim_create_augroup('Packer', { clear = true }) | ||||||
| vim.api.nvim_create_autocmd('BufWritePost', { | vim.api.nvim_create_autocmd('BufWritePost', { | ||||||
|   command = 'source <afile> | silent! LspStop | silent! LspStart | PackerCompile', | 	command = 'source <afile> | silent! LspStop | silent! LspStart | PackerCompile', | ||||||
|   group = packer_group, | 	group = packer_group, | ||||||
|   pattern = vim.fn.expand '$MYVIMRC', | 	pattern = vim.fn.expand '$MYVIMRC', | ||||||
| }) |  | ||||||
| -- Automatically eslint format on save |  | ||||||
| vim.api.nvim_create_autocmd('BufWritePre', { |  | ||||||
|   pattern = { '*.tsx', '*.ts', '*.jsx', '*.js' }, |  | ||||||
|   command = 'silent! EslintFixAll', |  | ||||||
|   group = vim.api.nvim_create_augroup('MyAutocmdsJavaScripFormatting', {}), |  | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
| -- [[ Setting options ]] | -- [[ Setting options ]] | ||||||
|  | @ -162,22 +164,22 @@ vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = tr | ||||||
| -- See `:help vim.highlight.on_yank()` | -- See `:help vim.highlight.on_yank()` | ||||||
| local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) | local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) | ||||||
| vim.api.nvim_create_autocmd('TextYankPost', { | vim.api.nvim_create_autocmd('TextYankPost', { | ||||||
|   callback = function() | 	callback = function() | ||||||
|     vim.highlight.on_yank() | 		vim.highlight.on_yank() | ||||||
|   end, | 	end, | ||||||
|   group = highlight_group, | 	group = highlight_group, | ||||||
|   pattern = '*', | 	pattern = '*', | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
| -- Set lualine as statusline | -- Set lualine as statusline | ||||||
| -- See `:help lualine.txt` | -- See `:help lualine.txt` | ||||||
| require('lualine').setup { | require('lualine').setup { | ||||||
|   options = { | 	options = { | ||||||
|     icons_enabled = false, | 		icons_enabled = false, | ||||||
|     theme = 'onedark', | 		theme = 'onedark', | ||||||
|     component_separators = '|', | 		component_separators = '|', | ||||||
|     section_separators = '', | 		section_separators = '', | ||||||
|   }, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| -- Enable Comment.nvim | -- Enable Comment.nvim | ||||||
|  | @ -186,33 +188,33 @@ require('Comment').setup() | ||||||
| -- Enable `lukas-reineke/indent-blankline.nvim` | -- Enable `lukas-reineke/indent-blankline.nvim` | ||||||
| -- See `:help indent_blankline.txt` | -- See `:help indent_blankline.txt` | ||||||
| require('indent_blankline').setup { | require('indent_blankline').setup { | ||||||
|   char = '┊', | 	char = '┊', | ||||||
|   show_trailing_blankline_indent = false, | 	show_trailing_blankline_indent = false, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| -- Gitsigns | -- Gitsigns | ||||||
| -- See `:help gitsigns.txt` | -- See `:help gitsigns.txt` | ||||||
| require('gitsigns').setup { | require('gitsigns').setup { | ||||||
|   signs = { | 	signs = { | ||||||
|     add = { text = '+' }, | 		add = { text = '+' }, | ||||||
|     change = { text = '~' }, | 		change = { text = '~' }, | ||||||
|     delete = { text = '_' }, | 		delete = { text = '_' }, | ||||||
|     topdelete = { text = '‾' }, | 		topdelete = { text = '‾' }, | ||||||
|     changedelete = { text = '~' }, | 		changedelete = { text = '~' }, | ||||||
|   }, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| -- [[ Configure Telescope ]] | -- [[ Configure Telescope ]] | ||||||
| -- See `:help telescope` and `:help telescope.setup()` | -- See `:help telescope` and `:help telescope.setup()` | ||||||
| require('telescope').setup { | require('telescope').setup { | ||||||
|   defaults = { | 	defaults = { | ||||||
|     mappings = { | 		mappings = { | ||||||
|       i = { | 			i = { | ||||||
|         ['<C-u>'] = false, | 				['<C-u>'] = false, | ||||||
|         ['<C-d>'] = false, | 				['<C-d>'] = false, | ||||||
|       }, | 			}, | ||||||
|     }, | 		}, | ||||||
|   }, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| -- Enable telescope fzf native, if installed | -- Enable telescope fzf native, if installed | ||||||
|  | @ -222,11 +224,11 @@ pcall(require('telescope').load_extension, 'fzf') | ||||||
| vim.keymap.set('n', '<leader>?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) | vim.keymap.set('n', '<leader>?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) | ||||||
| vim.keymap.set('n', '<leader><space>', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) | vim.keymap.set('n', '<leader><space>', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) | ||||||
| vim.keymap.set('n', '<leader>/', function() | vim.keymap.set('n', '<leader>/', function() | ||||||
|   -- You can pass additional configuration to telescope to change theme, layout, etc. | 	-- You can pass additional configuration to telescope to change theme, layout, etc. | ||||||
|   require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { | 	require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { | ||||||
|     winblend = 10, | 		winblend = 10, | ||||||
|     previewer = false, | 		previewer = false, | ||||||
|   }) | 	}) | ||||||
| end, { desc = '[/] Fuzzily search in current buffer]' }) | end, { desc = '[/] Fuzzily search in current buffer]' }) | ||||||
| 
 | 
 | ||||||
| vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) | vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) | ||||||
|  | @ -238,64 +240,64 @@ vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { de | ||||||
| -- [[ Configure Treesitter ]] | -- [[ Configure Treesitter ]] | ||||||
| -- See `:help nvim-treesitter` | -- See `:help nvim-treesitter` | ||||||
| require('nvim-treesitter.configs').setup { | require('nvim-treesitter.configs').setup { | ||||||
|   -- Add languages to be installed here that you want installed for treesitter | 	-- Add languages to be installed here that you want installed for treesitter | ||||||
|   ensure_installed = { 'go', 'javascript', 'lua', 'python', 'rust', 'typescript', 'help', 'vim' }, | 	ensure_installed = { 'go', 'javascript', 'lua', 'python', 'rust', 'typescript', 'help', 'vim' }, | ||||||
| 
 | 
 | ||||||
|   highlight = { enable = true }, | 	highlight = { enable = true }, | ||||||
|   indent = { enable = true, disable = { 'python' } }, | 	indent = { enable = true, disable = { 'python' } }, | ||||||
|   incremental_selection = { | 	incremental_selection = { | ||||||
|     enable = true, | 		enable = true, | ||||||
|     keymaps = { | 		keymaps = { | ||||||
|       init_selection = '<c-space>', | 			init_selection = '<c-space>', | ||||||
|       node_incremental = '<c-space>', | 			node_incremental = '<c-space>', | ||||||
|       scope_incremental = '<c-s>', | 			scope_incremental = '<c-s>', | ||||||
|       node_decremental = '<c-backspace>', | 			node_decremental = '<c-backspace>', | ||||||
|     }, | 		}, | ||||||
|   }, | 	}, | ||||||
|   textobjects = { | 	textobjects = { | ||||||
|     select = { | 		select = { | ||||||
|       enable = true, | 			enable = true, | ||||||
|       lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim | 			lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim | ||||||
|       keymaps = { | 			keymaps = { | ||||||
|         -- You can use the capture groups defined in textobjects.scm | 				-- You can use the capture groups defined in textobjects.scm | ||||||
|         ['aa'] = '@parameter.outer', | 				['aa'] = '@parameter.outer', | ||||||
|         ['ia'] = '@parameter.inner', | 				['ia'] = '@parameter.inner', | ||||||
|         ['af'] = '@function.outer', | 				['af'] = '@function.outer', | ||||||
|         ['if'] = '@function.inner', | 				['if'] = '@function.inner', | ||||||
|         ['ac'] = '@class.outer', | 				['ac'] = '@class.outer', | ||||||
|         ['ic'] = '@class.inner', | 				['ic'] = '@class.inner', | ||||||
|       }, | 			}, | ||||||
|     }, | 		}, | ||||||
|     move = { | 		move = { | ||||||
|       enable = true, | 			enable = true, | ||||||
|       set_jumps = true, -- whether to set jumps in the jumplist | 			set_jumps = true, -- whether to set jumps in the jumplist | ||||||
|       goto_next_start = { | 			goto_next_start = { | ||||||
|         [']m'] = '@function.outer', | 				[']m'] = '@function.outer', | ||||||
|         [']]'] = '@class.outer', | 				[']]'] = '@class.outer', | ||||||
|       }, | 			}, | ||||||
|       goto_next_end = { | 			goto_next_end = { | ||||||
|         [']M'] = '@function.outer', | 				[']M'] = '@function.outer', | ||||||
|         [']['] = '@class.outer', | 				[']['] = '@class.outer', | ||||||
|       }, | 			}, | ||||||
|       goto_previous_start = { | 			goto_previous_start = { | ||||||
|         ['[m'] = '@function.outer', | 				['[m'] = '@function.outer', | ||||||
|         ['[['] = '@class.outer', | 				['[['] = '@class.outer', | ||||||
|       }, | 			}, | ||||||
|       goto_previous_end = { | 			goto_previous_end = { | ||||||
|         ['[M'] = '@function.outer', | 				['[M'] = '@function.outer', | ||||||
|         ['[]'] = '@class.outer', | 				['[]'] = '@class.outer', | ||||||
|       }, | 			}, | ||||||
|     }, | 		}, | ||||||
|     swap = { | 		swap = { | ||||||
|       enable = true, | 			enable = true, | ||||||
|       swap_next = { | 			swap_next = { | ||||||
|         ['<leader>a'] = '@parameter.inner', | 				['<leader>a'] = '@parameter.inner', | ||||||
|       }, | 			}, | ||||||
|       swap_previous = { | 			swap_previous = { | ||||||
|         ['<leader>A'] = '@parameter.inner', | 				['<leader>A'] = '@parameter.inner', | ||||||
|       }, | 			}, | ||||||
|     }, | 		}, | ||||||
|   }, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| -- Diagnostic keymaps | -- Diagnostic keymaps | ||||||
|  | @ -307,46 +309,46 @@ vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist) | ||||||
| -- LSP settings. | -- LSP settings. | ||||||
| --  This function gets run when an LSP connects to a particular buffer. | --  This function gets run when an LSP connects to a particular buffer. | ||||||
| local on_attach = function(_, bufnr) | local on_attach = function(_, bufnr) | ||||||
|   -- NOTE: Remember that lua is a real programming language, and as such it is possible | 	-- NOTE: Remember that lua is a real programming language, and as such it is possible | ||||||
|   -- to define small helper and utility functions so you don't have to repeat yourself | 	-- to define small helper and utility functions so you don't have to repeat yourself | ||||||
|   -- many times. | 	-- many times. | ||||||
|   -- | 	-- | ||||||
|   -- In this case, we create a function that lets us more easily define mappings specific | 	-- In this case, we create a function that lets us more easily define mappings specific | ||||||
|   -- for LSP related items. It sets the mode, buffer and description for us each time. | 	-- for LSP related items. It sets the mode, buffer and description for us each time. | ||||||
|   local nmap = function(keys, func, desc) | 	local nmap = function(keys, func, desc) | ||||||
|     if desc then | 		if desc then | ||||||
|       desc = 'LSP: ' .. desc | 			desc = 'LSP: ' .. desc | ||||||
|     end | 		end | ||||||
| 
 | 
 | ||||||
|     vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) | 		vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) | ||||||
|   end | 	end | ||||||
| 
 | 
 | ||||||
|   nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') | 	nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') | ||||||
|   nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') | 	nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') | ||||||
| 
 | 
 | ||||||
|   nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') | 	nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') | ||||||
|   nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') | 	nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') | ||||||
|   nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') | 	nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') | ||||||
|   nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition') | 	nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition') | ||||||
|   nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') | 	nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') | ||||||
|   nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') | 	nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') | ||||||
| 
 | 
 | ||||||
|   -- See `:help K` for why this keymap | 	-- See `:help K` for why this keymap | ||||||
|   nmap('K', vim.lsp.buf.hover, 'Hover Documentation') | 	nmap('K', vim.lsp.buf.hover, 'Hover Documentation') | ||||||
|   nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation') | 	nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation') | ||||||
| 
 | 
 | ||||||
|   -- Lesser used LSP functionality | 	-- Lesser used LSP functionality | ||||||
|   nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') | 	nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') | ||||||
|   nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') | 	nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') | ||||||
|   nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') | 	nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') | ||||||
|   nmap('<leader>wl', function() | 	nmap('<leader>wl', function() | ||||||
|     print(vim.inspect(vim.lsp.buf.list_workspace_folders())) | 		print(vim.inspect(vim.lsp.buf.list_workspace_folders())) | ||||||
|   end, '[W]orkspace [L]ist Folders') | 	end, '[W]orkspace [L]ist Folders') | ||||||
| 
 | 
 | ||||||
|   -- Create a command `:Format` local to the LSP buffer | 	-- Create a command `:Format` local to the LSP buffer | ||||||
|   vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) | 	vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) | ||||||
|     vim.lsp.buf.format() | 		vim.lsp.buf.format() | ||||||
|   end, { desc = 'Format current buffer with LSP' }) | 	end, { desc = 'Format current buffer with LSP' }) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| -- Enable the following language servers | -- Enable the following language servers | ||||||
|  | @ -355,18 +357,18 @@ end | ||||||
| --  Add any additional override configuration in the following tables. They will be passed to | --  Add any additional override configuration in the following tables. They will be passed to | ||||||
| --  the `settings` field of the server config. You must look up that documentation yourself. | --  the `settings` field of the server config. You must look up that documentation yourself. | ||||||
| local servers = { | local servers = { | ||||||
|   -- clangd = {}, | 	-- clangd = {}, | ||||||
|   -- gopls = {}, | 	-- gopls = {}, | ||||||
|   -- pyright = {}, | 	-- pyright = {}, | ||||||
|   -- rust_analyzer = {}, | 	-- rust_analyzer = {}, | ||||||
|   -- tsserver = {}, | 	-- tsserver = {}, | ||||||
| 
 | 
 | ||||||
|   sumneko_lua = { | 	sumneko_lua = { | ||||||
|     Lua = { | 		Lua = { | ||||||
|       workspace = { checkThirdParty = false }, | 			workspace = { checkThirdParty = false }, | ||||||
|       telemetry = { enable = false }, | 			telemetry = { enable = false }, | ||||||
|     }, | 		}, | ||||||
|   }, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| -- Setup neovim lua configuration | -- Setup neovim lua configuration | ||||||
|  | @ -383,17 +385,17 @@ require('mason').setup() | ||||||
| local mason_lspconfig = require 'mason-lspconfig' | local mason_lspconfig = require 'mason-lspconfig' | ||||||
| 
 | 
 | ||||||
| mason_lspconfig.setup { | mason_lspconfig.setup { | ||||||
|   ensure_installed = vim.tbl_keys(servers), | 	ensure_installed = vim.tbl_keys(servers), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| mason_lspconfig.setup_handlers { | mason_lspconfig.setup_handlers { | ||||||
|   function(server_name) | 	function(server_name) | ||||||
|     require('lspconfig')[server_name].setup { | 		require('lspconfig')[server_name].setup { | ||||||
|       capabilities = capabilities, | 			capabilities = capabilities, | ||||||
|       on_attach = on_attach, | 			on_attach = on_attach, | ||||||
|       settings = servers[server_name], | 			settings = servers[server_name], | ||||||
|     } | 		} | ||||||
|   end, | 	end, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| -- Turn on lsp status information | -- Turn on lsp status information | ||||||
|  | @ -404,42 +406,42 @@ local cmp = require 'cmp' | ||||||
| local luasnip = require 'luasnip' | local luasnip = require 'luasnip' | ||||||
| 
 | 
 | ||||||
| cmp.setup { | cmp.setup { | ||||||
|   snippet = { | 	snippet = { | ||||||
|     expand = function(args) | 		expand = function(args) | ||||||
|       luasnip.lsp_expand(args.body) | 			luasnip.lsp_expand(args.body) | ||||||
|     end, | 		end, | ||||||
|   }, | 	}, | ||||||
|   mapping = cmp.mapping.preset.insert { | 	mapping = cmp.mapping.preset.insert { | ||||||
|     ['<C-d>'] = cmp.mapping.scroll_docs(-4), | 		['<C-d>'] = cmp.mapping.scroll_docs(-4), | ||||||
|     ['<C-f>'] = cmp.mapping.scroll_docs(4), | 		['<C-f>'] = cmp.mapping.scroll_docs(4), | ||||||
|     ['<C-Space>'] = cmp.mapping.complete(), | 		['<C-Space>'] = cmp.mapping.complete(), | ||||||
|     ['<CR>'] = cmp.mapping.confirm { | 		['<CR>'] = cmp.mapping.confirm { | ||||||
|       behavior = cmp.ConfirmBehavior.Replace, | 			behavior = cmp.ConfirmBehavior.Replace, | ||||||
|       select = true, | 			select = true, | ||||||
|     }, | 		}, | ||||||
|     ['<Tab>'] = cmp.mapping(function(fallback) | 		['<Tab>'] = cmp.mapping(function(fallback) | ||||||
|       if cmp.visible() then | 			if cmp.visible() then | ||||||
|         cmp.select_next_item() | 				cmp.select_next_item() | ||||||
|       elseif luasnip.expand_or_jumpable() then | 			elseif luasnip.expand_or_jumpable() then | ||||||
|         luasnip.expand_or_jump() | 				luasnip.expand_or_jump() | ||||||
|       else | 			else | ||||||
|         fallback() | 				fallback() | ||||||
|       end | 			end | ||||||
|     end, { 'i', 's' }), | 		end, { 'i', 's' }), | ||||||
|     ['<S-Tab>'] = cmp.mapping(function(fallback) | 		['<S-Tab>'] = cmp.mapping(function(fallback) | ||||||
|       if cmp.visible() then | 			if cmp.visible() then | ||||||
|         cmp.select_prev_item() | 				cmp.select_prev_item() | ||||||
|       elseif luasnip.jumpable(-1) then | 			elseif luasnip.jumpable(-1) then | ||||||
|         luasnip.jump(-1) | 				luasnip.jump(-1) | ||||||
|       else | 			else | ||||||
|         fallback() | 				fallback() | ||||||
|       end | 			end | ||||||
|     end, { 'i', 's' }), | 		end, { 'i', 's' }), | ||||||
|   }, | 	}, | ||||||
|   sources = { | 	sources = { | ||||||
|     { name = 'nvim_lsp' }, | 		{ name = 'nvim_lsp' }, | ||||||
|     { name = 'luasnip' }, | 		{ name = 'luasnip' }, | ||||||
|   }, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| -- Enable scrollbar | -- Enable scrollbar | ||||||
|  | @ -454,24 +456,119 @@ vim.opt.termguicolors = true | ||||||
| 
 | 
 | ||||||
| -- OR setup with some options | -- OR setup with some options | ||||||
| require("nvim-tree").setup({ | require("nvim-tree").setup({ | ||||||
|   sort_by = "case_sensitive", | 	sort_by = "case_sensitive", | ||||||
|   view = { | 	view = { | ||||||
|     adaptive_size = true, | 		adaptive_size = true, | ||||||
|     mappings = { | 		mappings = { | ||||||
|       list = { | 			list = { | ||||||
|         { key = "u", action = "dir_up" }, | 				{ key = "u", action = "dir_up" }, | ||||||
|       }, | 			}, | ||||||
|     }, | 		}, | ||||||
|   }, | 	}, | ||||||
|   renderer = { | 	renderer = { | ||||||
|     group_empty = true, | 		group_empty = true, | ||||||
|   }, | 	}, | ||||||
|   filters = { | 	filters = { | ||||||
|     dotfiles = false, | 		dotfiles = false, | ||||||
|   }, | 	}, | ||||||
|   git = { | 	git = { | ||||||
|     ignore = false, | 		ignore = false, | ||||||
|   }, | 	}, | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | -- prettier.nvim setup | ||||||
|  | 
 | ||||||
|  | local null_ls = require("null-ls") | ||||||
|  | 
 | ||||||
|  | local group = vim.api.nvim_create_augroup("lsp_format_on_save", { clear = false }) | ||||||
|  | local event = "BufWritePre" -- or "BufWritePost" | ||||||
|  | local async = event == "BufWritePost" | ||||||
|  | 
 | ||||||
|  | null_ls.setup({ | ||||||
|  | 	on_attach = function(client, bufnr) | ||||||
|  | 		if client.supports_method("textDocument/formatting") then | ||||||
|  | 
 | ||||||
|  | 			vim.keymap.set("n", "<Leader>f", function() | ||||||
|  | 				vim.lsp.buf.format({ bufnr = vim.api.nvim_get_current_buf() }) | ||||||
|  | 			end, { buffer = bufnr, desc = "[lsp] format" }) | ||||||
|  | 
 | ||||||
|  | 			-- format on save | ||||||
|  | 			vim.api.nvim_clear_autocmds({ buffer = bufnr, group = group }) | ||||||
|  | 			vim.api.nvim_create_autocmd(event, { | ||||||
|  | 				buffer = bufnr, | ||||||
|  | 				group = group, | ||||||
|  | 				callback = function() | ||||||
|  | 					vim.lsp.buf.format({ bufnr = bufnr, async = async }) | ||||||
|  | 				end, | ||||||
|  | 				desc = "[lsp] format on save", | ||||||
|  | 			}) | ||||||
|  | 		end | ||||||
|  | 
 | ||||||
|  | 		if client.supports_method("textDocument/rangeFormatting") then | ||||||
|  | 			vim.keymap.set("x", "<Leader>f", function() | ||||||
|  | 				vim.lsp.buf.format({ bufnr = vim.api.nvim_get_current_buf() }) | ||||||
|  | 			end, { buffer = bufnr, desc = "[lsp] format" }) | ||||||
|  | 		end | ||||||
|  | 	end, | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | local prettier = require("prettier") | ||||||
|  | 
 | ||||||
|  | prettier.setup({ | ||||||
|  | 	bin = 'prettier', -- or `'prettierd'` (v0.22+) | ||||||
|  | 	filetypes = { | ||||||
|  | 		"css", | ||||||
|  | 		"graphql", | ||||||
|  | 		"html", | ||||||
|  | 		"javascript", | ||||||
|  | 		"javascriptreact", | ||||||
|  | 		"json", | ||||||
|  | 		"less", | ||||||
|  | 		"markdown", | ||||||
|  | 		"scss", | ||||||
|  | 		"typescript", | ||||||
|  | 		"typescriptreact", | ||||||
|  | 		"yaml", | ||||||
|  | 	}, | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | prettier.setup({ | ||||||
|  | 	["null-ls"] = { | ||||||
|  | 		condition = function() | ||||||
|  | 			return prettier.config_exists({ | ||||||
|  | 				-- if `false`, skips checking `package.json` for `"prettier"` key | ||||||
|  | 				check_package_json = true, | ||||||
|  | 			}) | ||||||
|  | 		end, | ||||||
|  | 		runtime_condition = function(params) | ||||||
|  | 			-- return false to skip running prettier | ||||||
|  | 			return true | ||||||
|  | 		end, | ||||||
|  | 		timeout = 5000, | ||||||
|  | 	} | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | prettier.setup({ | ||||||
|  | 	cli_options = { | ||||||
|  | 		arrow_parens = "always", | ||||||
|  | 		bracket_spacing = true, | ||||||
|  | 		bracket_same_line = false, | ||||||
|  | 		embedded_language_formatting = "auto", | ||||||
|  | 		end_of_line = "lf", | ||||||
|  | 		html_whitespace_sensitivity = "css", | ||||||
|  | 		-- jsx_bracket_same_line = false, | ||||||
|  | 		jsx_single_quote = false, | ||||||
|  | 		print_width = 80, | ||||||
|  | 		prose_wrap = "preserve", | ||||||
|  | 		quote_props = "as-needed", | ||||||
|  | 		semi = true, | ||||||
|  | 		single_attribute_per_line = false, | ||||||
|  | 		single_quote = false, | ||||||
|  | 		tab_width = 2, | ||||||
|  | 		trailing_comma = "es5", | ||||||
|  | 		use_tabs = false, | ||||||
|  | 		vue_indent_script_and_style = false, | ||||||
|  | 	}, | ||||||
| }) | }) | ||||||
| -- The line beneath this is called `modeline`. See `:help modeline` | -- The line beneath this is called `modeline`. See `:help modeline` | ||||||
| -- vim: ts=2 sts=2 sw=2 et | -- vim: ts=2 sts=2 sw=2 et | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue