diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 8830e36..170ef43 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -19,56 +19,15 @@ highlight Pmenu guibg=black " refresh time set updatetime=500 -" keybinds -" code actions -nnoremap :lua vim.lsp.buf.code_action() +" CtrlSF +let g:ctrlsf_default_root = "project" -" ale -let g:ale_linters = {'rust': ['analyzer'], 'css': ['csslint']} - -let g:ale_fixers = { -\ '*': ['remove_trailing_lines', 'trim_whitespace'], -\ 'html': ['prettier'], -\ 'css': ['prettier'], -\ } - -let g:ale_fix_on_save = 1 - -let g:ale_javascript_prettier_options = '--tab-width 4' - -let g:ale_rust_analyzer_config = { - \ 'cargo': { 'loadOutDirsFromCheck': v:true }, - \ 'procMacro': { 'enable': v:true }, - \ 'checkOnSave': { 'command': 'clippy', 'enable': v:true } -\ } - -let g:lightline.component_expand = { - \ 'linter_checking': 'lightline#ale#checking', - \ 'linter_infos': 'lightline#ale#infos', - \ 'linter_warnings': 'lightline#ale#warnings', - \ 'linter_errors': 'lightline#ale#errors', - \ 'linter_ok': 'lightline#ale#ok', -\ } +" Lightline let g:lightline.component_function = { \ 'gitbranch': 'FugitiveHead' \ } -let g:lightline.component_type = { - \ 'linter_checking': 'right', - \ 'linter_infos': 'right', - \ 'linter_warnings': 'warning', - \ 'linter_errors': 'error', - \ 'linter_ok': 'right', -\ } - -" lightline symbols -let g:lightline#ale#indicator_checking = "\uf110" -let g:lightline#ale#indicator_infos = "\uf129" -let g:lightline#ale#indicator_warnings = "\uf071" -let g:lightline#ale#indicator_errors = "\uf05e" -let g:lightline#ale#indicator_ok = "\uf00c" - " lightline modules let g:lightline.active = { \ 'left' : [ @@ -76,16 +35,21 @@ let g:lightline.active = { \ ['gitbranch', 'readonly', 'filename', 'modified'] \ ], \ 'right': [ -\ ['linter_checking', 'linter_errors', 'linter_warnings'], +\ ['lsp_errors', 'lsp_warnings'], \ ['lineinfo'], \ ['percent'], \ ['fileformat', 'fileencoding', 'filetype'] \ ] \} -" CtrlSF -let g:ctrlsf_default_root = "project" +" lightline symbols +let g:lightline#lsp#indicator_errors = "\uf05e" +let g:lightline#lsp#indicator_info = "\uf129" +let g:lightline#lsp#indicator_ok = "\uf00c" +let g:lightline#lsp#indicator_warnings = "\uf071" +" register compoments: +call lightline#lsp#register() lua << EOF @@ -113,21 +77,94 @@ local nvim_lsp = require 'lspconfig' local cmp = require'cmp' lsp_installer.setup { - automatic_installation = true + automatic_installation = true } for _, server in ipairs(lsp_installer.get_installed_servers()) do nvim_lsp[server.name].setup {} end +local lsp_formatting = function(bufnr) + vim.lsp.buf.format({ + filter = function(client) + if vim.bo.filetype == "rust" then + return client.name ~= "null-ls" + else + return true + end + end, + bufnr = bufnr, + }) +end + +local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) + +-- Use an on_attach function to only map the following keys +-- after the language server attaches to the current buffer +local 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() + lsp_formatting(bufnr) + end, + }) + end + + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local bufopts = { noremap=true, silent=true, buffer=bufnr } + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) + vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) + vim.keymap.set('n', 'f', vim.lsp.buf.formatting, bufopts) +end + local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()) -local servers = { 'rust_analyzer', 'emmet_ls', 'cssls' } +local servers = { 'emmet_ls', 'cssls' } for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { + on_attach = on_attach, capabilities = capabilities, } end +nvim_lsp['rust_analyzer'].setup { + on_attach = on_attach, + capabilities = capabilities, + settings = { + ["rust-analyzer"] = { + rustfmt = { + extraArgs = {"+nightly"}, + }, + checkOnSave = { + command = "clippy" + } + }, + } +} + +local null_ls = require("null-ls") +null_ls.setup({ + on_attach = on_attach, + sources = { + null_ls.builtins.completion.spell, + null_ls.builtins.formatting.fixjson, + null_ls.builtins.formatting.nginx_beautifier, + null_ls.builtins.formatting.prettier, + null_ls.builtins.formatting.trim_newlines, + null_ls.builtins.formatting.trim_whitespace, + null_ls.builtins.code_actions.eslint, + null_ls.builtins.diagnostics.fish, + }, +}) vim.diagnostic.config({ virtual_text = { diff --git a/.vimrc b/.vimrc index 8bd4645..36a48c2 100644 --- a/.vimrc +++ b/.vimrc @@ -32,6 +32,7 @@ Plug 'lilydjwg/colorizer' Plug 'mg979/vim-visual-multi' Plug 'owickstrom/vim-colors-paramount' Plug 'raimondi/delimitmate' +Plug 'rust-lang/rust.vim', {'for': 'rust'} Plug 'tpope/vim-commentary' Plug 'vim-scripts/nginx.vim', {'for': 'nginx'} Plug 'yuttie/comfortable-motion.vim' @@ -45,8 +46,11 @@ if has('nvim') Plug 'dyng/ctrlsf.vim' Plug 'folke/todo-comments.nvim' Plug 'hrsh7th/cmp-calc' + Plug 'https://github.com/josa42/nvim-lightline-lsp' + Plug 'https://github.com/mfussenegger/nvim-lint' Plug 'j-hui/fidget.nvim' Plug 'jghauser/mkdir.nvim' + Plug 'jose-elias-alvarez/null-ls.nvim' Plug 'stevearc/dressing.nvim' Plug 'williamboman/nvim-lsp-installer' Plug 'antoinemadec/FixCursorHold.nvim' @@ -61,13 +65,11 @@ if has('nvim') Plug 'hrsh7th/nvim-cmp' Plug 'hrsh7th/vim-vsnip' Plug 'kyazdani42/nvim-web-devicons' - Plug 'maximbaz/lightline-ale' Plug 'neovim/nvim-lspconfig' Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} Plug 'tpope/vim-fugitive' - Plug 'w0rp/ale' endif call plug#end() @@ -162,6 +164,9 @@ set ts=4 sw=4 set autoindent set smartindent +set breakindent + +set scrolloff=5 set laststatus=2 set noshowmode @@ -176,6 +181,12 @@ set clipboard=unnamedplus nnoremap d "_d vnoremap d "_d +" Preserve undo history across editing sessions. +if has('persistent_undo') + set undodir=~/.vim/undo + set undofile +endif + set ignorecase set smartcase set hlsearch