Lua config for nvim
This commit is contained in:
parent
fedcf15010
commit
1d654ef9fc
190
nvim.lua
Normal file
190
nvim.lua
Normal file
@ -0,0 +1,190 @@
|
||||
local Plug = vim.fn['plug#']
|
||||
|
||||
-- PLUGINS
|
||||
vim.call('plug#begin')
|
||||
|
||||
-- General plugins
|
||||
Plug('vim-airline/vim-airline')
|
||||
Plug('vim-airline/vim-airline-themes')
|
||||
Plug('tpope/vim-abolish')
|
||||
Plug('lambdalisue/suda.vim')
|
||||
Plug('https://gitea.tforgione.fr/tforgione/peach.git')
|
||||
|
||||
-- Language specific plugins
|
||||
Plug('rust-lang/rust.vim')
|
||||
Plug('ElmCast/elm-vim')
|
||||
Plug('cespare/vim-toml')
|
||||
Plug('kaarmu/typst.vim')
|
||||
|
||||
vim.call('plug#end')
|
||||
|
||||
-- INDENTATION
|
||||
vim.opt.expandtab = true
|
||||
vim.opt.tabstop = 4
|
||||
vim.opt.shiftwidth = 4
|
||||
vim.opt.autoindent = true
|
||||
vim.opt.textwidth = 120
|
||||
|
||||
-- UI
|
||||
vim.opt.number = true
|
||||
vim.opt.showcmd = true
|
||||
vim.opt.wildmenu = true
|
||||
vim.opt.lazyredraw = true
|
||||
vim.opt.encoding = 'utf8'
|
||||
vim.opt.clipboard = 'unnamedplus'
|
||||
vim.opt.updatecount = 50
|
||||
vim.opt.mouse = 'a'
|
||||
vim.opt.guicursor = nil
|
||||
vim.opt.updatetime = 300
|
||||
|
||||
vim.opt.list = true
|
||||
vim.opt.listchars:append({ trail = '·' })
|
||||
|
||||
-- Auto remove trailing spaces
|
||||
vim.api.nvim_create_autocmd({'BufWritePre'}, {
|
||||
pattern = {'*'},
|
||||
callback = function(ev)
|
||||
vim.cmd('%s/\\s\\+$//e')
|
||||
end
|
||||
})
|
||||
|
||||
-- COLOR --
|
||||
pcall(vim.cmd.colorscheme, 'peach')
|
||||
vim.cmd.highlight({'BadWhitespace', 'ctermbg=red', 'guibg=red'})
|
||||
vim.g.airline_powerline_fonts = 1
|
||||
vim.g.airline_theme = 'dark'
|
||||
|
||||
-- SEARCHING
|
||||
vim.opt.title = true
|
||||
vim.opt.showmatch = true
|
||||
vim.opt.hlsearch = true
|
||||
vim.opt.incsearch = true
|
||||
|
||||
-- BACKUPS
|
||||
vim.opt.undofile = true
|
||||
vim.opt.undolevels = 1000
|
||||
vim.opt.undoreload = 10000
|
||||
vim.opt.undodir = os.getenv('HOME') .. '/.nvim/undo'
|
||||
|
||||
vim.g.backup_dir = os.getenv('HOME') .. '/.nvim/backups'
|
||||
|
||||
vim.api.nvim_create_autocmd({'BufWritePost'}, {
|
||||
pattern = {'*'},
|
||||
callback = function(ev)
|
||||
local backup_path = vim.g.backup_dir .. '/' .. vim.api.nvim_buf_get_name(0):gsub('/', '\\%%')
|
||||
vim.cmd('silent w! ' .. backup_path)
|
||||
end
|
||||
})
|
||||
|
||||
-- LSPs
|
||||
-- Config
|
||||
vim.opt.completeopt = { 'menuone', 'noselect' }
|
||||
|
||||
vim.diagnostic.config {
|
||||
signs = {
|
||||
text = {
|
||||
[vim.diagnostic.severity.ERROR] = '',
|
||||
[vim.diagnostic.severity.WARN] = '',
|
||||
[vim.diagnostic.severity.HINT] = '',
|
||||
},
|
||||
color = {},
|
||||
},
|
||||
float = {
|
||||
header = false,
|
||||
border = 'rounded',
|
||||
}
|
||||
}
|
||||
|
||||
-- Show diagnostics on hover
|
||||
vim.api.nvim_create_autocmd({'CursorHold'}, {
|
||||
pattern = {'*'},
|
||||
callback = function(ev)
|
||||
vim.diagnostic.open_float()
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- Shortcuts for mapping shortcuts
|
||||
local map = function(type, key, value)
|
||||
vim.api.nvim_buf_set_keymap(0, type, key, value, { noremap = true, silent = true });
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
|
||||
-- Enable auto-completion. Note: Use CTRL-Y to select an item.
|
||||
if client:supports_method('textDocument/completion') then
|
||||
|
||||
-- Trigger autocompletion on EVERY keypress. May be slow!
|
||||
local chars = {}; for i = 32, 126 do table.insert(chars, string.char(i)) end
|
||||
client.server_capabilities.completionProvider.triggerCharacters = chars
|
||||
|
||||
vim.lsp.completion.enable(true, client.id, args.buf, {
|
||||
autotrigger = true,
|
||||
convert = function(item)
|
||||
return { abbr = item.label:gsub('%b()', '') }
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
-- Auto-format on save.
|
||||
if not client:supports_method('textDocument/willSaveWaitUntil') and client:supports_method('textDocument/formatting') then
|
||||
vim.api.nvim_create_autocmd('BufWritePre', {
|
||||
group = vim.api.nvim_create_augroup('my.lsp', {clear=false}),
|
||||
buffer = args.buf,
|
||||
callback = function()
|
||||
vim.lsp.buf.format({ bufnr = args.buf, id = client.id, timeout_ms = 1000 })
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
-- Don't use lsp to manage colorscheme
|
||||
client.server_capabilities.semanticTokensProvider = nil
|
||||
|
||||
-- Some nice shortcuts
|
||||
map('n','gD','<cmd>lua vim.lsp.buf.declaration()<CR>')
|
||||
map('n','gd','<cmd>lua vim.lsp.buf.definition()<CR>')
|
||||
map('n','K','<cmd>lua vim.lsp.buf.hover()<CR>')
|
||||
map('n','gr','<cmd>lua vim.lsp.buf.references()<CR>')
|
||||
map('n','gs','<cmd>lua vim.lsp.buf.signature_help()<CR>')
|
||||
map('n','gi','<cmd>lua vim.lsp.buf.implementation()<CR>')
|
||||
map('n','gt','<cmd>lua vim.lsp.buf.type_definition()<CR>')
|
||||
map('n','<leader>gw','<cmd>lua vim.lsp.buf.document_symbol()<CR>')
|
||||
map('n','<leader>gW','<cmd>lua vim.lsp.buf.workspace_symbol()<CR>')
|
||||
map('n','<leader>ah','<cmd>lua vim.lsp.buf.hover()<CR>')
|
||||
map('n','<leader>af','<cmd>lua vim.lsp.buf.code_action()<CR>')
|
||||
map('n','<leader>ee','<cmd>lua vim.lsp.util.show_line_diagnostics()<CR>')
|
||||
map('n','<leader>rn','<cmd>lua vim.lsp.buf.rename()<CR>')
|
||||
map('n','<leader>=', '<cmd>lua vim.lsp.buf.formatting()<CR>')
|
||||
map('n','<leader>ai','<cmd>lua vim.lsp.buf.incoming_calls()<CR>')
|
||||
map('n','<leader>ao','<cmd>lua vim.lsp.buf.outgoing_calls()<CR>')
|
||||
end,
|
||||
});
|
||||
|
||||
-- Rust
|
||||
vim.lsp.config['rust'] = {
|
||||
cmd = { 'rustup', 'run', 'stable', 'rust-analyzer' },
|
||||
filetypes = { 'rust' },
|
||||
root_markers = { 'Cargo.toml' },
|
||||
}
|
||||
|
||||
vim.lsp.enable('rust')
|
||||
|
||||
-- Elm
|
||||
vim.lsp.config['elm'] = {
|
||||
cmd = { 'elm-language-server' },
|
||||
filetypes = { 'elm' },
|
||||
root_markers = { 'elm.json' },
|
||||
}
|
||||
|
||||
vim.lsp.enable('elm')
|
||||
|
||||
-- Python
|
||||
vim.lsp.config['python'] = {
|
||||
cmd = { 'pylsp' },
|
||||
filetypes = { 'python' },
|
||||
}
|
||||
|
||||
vim.lsp.enable('python')
|
Loading…
x
Reference in New Issue
Block a user