diff --git a/bash/.bashrc b/bash/.bashrc index d43a9ab..eb72a55 100644 --- a/bash/.bashrc +++ b/bash/.bashrc @@ -16,4 +16,6 @@ fi export PATH=$PATH:~/.cargo/bin +. "$HOME/.cargo/env" + tmux diff --git a/nvim/.config/nvim/init.vim b/nvim/.config/nvim/init.vim index aaafeb8..c7788d2 100644 --- a/nvim/.config/nvim/init.vim +++ b/nvim/.config/nvim/init.vim @@ -1,6 +1,5 @@ - let mapleader=" " -set timeout timeoutlen=2000 +set timeout timeoutlen=3000 set mouse= syntax on @@ -24,13 +23,21 @@ set undofile set nohlsearch set cursorline set scrolloff=4 +set inccommand=nosplit " highlight substitude + + + +" PLUGINS: call plug#begin('~/.config/nvim/autoload/plugged') + Plug 'scrooloose/nerdcommenter' Plug 'preservim/nerdtree' + Plug 'zhimsel/vim-stay' + Plug 'morhetz/gruvbox' " themes - Plug 'sonph/onehalf' +"" Plug 'sonph/onehalf' " Plug 'ThePrimeagen/vim-be-good', {'do': './install.sh'} " vim training game @@ -44,8 +51,9 @@ call plug#begin('~/.config/nvim/autoload/plugged') " Better syntax highlighting " Python: - Plug 'numirias/semshi', {'do': ':UpdateRemotePlugins'} +"" Plug 'numirias/semshi', {'do': ':UpdateRemotePlugins'} " Plug 'davidhalter/jedi-vim' + " C++: Plug 'octol/vim-cpp-enhanced-highlight' @@ -55,7 +63,7 @@ call plug#begin('~/.config/nvim/autoload/plugged') Plug 'ervandew/supertab' " Show git modifications to file - Plug 'vim-scripts/vim-gitgutter' +""Plug 'vim-scripts/vim-gitgutter' Plug 'jremmen/vim-ripgrep' " Rg uses word under cursor @@ -71,21 +79,64 @@ call plug#begin('~/.config/nvim/autoload/plugged') " Plug 'dense-analysis/ale' - " Markdown " Plug 'plasticboy/vim-markdown' " Plug 'kamikat/vim-markdown' Plug 'tpope/vim-markdown' + + + + + + " LSP: + + " Collection of common configurations for the Nvim LSP client + Plug 'neovim/nvim-lspconfig' + + " Autocompletion framework + Plug 'hrsh7th/nvim-cmp' + " cmp LSP completion + Plug 'hrsh7th/cmp-nvim-lsp' + " cmp Snippet completion + Plug 'hrsh7th/cmp-vsnip' + " cmp Path completion + Plug 'hrsh7th/cmp-path' + Plug 'hrsh7th/cmp-buffer' + " See hrsh7th other plugins for more great completion sources! + + " Adds extra functionality over rust analyzer + Plug 'simrat39/rust-tools.nvim' + + " Snippet engine + Plug 'hrsh7th/vim-vsnip' + + " Optional + Plug 'nvim-lua/popup.nvim' + Plug 'nvim-lua/plenary.nvim' + Plug 'nvim-telescope/telescope.nvim' + + " Some color scheme other then default + Plug 'arcticicestudio/nord-vim' + call plug#end() + + + + +" COLORSCHEME: + colorscheme gruvbox "colorscheme onehalfdark let g:airline_theme='onehalfdark' set background=dark -:set inccommand=nosplit " highlight substitude + + + + let g:rooter_manual_only = 1 @@ -93,7 +144,20 @@ let g:rooter_manual_only = 1 let g:run_cmd_python = ['python3'] let g:run_split = 'right' +" HTTP +let g:vim_http_split_vertically = 1 + +" Markdown + +let g:markdown_fenced_languages = ['html', 'python', 'bash=sh', 'xml', 'javascript', 'json', 'asm'] +let g:markdown_minlines = 100 + + + + + +" YouCompleteMe: fun! SetupYCM() nnoremap gd :YcmCompleter GoTo nnoremap gr :YcmCompleter GoToReferences @@ -116,8 +180,12 @@ endfun -" CoC + + + + +" CoC: function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' @@ -154,43 +222,284 @@ fun! SetupCoC() "let g:UltiSnipsJumpForwardTrigger=">" "let g:UltiSnipsJumpBackwardTrigger="" + let g:coc_global_extensions = [ + \ 'coc-snippets', + \ 'coc-pairs', + \ 'coc-prettier', + \ 'coc-json', + \ 'coc-pyright', + \ 'coc-html', + \ 'coc-css', + \ 'coc-xml', + \ 'coc-yaml', + \ 'coc-lua', + \ ] endfun -let g:coc_global_extensions = [ - \ 'coc-snippets', - \ 'coc-pairs', - \ 'coc-prettier', - \ 'coc-json', - \ 'coc-pyright', - \ 'coc-html', - \ 'coc-css', - \ 'coc-xml', - \ 'coc-yaml', - \ 'coc-lua', - \ ] -autocmd BufNewFile,BufRead *.pde set syntax=java -autocmd BufNewFile,BufRead *.pde set filetype=java -autocmd BufNewFile,BufRead *.ino set syntax=arduino -autocmd BufNewFile,BufRead *.ino set filetype=arduino -" run python script -" autocmd BufNewFile,BufRead *.py nnoremap :vs :term python % -nnoremap rr :Run -autocmd FileType java,typescript,go,cpp,h,c,rust :call SetupYCM() -autocmd FileType html,css,js,djangohtml,py,sh,lua,php :call SetupCoC() + + + + + +" DOTNET: +fun! SetupDotnet() + " .NET C# + " Don't autoselect first omnicomplete option, show options even if there is only + " one (so the preview documentation is accessible). Remove 'preview', 'popup' + " and 'popuphidden' if you don't want to see any documentation whatsoever. + " Note that neovim does not support `popuphidden` or `popup` yet: + " https://github.com/neovim/neovim/issues/10996 + if has('patch-8.1.1880') + set completeopt=longest,menuone,popuphidden + " Highlight the completion documentation popup background/foreground the same as + " the completion menu itself, for better readability with highlighted + " documentation. + set completepopup=highlight:Pmenu,border:off + else + set completeopt=longest,menuone,preview + " Set desired preview window height for viewing documentation. + set previewheight=5 + endif + + " Tell ALE to use OmniSharp for linting C# files, and no other linters. + "let g:ale_linters = { 'cs': ['OmniSharp'] } + + augroup omnisharp_commands + autocmd! + + " Show type information automatically when the cursor stops moving. + " Note that the type is echoed to the Vim command line, and will overwrite + " any other messages in this space including e.g. ALE linting messages. + autocmd CursorHold *.cs OmniSharpTypeLookup + + " The following commands are contextual, based on the cursor position. + autocmd FileType cs nmap gd (omnisharp_go_to_definition) + autocmd FileType cs nmap gu (omnisharp_find_usages) + autocmd FileType cs nmap gi (omnisharp_find_implementations) + autocmd FileType cs nmap ospd (omnisharp_preview_definition) + autocmd FileType cs nmap ospi (omnisharp_preview_implementations) + autocmd FileType cs nmap ost (omnisharp_type_lookup) + autocmd FileType cs nmap osd (omnisharp_documentation) + autocmd FileType cs nmap osfs (omnisharp_find_symbol) + autocmd FileType cs nmap osfx (omnisharp_fix_usings) + autocmd FileType cs nmap (omnisharp_signature_help) + autocmd FileType cs imap (omnisharp_signature_help) + + " Navigate up and down by method/property/field + autocmd FileType cs nmap [[ (omnisharp_navigate_up) + autocmd FileType cs nmap ]] (omnisharp_navigate_down) + " Find all code errors/warnings for the current solution and populate the quickfix window + autocmd FileType cs nmap oscc (omnisharp_global_code_check) + " Contextual code actions (uses fzf, vim-clap, CtrlP or unite.vim selector when available) + autocmd FileType cs nmap osca (omnisharp_code_actions) + autocmd FileType cs xmap osca (omnisharp_code_actions) + " Repeat the last code action performed (does not use a selector) + autocmd FileType cs nmap os. (omnisharp_code_action_repeat) + autocmd FileType cs xmap os. (omnisharp_code_action_repeat) + + autocmd FileType cs nmap os= (omnisharp_code_format) + + autocmd FileType cs nmap rn (omnisharp_rename) + + autocmd FileType cs nmap osre (omnisharp_restart_server) + autocmd FileType cs nmap osst (omnisharp_start_server) + autocmd FileType cs nmap ossp (omnisharp_stop_server) + + "autocmd FileType cs nmap :vs | term dotnet run + autocmd FileType cs nmap run :vs:w:term dotnet run + + augroup END + + let g:OmniSharp_selector_ui = 'fzf' " Use fzf + let g:OmniSharp_selector_findusages = 'fzf' + + let g:OmniSharp_highlighting = 3 " Highlight in insert mode + + let g:OmniSharp_highlight_groups = { + \ 'Comment': 'NonText', + \ 'XmlDocCommentName': 'Identifier', + \ 'XmlDocCommentText': 'NonText' + \} + + let g:OmniSharp_popup_options = { + \ 'winblend': 30, + \ 'winhl': 'Normal:Normal' + \} + + " Enable snippet completion, using the ultisnips plugin + let g:OmniSharp_want_snippet=1 +endfun + + + -" Shebang line + + + + + + +" RUST: +" This is an example on how rust-analyzer can be configure using rust-tools +" https://sharksforarms.dev/posts/neovim-rust/ + +" Prerequisites: +" - neovim >= 0.5 +" - rust-analyzer: https://rust-analyzer.github.io/manual.html#rust-analyzer-language-server-binary + +" Steps: +" - :PlugInstall +" - Restart + + +function SetupRust() + " Set completeopt to have a better completion experience + " :help completeopt + " menuone: popup even when there's only one match + " noinsert: Do not insert text until a selection is made + " noselect: Do not select, force user to select one from the menu + set completeopt=menuone,noinsert,noselect + + " Avoid showing extra messages when using completion + set shortmess+=c + + " Configure LSP through rust-tools.nvim plugin. + " rust-tools will configure and enable certain LSP features for us. + " See https://github.com/simrat39/rust-tools.nvim#configuration + lua < lua vim.lsp.buf.definition() + nnoremap K lua vim.lsp.buf.hover() + nnoremap gD lua vim.lsp.buf.implementation() + nnoremap lua vim.lsp.buf.signature_help() + nnoremap 1gD lua vim.lsp.buf.type_definition() + nnoremap gr lua vim.lsp.buf.references() + nnoremap g0 lua vim.lsp.buf.document_symbol() + nnoremap gW lua vim.lsp.buf.workspace_symbol() + nnoremap gd lua vim.lsp.buf.definition() + + " Quick-fix + nnoremap ga lua vim.lsp.buf.code_action() + + " Setup Completion + " See https://github.com/hrsh7th/nvim-cmp#basic-configuration + lua <'] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.select_next_item(), + -- Add tab support + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.close(), + [''] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Insert, + select = true, + }) + }, + + -- Installed sources + sources = { + { name = 'nvim_lsp' }, + { name = 'vsnip' }, + { name = 'path' }, + { name = 'buffer' }, + }, + }) +EOF + + " have a fixed column for the diagnostics to appear in + " this removes the jitter when warnings/errors flow in + set signcolumn=yes + + " Set updatetime for CursorHold + " 300ms of no cursor movement to trigger CursorHold + set updatetime=300 + " Show diagnostic popup on cursor hover + + " TODO: bug, focuses popup window + "autocmd CursorHold * lua vim.lsp.diagnostic.show_line_diagnostics() + + " Goto previous/next diagnostic warning/error + nnoremap g[ lua vim.lsp.diagnostic.goto_prev() + nnoremap g] lua vim.lsp.diagnostic.goto_next() +endfunction + +:call SetupRust() + + + + + + + + + + + +" Shebang line: function! Hashbang(portable, permission, RemExt) -let shells = { + let shells = { \ 'awk': "awk", \ 'sh': "bash", \ 'hs': "runhaskell", @@ -209,103 +518,29 @@ let shells = { \ 'tk': "wish" \ } -let extension = expand("%:e") -if has_key(shells,extension) - let fileshell = shells[extension] - - if a:portable - let line = "#! /usr/bin/env " . fileshell - else - let line = "#! " . system("which " . fileshell) - endif - - 0put = line - - if a:permission - :autocmd BufWritePost * :autocmd VimLeave * :!chmod u+x % - endif - if a:RemExt - :autocmd BufWritePost * :autocmd VimLeave * :!mv % "%:p:r" - endif -endif + let extension = expand("%:e") + if has_key(shells,extension) + let fileshell = shells[extension] + + if a:portable + let line = "#! /usr/bin/env " . fileshell + else + let line = "#! " . system("which " . fileshell) + endif + + 0put = line + + if a:permission + :autocmd BufWritePost * :autocmd VimLeave * :!chmod u+x % + endif + if a:RemExt + :autocmd BufWritePost * :autocmd VimLeave * :!mv % "%:p:r" + endif + endif endfunction -:autocmd BufNewFile *.* :call Hashbang(1,1,0) - - -" HTTP -let g:vim_http_split_vertically = 1 - - - - - -" .NET C# -" Don't autoselect first omnicomplete option, show options even if there is only -" one (so the preview documentation is accessible). Remove 'preview', 'popup' -" and 'popuphidden' if you don't want to see any documentation whatsoever. -" Note that neovim does not support `popuphidden` or `popup` yet: -" https://github.com/neovim/neovim/issues/10996 -if has('patch-8.1.1880') - set completeopt=longest,menuone,popuphidden - " Highlight the completion documentation popup background/foreground the same as - " the completion menu itself, for better readability with highlighted - " documentation. - set completepopup=highlight:Pmenu,border:off -else - set completeopt=longest,menuone,preview - " Set desired preview window height for viewing documentation. - set previewheight=5 -endif - -" Tell ALE to use OmniSharp for linting C# files, and no other linters. -"let g:ale_linters = { 'cs': ['OmniSharp'] } - -augroup omnisharp_commands - autocmd! - - " Show type information automatically when the cursor stops moving. - " Note that the type is echoed to the Vim command line, and will overwrite - " any other messages in this space including e.g. ALE linting messages. - autocmd CursorHold *.cs OmniSharpTypeLookup - " The following commands are contextual, based on the cursor position. - autocmd FileType cs nmap gd (omnisharp_go_to_definition) - autocmd FileType cs nmap gu (omnisharp_find_usages) - autocmd FileType cs nmap gi (omnisharp_find_implementations) - autocmd FileType cs nmap ospd (omnisharp_preview_definition) - autocmd FileType cs nmap ospi (omnisharp_preview_implementations) - autocmd FileType cs nmap ost (omnisharp_type_lookup) - autocmd FileType cs nmap osd (omnisharp_documentation) - autocmd FileType cs nmap osfs (omnisharp_find_symbol) - autocmd FileType cs nmap osfx (omnisharp_fix_usings) - autocmd FileType cs nmap (omnisharp_signature_help) - autocmd FileType cs imap (omnisharp_signature_help) - " Navigate up and down by method/property/field - autocmd FileType cs nmap [[ (omnisharp_navigate_up) - autocmd FileType cs nmap ]] (omnisharp_navigate_down) - " Find all code errors/warnings for the current solution and populate the quickfix window - autocmd FileType cs nmap oscc (omnisharp_global_code_check) - " Contextual code actions (uses fzf, vim-clap, CtrlP or unite.vim selector when available) - autocmd FileType cs nmap osca (omnisharp_code_actions) - autocmd FileType cs xmap osca (omnisharp_code_actions) - " Repeat the last code action performed (does not use a selector) - autocmd FileType cs nmap os. (omnisharp_code_action_repeat) - autocmd FileType cs xmap os. (omnisharp_code_action_repeat) - - autocmd FileType cs nmap os= (omnisharp_code_format) - - autocmd FileType cs nmap rn (omnisharp_rename) - - autocmd FileType cs nmap osre (omnisharp_restart_server) - autocmd FileType cs nmap osst (omnisharp_start_server) - autocmd FileType cs nmap ossp (omnisharp_stop_server) - - "autocmd FileType cs nmap :vs | term dotnet run - autocmd FileType cs nmap run :vs:w:term dotnet run - -augroup END @@ -321,36 +556,37 @@ autocmd BufWritePre * :call StripTrailingWhitespaces() -let g:OmniSharp_selector_ui = 'fzf' " Use fzf -let g:OmniSharp_selector_findusages = 'fzf' -let g:OmniSharp_highlighting = 3 " Highlight in insert mode -let g:OmniSharp_highlight_groups = { -\ 'Comment': 'NonText', -\ 'XmlDocCommentName': 'Identifier', -\ 'XmlDocCommentText': 'NonText' -\} -let g:OmniSharp_popup_options = { -\ 'winblend': 30, -\ 'winhl': 'Normal:Normal' -\} -" Enable snippet completion, using the ultisnips plugin -let g:OmniSharp_want_snippet=1 +" AUTOCMD: +autocmd BufNewFile,BufRead *.pde set syntax=java +autocmd BufNewFile,BufRead *.pde set filetype=java +autocmd BufNewFile,BufRead *.ino set syntax=arduino +autocmd BufNewFile,BufRead *.ino set filetype=arduino +autocmd BufNewFile *.* :call Hashbang(1,1,0) +" run python script +" autocmd BufNewFile,BufRead *.py nnoremap :vs :term python % -" Markdown +nnoremap rr :Run -let g:markdown_fenced_languages = ['html', 'python', 'bash=sh', 'xml', 'javascript', 'json', 'asm'] -let g:markdown_minlines = 100 +autocmd FileType java,typescript,go,cpp,h,c :call SetupYCM() +autocmd FileType html,css,js,djangohtml,py,sh,lua,php :call SetupCoC() +autocmd FileType rust :call SetupRust() + + + + + +" REMAPPING: " disable spacebar (don't move forward) @@ -378,7 +614,16 @@ nnoremap :call NERDComment(0,"toggle") -" MUST HAVE VIM REMAPS + + + + + + + + + +" MUST HAVE VIM REMAPS: " https://youtu.be/hSHATqh8svM " Number 5: Behave Vim @@ -416,3 +661,4 @@ vnoremap > >gv " vnoremap >gv +