191 lines
5.4 KiB
Lua
191 lines
5.4 KiB
Lua
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')
|