" Fisa-nvim-config " http://nvim.fisadev.com " version: 9.5 beta " TODO current problems: " * end key not working undef tmux+fish " ============================================================================ " Vim-plug initialization " Avoid modify this section, unless you are very sure of what you are doing let vim_plug_just_installed = 0 let vim_plug_path = expand('~/.config/nvim/autoload/plug.vim') if !filereadable(vim_plug_path) echo "Installing Vim-plug..." echo "" silent !mkdir -p ~/.config/nvim/autoload silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim let vim_plug_just_installed = 1 endif " manually load vim-plug the first time if vim_plug_just_installed :execute 'source '.fnameescape(vim_plug_path) endif " Obscure hacks done, you can now modify the rest of the .vimrc as you wish :) " ============================================================================ " Active plugins " You can disable or add new ones here: " this needs to be here, so vim-plug knows we are declaring the plugins we " want to use call plug#begin('~/.config/nvim/plugged') " Now the actual plugins: Plug 'ntpeters/vim-better-whitespace' " Nice support for latex files Plug 'lervag/vimtex' " Override configs by directory Plug 'arielrossanigo/dir-configs-override.vim' " Code commenter Plug 'scrooloose/nerdcommenter' " Better file browser Plug 'scrooloose/nerdtree' " Class/module browser Plug 'majutsushi/tagbar' " TODO known problems: " * current block not refreshing " Search results counter Plug 'vim-scripts/IndexedSearch' " Terminal Vim with 256 colors colorscheme Plug 'patstockwell/vim-monokai-tasty' " Airline Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' " Code and files fuzzy finder Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' Plug 'neomake/neomake' " Pre-built configurations for the neovim LSP client Plug 'neovim/nvim-lspconfig' " List all symbols in the file Plug 'simrat39/symbols-outline.nvim' " Statusline information about the LS state Plug 'nvim-lua/lsp-status.nvim' " Autocomplete, may switch to COQ in the future Plug 'hrsh7th/cmp-nvim-lsp', {'branch' : 'main'} Plug 'hrsh7th/cmp-path', {'branch' : 'main'} Plug 'hrsh7th/nvim-cmp', {'branch' : 'main'} Plug 'hrsh7th/cmp-vsnip', {'branch' : 'main'} Plug 'hrsh7th/vim-vsnip' " Surround Plug 'tpope/vim-surround' " Indent text object Plug 'michaeljsmith/vim-indent-object' " Indentation based movements Plug 'jeetsukumaran/vim-indentwise' " Better language packs Plug 'sheerun/vim-polyglot' let g:polyglot_disabled = ['latex'] " Paint css colors with the real color Plug 'lilydjwg/colorizer' " TODO is there a better option for neovim? " Window chooser Plug 't9md/vim-choosewin' " Highlight matching html tags Plug 'valloric/MatchTagAlways' " Git integration Plug 'tpope/vim-fugitive' " Git/mercurial/others diff icons on the side of the file lines Plug 'mhinz/vim-signify' " Relative numbering of lines (0 is the current line) " (disabled by default because is very intrusive and can't be easily toggled " on/off. When the plugin is present, will always activate the relative " numbering every time you go to normal mode. Author refuses to add a setting " to avoid that) Plug 'myusuf3/numbers.vim' " Official rust plugin Plug 'rust-lang/rust.vim' Plug 'simrat39/rust-tools.nvim' " Trouble diagnostics display Plug 'folke/lsp-colors.nvim', {'branch': 'main'} Plug 'kyazdani42/nvim-web-devicons' Plug 'folke/trouble.nvim', {'branch': 'main'} " Nice icons in NERDtree/airline Plug 'ryanoasis/vim-devicons' " Tell vim-plug we finished declaring plugins, so it can load them call plug#end() lua << EOF -- Setup LSP status to display the number of diagnostics in the statusbar local lsp_status = require('lsp-status') local kind_labels_mt = {__index = function(_, k) return k end} local kind_labels = {} setmetatable(kind_labels, kind_labels_mt) lsp_status.register_progress() lsp_status.config({ current_function = false, kind_labels = kind_labels, indicator_hint = '?', -- the default is a wide codepoint which breaks absolute and relative -- line counts if placed before airline's Z section status_symbol = "", }) -- Setup nvim-cmp. local cmp = require'cmp' cmp.setup({ completion = { autocomplete = false, }, snippet = { -- REQUIRED - you must specify a snippet engine expand = function(args) vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. end, }, mapping = { [''] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), [''] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `` mapping. [''] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close(), }), [''] = cmp.mapping.confirm({ select = true }), }, sources = cmp.config.sources({ { name = 'nvim_lsp' }, }, { { name = 'path' }, }) }) -- Setup the actual language servers local nvim_lsp = require('lspconfig') local opts = { noremap=true, silent=true } vim.api.nvim_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', opts) vim.api.nvim_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) vim.api.nvim_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) vim.api.nvim_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) -- 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) local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end -- Enable completion triggered by buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) buf_set_keymap('n', 'gy', 'lua vim.lsp.buf.type_definition()', opts) buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) lsp_status.on_attach(client) end -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches local servers = { 'clangd', 'hls', 'rust_analyzer', 'texlab', 'pylsp' } for _, lsp in ipairs(servers) do local config = { on_attach = on_attach, flags = { debounce_text_changes = 150, }, capabilities = require('cmp_nvim_lsp').update_capabilities(lsp_status.capabilities) } if lsp == 'pylsp' then config['settings'] = {pylsp = {plugins = {pylint = {enabled = true}}}} end if lsp == 'rust_analyzer' then require('rust-tools').setup({server = config}) else nvim_lsp[lsp].setup(config) end end EOF nmap s :SymbolsOutline nmap :SymbolsOutline nmap :TroubleToggle workspace_diagnostics nmap :TroubleToggle document_diagnostics function! LspStatus() abort return trim(luaeval("require('lsp-status').status()")) endfunction call airline#parts#define_function('lsp_status', 'LspStatus') call airline#parts#define_condition('lsp_status', 'luaeval("#vim.lsp.buf_get_clients() > 0")') let g:airline#extensions#nvimlsp#enabled = 0 let g:airline_section_warning = airline#section#create_right(['lsp_status']) " ============================================================================ " Vim settings and mappings " You can edit them as you wish " tabs and spaces handling set expandtab set tabstop=4 set softtabstop=4 set shiftwidth=4 " show line numbers set nu " use 256 colors when possible colorscheme vim-monokai-tasty " needed so deoplete can auto select the first suggestion set completeopt+=noinsert " comment this line to enable autocompletion preview window " (displays documentation related to the selected completion option) set completeopt-=preview " autocompletion of files and commands behaves like shell " (complete only the common part, list the options that match) set wildmode=list:longest " save as sudo ca w!! w !sudo tee "%" " tab navigation mappings map tt :tabnew map :tabn imap :tabn map :tabp imap :tabp " when scrolling, keep cursor 3 lines away from screen border set scrolloff=3 " clear search results nnoremap // :noh " clear empty spaces at the end of lines on save of python files autocmd BufWritePre *.py :%s/\s\+$//e " ============================================================================ " Plugins settings and mappings " Edit them as you wish. " NERDTree ----------------------------- " toggle nerdtree display map :NERDTreeToggle " open nerdtree with the current file selected nmap ,t :NERDTreeFind " don;t show these file types let NERDTreeIgnore = ['\.pyc$', '\.pyo$'] " Fzf ------------------------------ " file finder mapping nmap ,e :Files " buffer search nmap ,b :Buffers " Ripgrep search nmap ,a :Rg " tags (symbols) in current file finder mapping nmap ,g :BTag " tags (symbols) in all files finder mapping nmap ,G :Tag " general code finder in current file mapping nmap ,f :BLines " general code finder in all files mapping nmap ,F :Lines " commands finder mapping nmap ,c :Commands " to be able to call CtrlP with default search text "function! CtrlPWithSearchText(search_text, ctrlp_command_end) "execute ':CtrlP' . a:ctrlp_command_end "call feedkeys(a:search_text) "endfunction " same as previous mappings, but calling with current word as default text "nmap ,wg :call CtrlPWithSearchText(expand(''), 'BufTag') "nmap ,wG :call CtrlPWithSearchText(expand(''), 'BufTagAll') "nmap ,wf :call CtrlPWithSearchText(expand(''), 'Line') "nmap ,we :call CtrlPWithSearchText(expand(''), '') "nmap ,pe :call CtrlPWithSearchText(expand(''), '') "nmap ,wm :call CtrlPWithSearchText(expand(''), 'MRUFiles') "nmap ,wc :call CtrlPWithSearchText(expand(''), 'CmdPalette') " Window Chooser ------------------------------ " mapping nmap - (choosewin) " show big letters let g:choosewin_overlay_enable = 1 " Signify ------------------------------ " this first setting decides in which order try to guess your current vcs " UPDATE it to reflect your preferences, it will speed up opening files let g:signify_vcs_list = [ 'git', 'hg' ] " mappings to jump to changed blocks nmap sn (signify-next-hunk) nmap sp (signify-prev-hunk) " nicer colors highlight DiffAdd cterm=bold ctermbg=none ctermfg=119 highlight DiffDelete cterm=bold ctermbg=none ctermfg=167 highlight DiffChange cterm=bold ctermbg=none ctermfg=227 highlight SignifySignAdd cterm=bold ctermbg=237 ctermfg=119 highlight SignifySignDelete cterm=bold ctermbg=237 ctermfg=167 highlight SignifySignChange cterm=bold ctermbg=237 ctermfg=227 " Autoclose ------------------------------ " Fix to let ESC work as espected with Autoclose plugin " (without this, when showing an autocompletion window, ESC won't leave insert " mode) let g:AutoClosePumvisible = {"ENTER": "\", "ESC": "\"} " Airline ------------------------------ let g:airline_powerline_fonts = 0 let g:airline_theme = 'bubblegum' let g:airline#extensions#whitespace#enabled = 0 " to use fancy symbols for airline, uncomment the following lines and use a " patched font (more info on docs/fancy_symbols.rst) "if !exists('g:airline_symbols') "let g:airline_symbols = {} "endif "let g:airline_left_sep = '⮀' "let g:airline_left_alt_sep = '⮁' "let g:airline_right_sep = '⮂' "let g:airline_right_alt_sep = '⮃' "let g:airline_symbols.branch = '⭠' "let g:airline_symbols.readonly = '⭤' "let g:airline_symbols.linenr = '⭡' let g:vimtex_view_method = 'zathura' set clipboard=unnamedplus inccommand=nosplit set mouse=a let g:tex_flavor = "latex" au BufNewFile,BufRead *.tex,*.latex,*.sty,*.dtx,*.ltx set sw=2 sts=2 function PrintFile(fname) call system("gtklp " . a:fname) call delete(a:fname) return v:shell_error endfunction set printexpr=PrintFile(v:fname_in)