|
@@ -1,320 +1,40 @@
|
|
|
|
+-- Initialise dependencies
|
|
|
|
+require 'custom.lazy'
|
|
|
|
+require 'custom.autocomplete'
|
|
|
|
+
|
|
-- Set <space> as the leader key
|
|
-- Set <space> as the leader key
|
|
-- See `:help mapleader`
|
|
-- See `:help mapleader`
|
|
-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used)
|
|
-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used)
|
|
vim.g.mapleader = ' '
|
|
vim.g.mapleader = ' '
|
|
vim.g.maplocalleader = ' '
|
|
vim.g.maplocalleader = ' '
|
|
|
|
|
|
|
|
+-- Use system clipboard for yanking/pasting
|
|
|
|
+vim.o.clipboard = 'unnamedplus'
|
|
|
|
+
|
|
vim.wo.relativenumber = true
|
|
vim.wo.relativenumber = true
|
|
|
|
|
|
-- Make window management nice
|
|
-- Make window management nice
|
|
-vim.api.nvim_set_keymap("n", "<C-Left>", ":vertical resize +3<CR>", { silent = true, noremap = true })
|
|
|
|
-vim.api.nvim_set_keymap("n", "<C-Right>", ":vertical resize -3<CR>", { silent = true, noremap = true })
|
|
|
|
-vim.api.nvim_set_keymap("n", "<C-Up>", ":resize -3<CR>", { silent = true, noremap = true })
|
|
|
|
-vim.api.nvim_set_keymap("n", "<C-Down>", ":resize +3<CR>", { silent = true, noremap = true })
|
|
|
|
|
|
+vim.api.nvim_set_keymap('n', '<C-Left>', ':vertical resize +3<CR>', { silent = true, noremap = true })
|
|
|
|
+vim.api.nvim_set_keymap('n', '<C-Right>', ':vertical resize -3<CR>', { silent = true, noremap = true })
|
|
|
|
+vim.api.nvim_set_keymap('n', '<C-Up>', ':resize -3<CR>', { silent = true, noremap = true })
|
|
|
|
+vim.api.nvim_set_keymap('n', '<C-Down>', ':resize +3<CR>', { silent = true, noremap = true })
|
|
|
|
+vim.api.nvim_set_keymap('n', '<C-h>', '<C-w>h', { silent = true, noremap = true })
|
|
|
|
+vim.api.nvim_set_keymap('n', '<C-j>', '<C-w>j', { silent = true, noremap = true })
|
|
|
|
+vim.api.nvim_set_keymap('n', '<C-k>', '<C-w>k', { silent = true, noremap = true })
|
|
|
|
+vim.api.nvim_set_keymap('n', '<C-l>', '<C-w>l', { silent = true, noremap = true })
|
|
|
|
+
|
|
|
|
+-- What you get in abundance when using Nvim
|
|
vim.keymap.set('n', '<leader>f', ':Sex', { silent = true, noremap = true })
|
|
vim.keymap.set('n', '<leader>f', ':Sex', { silent = true, noremap = true })
|
|
|
|
|
|
-- Sets CTRL+Backspace to delete previous word
|
|
-- Sets CTRL+Backspace to delete previous word
|
|
-- C-H is what the terminal sends when Ctrl+Backspace is pressed
|
|
-- C-H is what the terminal sends when Ctrl+Backspace is pressed
|
|
-vim.api.nvim_set_keymap("i", "<C-H>", "<C-W>", { noremap = true })
|
|
|
|
|
|
+vim.api.nvim_set_keymap('i', '<C-H>', '<C-W>', { noremap = true })
|
|
|
|
|
|
-- Lazygit
|
|
-- Lazygit
|
|
vim.api.nvim_set_keymap('n', '<leader>gg', ':LazyGit<CR>', { noremap = true, silent = true })
|
|
vim.api.nvim_set_keymap('n', '<leader>gg', ':LazyGit<CR>', { noremap = true, silent = true })
|
|
|
|
|
|
--- [[ Install `lazy.nvim` plugin manager ]]
|
|
|
|
--- https://github.com/folke/lazy.nvim
|
|
|
|
--- `:help lazy.nvim.txt` for more info
|
|
|
|
-local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
|
|
|
|
-if not vim.loop.fs_stat(lazypath) then
|
|
|
|
- vim.fn.system {
|
|
|
|
- 'git',
|
|
|
|
- 'clone',
|
|
|
|
- '--filter=blob:none',
|
|
|
|
- 'https://github.com/folke/lazy.nvim.git',
|
|
|
|
- '--branch=stable', -- latest stable release
|
|
|
|
- lazypath,
|
|
|
|
- }
|
|
|
|
-end
|
|
|
|
-vim.opt.rtp:prepend(lazypath)
|
|
|
|
-
|
|
|
|
--- [[ Configure plugins ]]
|
|
|
|
--- NOTE: Here is where you install your plugins.
|
|
|
|
--- You can configure plugins using the `config` key.
|
|
|
|
---
|
|
|
|
--- You can also configure plugins after the setup call,
|
|
|
|
--- as they will be available in your neovim runtime.
|
|
|
|
-require('lazy').setup({
|
|
|
|
- -- NOTE: First, some plugins that don't require any configuration
|
|
|
|
-
|
|
|
|
- -- Git related plugins
|
|
|
|
- 'tpope/vim-fugitive',
|
|
|
|
- 'tpope/vim-rhubarb',
|
|
|
|
-
|
|
|
|
- -- Detect tabstop and shiftwidth automatically
|
|
|
|
- 'tpope/vim-sleuth',
|
|
|
|
-
|
|
|
|
- -- Autoformat on save
|
|
|
|
- 'jose-elias-alvarez/null-ls.nvim',
|
|
|
|
-
|
|
|
|
- {
|
|
|
|
- "kdheepak/lazygit.nvim",
|
|
|
|
- -- optional for floating window border decoration
|
|
|
|
- dependencies = {
|
|
|
|
- "nvim-lua/plenary.nvim",
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- -- When life gets too hard
|
|
|
|
- 'eandrju/cellular-automaton.nvim',
|
|
|
|
-
|
|
|
|
- -- NOTE: This is where your plugins related to LSP can be installed.
|
|
|
|
- -- The configuration is done below. Search for lspconfig to find it below.
|
|
|
|
- {
|
|
|
|
- -- LSP Configuration & Plugins
|
|
|
|
- 'neovim/nvim-lspconfig',
|
|
|
|
- dependencies = {
|
|
|
|
- -- Automatically install LSPs to stdpath for neovim
|
|
|
|
- { 'williamboman/mason.nvim', config = true },
|
|
|
|
- 'williamboman/mason-lspconfig.nvim',
|
|
|
|
-
|
|
|
|
- -- Useful status updates for LSP
|
|
|
|
- -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
|
|
|
|
- { 'j-hui/fidget.nvim', opts = {} },
|
|
|
|
-
|
|
|
|
- -- Additional lua configuration, makes nvim stuff amazing!
|
|
|
|
- 'folke/neodev.nvim',
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- {
|
|
|
|
- -- Autocompletion
|
|
|
|
- 'hrsh7th/nvim-cmp',
|
|
|
|
- dependencies = {
|
|
|
|
- -- Snippet Engine & its associated nvim-cmp source
|
|
|
|
- {
|
|
|
|
- 'L3MON4D3/LuaSnip',
|
|
|
|
- build = (function()
|
|
|
|
- -- 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 then
|
|
|
|
- return
|
|
|
|
- end
|
|
|
|
- return 'make install_jsregexp'
|
|
|
|
- end)(),
|
|
|
|
- },
|
|
|
|
- 'saadparwaiz1/cmp_luasnip',
|
|
|
|
-
|
|
|
|
- -- Adds LSP completion capabilities
|
|
|
|
- 'hrsh7th/cmp-nvim-lsp',
|
|
|
|
- 'hrsh7th/cmp-path',
|
|
|
|
-
|
|
|
|
- -- Adds a number of user-friendly snippets
|
|
|
|
- 'rafamadriz/friendly-snippets',
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- -- Useful plugin to show you pending keybinds.
|
|
|
|
- { 'folke/which-key.nvim', opts = {} },
|
|
|
|
- {
|
|
|
|
- -- Adds git related signs to the gutter, as well as utilities for managing changes
|
|
|
|
- 'lewis6991/gitsigns.nvim',
|
|
|
|
- opts = {
|
|
|
|
- -- See `:help gitsigns.txt`
|
|
|
|
- signs = {
|
|
|
|
- add = { text = '+' },
|
|
|
|
- change = { text = '~' },
|
|
|
|
- delete = { text = '_' },
|
|
|
|
- topdelete = { text = '‾' },
|
|
|
|
- changedelete = { text = '~' },
|
|
|
|
- },
|
|
|
|
- on_attach = function(bufnr)
|
|
|
|
- local gs = package.loaded.gitsigns
|
|
|
|
-
|
|
|
|
- local function map(mode, l, r, opts)
|
|
|
|
- opts = opts or {}
|
|
|
|
- opts.buffer = bufnr
|
|
|
|
- vim.keymap.set(mode, l, r, opts)
|
|
|
|
- end
|
|
|
|
-
|
|
|
|
- -- Navigation
|
|
|
|
- map({ 'n', 'v' }, ']c', function()
|
|
|
|
- if vim.wo.diff then
|
|
|
|
- return ']c'
|
|
|
|
- end
|
|
|
|
- vim.schedule(function()
|
|
|
|
- gs.next_hunk()
|
|
|
|
- end)
|
|
|
|
- return '<Ignore>'
|
|
|
|
- end, { expr = true, desc = 'Jump to next hunk' })
|
|
|
|
-
|
|
|
|
- map({ 'n', 'v' }, '[c', function()
|
|
|
|
- if vim.wo.diff then
|
|
|
|
- return '[c'
|
|
|
|
- end
|
|
|
|
- vim.schedule(function()
|
|
|
|
- gs.prev_hunk()
|
|
|
|
- end)
|
|
|
|
- return '<Ignore>'
|
|
|
|
- end, { expr = true, desc = 'Jump to previous hunk' })
|
|
|
|
-
|
|
|
|
- -- Actions
|
|
|
|
- -- visual mode
|
|
|
|
- map('v', '<leader>hs', function()
|
|
|
|
- gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' }
|
|
|
|
- end, { desc = 'stage git hunk' })
|
|
|
|
- map('v', '<leader>hr', function()
|
|
|
|
- gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' }
|
|
|
|
- end, { desc = 'reset git hunk' })
|
|
|
|
- -- normal mode
|
|
|
|
- map('n', '<leader>hs', gs.stage_hunk, { desc = 'git stage hunk' })
|
|
|
|
- map('n', '<leader>hr', gs.reset_hunk, { desc = 'git reset hunk' })
|
|
|
|
- map('n', '<leader>hS', gs.stage_buffer, { desc = 'git Stage buffer' })
|
|
|
|
- map('n', '<leader>hu', gs.undo_stage_hunk, { desc = 'undo stage hunk' })
|
|
|
|
- map('n', '<leader>hR', gs.reset_buffer, { desc = 'git Reset buffer' })
|
|
|
|
- map('n', '<leader>hp', gs.preview_hunk, { desc = 'preview git hunk' })
|
|
|
|
- map('n', '<leader>hb', function()
|
|
|
|
- gs.blame_line { full = false }
|
|
|
|
- end, { desc = 'git blame line' })
|
|
|
|
- map('n', '<leader>hd', gs.diffthis, { desc = 'git diff against index' })
|
|
|
|
- map('n', '<leader>hD', function()
|
|
|
|
- gs.diffthis '~'
|
|
|
|
- end, { desc = 'git diff against last commit' })
|
|
|
|
-
|
|
|
|
- -- Toggles
|
|
|
|
- map('n', '<leader>tb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' })
|
|
|
|
- map('n', '<leader>td', gs.toggle_deleted, { desc = 'toggle git show deleted' })
|
|
|
|
-
|
|
|
|
- -- Text object
|
|
|
|
- map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>', { desc = 'select git hunk' })
|
|
|
|
- end,
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- -- {
|
|
|
|
- -- 'Mofiqul/vscode.nvim',
|
|
|
|
- -- priority = 10,
|
|
|
|
- -- config = function()
|
|
|
|
- -- vim.o.background = 'dark'
|
|
|
|
- -- local c = require('vscode.colors').get_colors()
|
|
|
|
- -- require('vscode').setup ({
|
|
|
|
- -- })
|
|
|
|
- -- require('vscode').load()
|
|
|
|
- -- end
|
|
|
|
- -- },
|
|
|
|
-
|
|
|
|
- -- {
|
|
|
|
- -- -- The best theme
|
|
|
|
- -- 'morhetz/gruvbox',
|
|
|
|
- -- lazy = false,
|
|
|
|
- -- config = function()
|
|
|
|
- -- vim.cmd.colorscheme("gruvbox")
|
|
|
|
- -- vim.g.gruvbox_contract_dark = 'hard'
|
|
|
|
- -- end,
|
|
|
|
- -- },
|
|
|
|
-
|
|
|
|
- {
|
|
|
|
- "folke/tokyonight.nvim",
|
|
|
|
- lazy = false,
|
|
|
|
- priority = 1000,
|
|
|
|
- config = function()
|
|
|
|
- require('tokyonight').setup {
|
|
|
|
- style = 'night'
|
|
|
|
- }
|
|
|
|
- end
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- {
|
|
|
|
- -- Theme inspired by Atom
|
|
|
|
- 'navarasu/onedark.nvim',
|
|
|
|
- lazy = false,
|
|
|
|
- priority = 0,
|
|
|
|
- config = function()
|
|
|
|
- require('onedark').setup {
|
|
|
|
- -- Set a style preset. 'dark' is default.
|
|
|
|
- style = 'dark', -- dark, darker, cool, deep, warm, warmer, light
|
|
|
|
- }
|
|
|
|
- require('onedark').load()
|
|
|
|
- end,
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- {
|
|
|
|
- -- Set lualine as statusline
|
|
|
|
- 'nvim-lualine/lualine.nvim',
|
|
|
|
- -- See `:help lualine.txt`
|
|
|
|
- opts = {
|
|
|
|
- options = {
|
|
|
|
- icons_enabled = true,
|
|
|
|
- theme = 'tokyonight',
|
|
|
|
- component_separators = '|',
|
|
|
|
- section_separators = '',
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- {
|
|
|
|
- -- Add indentation guides even on blank lines
|
|
|
|
- 'lukas-reineke/indent-blankline.nvim',
|
|
|
|
- -- Enable `lukas-reineke/indent-blankline.nvim`
|
|
|
|
- -- See `:help ibl`
|
|
|
|
- main = 'ibl',
|
|
|
|
- opts = {
|
|
|
|
- indent = {
|
|
|
|
- char = '▏',
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- -- "gc" to comment visual regions/lines
|
|
|
|
- { 'numToStr/Comment.nvim', opts = {} },
|
|
|
|
-
|
|
|
|
- -- Fuzzy Finder (files, lsp, etc)
|
|
|
|
- {
|
|
|
|
- 'nvim-telescope/telescope.nvim',
|
|
|
|
- branch = '0.1.x',
|
|
|
|
- dependencies = {
|
|
|
|
- 'nvim-lua/plenary.nvim',
|
|
|
|
- -- Fuzzy Finder Algorithm which requires local dependencies to be built.
|
|
|
|
- -- Only load if `make` is available. Make sure you have the system
|
|
|
|
- -- requirements installed.
|
|
|
|
- {
|
|
|
|
- 'nvim-telescope/telescope-fzf-native.nvim',
|
|
|
|
- -- NOTE: If you are having trouble with this installation,
|
|
|
|
- -- refer to the README for telescope-fzf-native for more instructions.
|
|
|
|
- build = 'make',
|
|
|
|
- cond = function()
|
|
|
|
- return vim.fn.executable 'make' == 1
|
|
|
|
- end,
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- {
|
|
|
|
- -- Highlight, edit, and navigate code
|
|
|
|
- 'nvim-treesitter/nvim-treesitter',
|
|
|
|
- dependencies = {
|
|
|
|
- 'nvim-treesitter/nvim-treesitter-textobjects',
|
|
|
|
- },
|
|
|
|
- build = ':TSUpdate',
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- -- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart
|
|
|
|
- -- These are some example plugins that I've included in the kickstart repository.
|
|
|
|
- -- Uncomment any of the lines below to enable them.
|
|
|
|
- -- require 'kickstart.plugins.autoformat',
|
|
|
|
- require 'kickstart.plugins.debug',
|
|
|
|
-
|
|
|
|
- -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
|
|
|
|
- -- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping
|
|
|
|
- -- up-to-date with whatever is in the kickstart repo.
|
|
|
|
- -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
|
|
|
|
- --
|
|
|
|
- -- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins
|
|
|
|
- -- { import = 'custom.plugins' },
|
|
|
|
-}, {})
|
|
|
|
-
|
|
|
|
-- When lyf give you lemons
|
|
-- When lyf give you lemons
|
|
-vim.keymap.set("n", "<leader>fml", "<cmd>CellularAutomaton make_it_rain<CR>")
|
|
|
|
|
|
+vim.keymap.set('n', '<leader>fml', '<cmd>CellularAutomaton make_it_rain<CR>')
|
|
|
|
|
|
-- [[ Setting options ]]
|
|
-- [[ Setting options ]]
|
|
-- See `:help vim.o`
|
|
-- See `:help vim.o`
|
|
@@ -376,6 +96,7 @@ vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagn
|
|
-- [[ Highlight on yank ]]
|
|
-- [[ Highlight on yank ]]
|
|
-- 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()
|
|
@@ -395,6 +116,11 @@ require('telescope').setup {
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
+ pickers = {
|
|
|
|
+ find_files = {
|
|
|
|
+ find_command = { 'rg', '--files', '--hidden', '-g', '!.git' },
|
|
|
|
+ },
|
|
|
|
+ },
|
|
}
|
|
}
|
|
|
|
|
|
-- Enable telescope fzf native, if installed
|
|
-- Enable telescope fzf native, if installed
|
|
@@ -570,7 +296,7 @@ local on_attach = function(_, bufnr)
|
|
|
|
|
|
-- 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')
|
|
@@ -620,8 +346,18 @@ require('mason-lspconfig').setup()
|
|
local servers = {
|
|
local servers = {
|
|
-- clangd = {},
|
|
-- clangd = {},
|
|
-- gopls = {},
|
|
-- gopls = {},
|
|
- -- pyright = {},
|
|
|
|
- -- rust_analyzer = { },
|
|
|
|
|
|
+ pyright = {},
|
|
|
|
+ rust_analyzer = {
|
|
|
|
+ ['rust-analyzer'] = {
|
|
|
|
+ checkOnSave = true,
|
|
|
|
+ check = {
|
|
|
|
+ enable = true,
|
|
|
|
+ command = 'clippy',
|
|
|
|
+ features = 'all',
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ filetypes = { 'rust' },
|
|
|
|
+ },
|
|
-- tsserver = {},
|
|
-- tsserver = {},
|
|
-- html = { filetypes = { 'html', 'twig', 'hbs'} },
|
|
-- html = { filetypes = { 'html', 'twig', 'hbs'} },
|
|
|
|
|
|
@@ -660,97 +396,39 @@ mason_lspconfig.setup_handlers {
|
|
end,
|
|
end,
|
|
}
|
|
}
|
|
|
|
|
|
--- Set rust check on save to clippy
|
|
|
|
--- require('lspconfig').rust_analyzer.setup {
|
|
|
|
--- settings = {
|
|
|
|
--- ['rust-analyzer'] = {
|
|
|
|
--- checkOnSave = {
|
|
|
|
--- allFeatures = true,
|
|
|
|
--- overrideCommand = {
|
|
|
|
--- 'cargo', 'clippy', '--workspace', '--message-format=json',
|
|
|
|
--- '--all-targets', '--all-features'
|
|
|
|
--- }
|
|
|
|
--- }
|
|
|
|
--- }
|
|
|
|
--- }
|
|
|
|
--- }
|
|
|
|
-
|
|
|
|
--- [[ Configure nvim-cmp ]]
|
|
|
|
--- See `:help cmp`
|
|
|
|
-local cmp = require 'cmp'
|
|
|
|
-local luasnip = require 'luasnip'
|
|
|
|
-require('luasnip.loaders.from_vscode').lazy_load()
|
|
|
|
-luasnip.config.setup {}
|
|
|
|
-
|
|
|
|
-cmp.setup {
|
|
|
|
- snippet = {
|
|
|
|
- expand = function(args)
|
|
|
|
- luasnip.lsp_expand(args.body)
|
|
|
|
- end,
|
|
|
|
- },
|
|
|
|
- completion = {
|
|
|
|
- completeopt = 'menu,menuone,noinsert',
|
|
|
|
- },
|
|
|
|
- mapping = cmp.mapping.preset.insert {
|
|
|
|
- ['<C-n>'] = cmp.mapping.select_next_item(),
|
|
|
|
- ['<C-p>'] = cmp.mapping.select_prev_item(),
|
|
|
|
- ['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
|
|
|
- ['<C-f>'] = cmp.mapping.scroll_docs(4),
|
|
|
|
- ['<C-Space>'] = cmp.mapping.complete {},
|
|
|
|
- ['<CR>'] = cmp.mapping.confirm {
|
|
|
|
- behavior = cmp.ConfirmBehavior.Replace,
|
|
|
|
- select = true,
|
|
|
|
- },
|
|
|
|
- ['<Tab>'] = cmp.mapping(function(fallback)
|
|
|
|
- if cmp.visible() then
|
|
|
|
- cmp.select_next_item()
|
|
|
|
- elseif luasnip.expand_or_locally_jumpable() then
|
|
|
|
- luasnip.expand_or_jump()
|
|
|
|
- else
|
|
|
|
- fallback()
|
|
|
|
- end
|
|
|
|
- end, { 'i', 's' }),
|
|
|
|
- ['<S-Tab>'] = cmp.mapping(function(fallback)
|
|
|
|
- if cmp.visible() then
|
|
|
|
- cmp.select_prev_item()
|
|
|
|
- elseif luasnip.locally_jumpable(-1) then
|
|
|
|
- luasnip.jump(-1)
|
|
|
|
- else
|
|
|
|
- fallback()
|
|
|
|
- end
|
|
|
|
- end, { 'i', 's' }),
|
|
|
|
- },
|
|
|
|
|
|
+-- Autoformat on save
|
|
|
|
+-- local auLspFormatting = vim.api.nvim_create_augroup("LspFormatting", {})
|
|
|
|
+-- vim.api.nvim_create_autocmd('BufWritePre', {
|
|
|
|
+-- callback = function()
|
|
|
|
+-- vim.lsp.buf.format()
|
|
|
|
+-- end,
|
|
|
|
+-- group = auLspFormatting,
|
|
|
|
+-- pattern = '*',
|
|
|
|
+-- })
|
|
|
|
+
|
|
|
|
+local null_ls = require 'null-ls'
|
|
|
|
+local augroup = vim.api.nvim_create_augroup('LspFormatting', {})
|
|
|
|
+
|
|
|
|
+null_ls.setup {
|
|
sources = {
|
|
sources = {
|
|
- { name = 'nvim_lsp' },
|
|
|
|
- { name = 'luasnip' },
|
|
|
|
- { name = 'path' },
|
|
|
|
|
|
+ null_ls.builtins.formatting.stylua,
|
|
|
|
+ null_ls.builtins.formatting.black,
|
|
|
|
+ null_ls.builtins.completion.pyright,
|
|
|
|
+ -- null_ls.builtins.formatting.rustfmt,
|
|
|
|
+ null_ls.builtins.formatting.markdownlint,
|
|
|
|
+ null_ls.builtins.formatting.prettier,
|
|
|
|
+ null_ls.builtins.diagnostics.eslint,
|
|
},
|
|
},
|
|
|
|
+ on_attach = function(client, bufnr)
|
|
|
|
+ if client.supports_method 'textDocument/formatting' then
|
|
|
|
+ vim.api.nvim_clear_autocmds { group = augroup, buffer = bufnr }
|
|
|
|
+ vim.api.nvim_create_autocmd('BufWritePre', {
|
|
|
|
+ group = augroup,
|
|
|
|
+ buffer = bufnr,
|
|
|
|
+ callback = function()
|
|
|
|
+ vim.lsp.buf.format()
|
|
|
|
+ end,
|
|
|
|
+ })
|
|
|
|
+ end
|
|
|
|
+ end,
|
|
}
|
|
}
|
|
-
|
|
|
|
--- Autoformat on save
|
|
|
|
-local null_ls = require("null-ls")
|
|
|
|
-local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
|
|
|
|
-
|
|
|
|
-null_ls.setup({
|
|
|
|
- sources = {
|
|
|
|
- null_ls.builtins.formatting.rustfmt,
|
|
|
|
- null_ls.builtins.formatting.markdownlint,
|
|
|
|
- null_ls.builtins.formatting.prettier,
|
|
|
|
- null_ls.builtins.diagnostics.eslint,
|
|
|
|
- },
|
|
|
|
- on_attach = function(client, bufnr)
|
|
|
|
- if client.supports_method("textDocument/formatting") then
|
|
|
|
- vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
|
|
|
- vim.api.nvim_create_autocmd("BufWritePre", {
|
|
|
|
- group = augroup,
|
|
|
|
- buffer = bufnr,
|
|
|
|
- callback = function()
|
|
|
|
- vim.lsp.buf.format()
|
|
|
|
- end,
|
|
|
|
- })
|
|
|
|
- end
|
|
|
|
- end,
|
|
|
|
-})
|
|
|
|
-
|
|
|
|
--- The line beneath this is called `modeline`. See `:help modeline`
|
|
|
|
--- vim: ts=2 sts=2 sw=2 et
|
|
|