diff --git a/nvim/.gitignore b/nvim/.gitignore new file mode 100644 index 0000000..ddf2379 --- /dev/null +++ b/nvim/.gitignore @@ -0,0 +1 @@ +bundle/ diff --git a/nvim/init.vim b/nvim/init.vim new file mode 100644 index 0000000..f00e6cb --- /dev/null +++ b/nvim/init.vim @@ -0,0 +1,306 @@ +set nocompatible " required +filetype off " required + +" set the runtime path to include Vundle and initialize +set rtp+=~/.vim/bundle/Vundle.vim +let s:editor_root=expand("~/.config/nvim") +call vundle#rc(s:editor_root . '/bundle') +call vundle#begin() + +" let Vundle manage Vundle, required +Plugin 'VundleVim/Vundle.vim' + +" add all your plugins here (note older versions of Vundle +" used Bundle instead of Plugin) + +" USEFUL +" comment plugin +Plugin 'tpope/vim-commentary' +" Color higlighting +Plugin 'norcalli/nvim-colorizer.lua' + +" brackets management +Plugin 'machakann/vim-sandwich' + +" snippets +Plugin 'SirVer/ultisnips' + +" WINDOW MANAGEMENT +" tmux navigator +Plugin 'christoomey/vim-tmux-navigator' + +" winresizer +Plugin 'simeji/winresizer' + +" FILE MANAGEMENT +" nert-tree +Plugin 'scrooloose/nerdtree' + +" fzf plugin +Plugin 'junegunn/fzf.vim' + +" GIT STUFF +" git +Plugin 'tpope/vim-fugitive' + +" vim gitgutter +Plugin 'airblade/vim-gitgutter' + +" COLORS +" color schemes +Plugin 'flazz/vim-colorschemes' + +" powerline +Plugin 'vim-airline/vim-airline' +Plugin 'vim-airline/vim-airline-themes' + +" LANGUAGE SUPPORT +" vim-coc +Plugin 'neoclide/coc.nvim', {'tag': '*', 'branch': 'release'} + +" nvim-remote +Plugin 'mhinz/neovim-remote' + +" editorconfig plugin +Plugin 'editorconfig/editorconfig-vim' + +" language packs +Plugin 'sheerun/vim-polyglot' + +" latex +Plugin 'lervag/vimtex' + +" All of your Plugins must be added before the following line +call vundle#end() " required +filetype plugin indent on " required + +" nvim setup +" syntax +set termguicolors +syntax on +colorscheme Benokai +let mapleader=" " + +" random settings +set number +set clipboard=unnamed +set mouse=nvi +set smarttab +set visualbell +set virtualedit=block +set scrolloff=1 +set wildmenu +set autoread +set lazyredraw +set history=250 + +" tabs and line wrap +set tabstop=4 +set wrapmargin=8 +set softtabstop=0 noexpandtab +set shiftwidth=4 +set backspace=2 +set backspace=indent,eol,start +set encoding=utf-8 +set autoindent + +" search +set incsearch +set hlsearch +set smartcase + +" search for visual selection +vnoremap // y/" + +" Disable Backup and Swap files +set noswapfile +set nobackup +set nowritebackup + +" setup split +set splitbelow +set splitright + +" tabs +nnoremap t :tabnew +nnoremap gT +nnoremap gt + +" Enable folding +set foldmethod=indent +set foldlevel=99 + +" remap code folding +nnoremap g za + +" auto reload .vimrc on write +autocmd BufWritePost init.vim source % + +" ex command +cnoremap +cnoremap + +" toggle hybrid number mode +nnoremap h :set rnu! +:augroup numbertoggle +: autocmd! +: autocmd BufEnter,FocusGained,InsertLeave * set relativenumber +: autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber +:augroup END + +" disable arrow keys +noremap +noremap +noremap +noremap + +" auto expand brackets +inoremap (; ()O +inoremap (, (),O +inoremap {; {}O +inoremap {, {},O +inoremap [; []O +inoremap [, [],O + +" Delete buffer while keeping window layout (don't close buffer's windows). +" Version 2008-11-18 from http://vim.wikia.com/wiki/VimTip165 +if v:version < 700 || exists('loaded_bclose') || &cp + finish +endif +let loaded_bclose = 1 +if !exists('bclose_multiple') + let bclose_multiple = 1 +endif + +" Display an error message. +function! s:Warn(msg) + echohl ErrorMsg + echomsg a:msg + echohl NONE +endfunction + +" Command ':Bclose' executes ':bd' to delete buffer in current window. +" The window will show the alternate buffer (Ctrl-^) if it exists, +" or the previous buffer (:bp), or a blank buffer if no previous. +" Command ':Bclose!' is the same, but executes ':bd!' (discard changes). +" An optional argument can specify which buffer to close (name or number). +function! s:Bclose(bang, buffer) + if empty(a:buffer) + let btarget = bufnr('%') + elseif a:buffer =~ '^\d\+$' + let btarget = bufnr(str2nr(a:buffer)) + else + let btarget = bufnr(a:buffer) + endif + if btarget < 0 + call s:Warn('No matching buffer for '.a:buffer) + return + endif + if empty(a:bang) && getbufvar(btarget, '&modified') + call s:Warn('No write since last change for buffer '.btarget.' (use :Bclose!)') + return + endif + " Numbers of windows that view target buffer which we will delete. + let wnums = filter(range(1, winnr('$')), 'winbufnr(v:val) == btarget') + if !g:bclose_multiple && len(wnums) > 1 + call s:Warn('Buffer is in multiple windows (use ":let bclose_multiple=1")') + return + endif + let wcurrent = winnr() + for w in wnums + execute w.'wincmd w' + let prevbuf = bufnr('#') + if prevbuf > 0 && buflisted(prevbuf) && prevbuf != btarget + buffer # + else + bprevious + endif + if btarget == bufnr('%') + " Numbers of listed buffers which are not the target to be deleted. + let blisted = filter(range(1, bufnr('$')), 'buflisted(v:val) && v:val != btarget') + " Listed, not target, and not displayed. + let bhidden = filter(copy(blisted), 'bufwinnr(v:val) < 0') + " Take the first buffer, if any (could be more intelligent). + let bjump = (bhidden + blisted + [-1])[0] + if bjump > 0 + execute 'buffer '.bjump + else + execute 'enew'.a:bang + endif + endif + endfor + execute 'bdelete'.a:bang.' '.btarget + execute wcurrent.'wincmd w' +endfunction +command! -bang -complete=buffer -nargs=? Bclose call Bclose(, ) +nnoremap bd :Bclose + +" PLUGIN SETTINGS +" polyglot setup +let g:polyglot_disabled = ["latex"] +" nerd tree setup +let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree +map e :NERDTreeToggle + +" AIRLINE SETUP +" sections +let g:airline_section_y = "" +let g:airline_section_z = "%l/%L:%c" +let g:airline_section_b = "%{airline#util#wrap(airline#extensions#branch#get_head(),0)}" +" other stuff +let g:airline_theme='solarized' +let g:airline_solarized_bg='dark' +let g:airline_powerline_fonts = 1 +let g:airline_inactive_collapse=1 +let g:airline_skip_empty_sections = 1 +let g:airline#extensions#whitespace#enabled = 0 +let g:airline#extensions#wordcount#enabled = 0 +let g:airline#extensions#keymap#enabled = 0 +set ttimeoutlen=50 + +" gitgutter setup +let g:gitgutter_sign_added = '∙' +let g:gitgutter_sign_modified = '∙' +let g:gitgutter_sign_removed = '∙' +let g:gitgutter_sign_modified_removed = '∙' +augroup VimDiff + autocmd! + autocmd VimEnter,FilterWritePre * if &diff | GitGutterDisable | endif +augroup END + +" fzf setup +nmap :Buffers +nmap f :GFiles +let g:fzf_buffers_jump = 1 + +" vim-ale setup +let g:ale_completion_enabled = 1 +let g:ale_lint_on_text_changed = 'never' +let g:ale_fixers = { +\ '*': ['trim_whitespace'], +\ 'python': ['autopep8'] +\ } +nmap d :ALEGoToDefinition +nmap r :ALEFindReferences +nmap b :ALEFix +nnoremap l :lnext +nnoremap p :lprevious + +" vimtex setup +let g:vimtex_compile_progname = 'nvr' + +" UltiSnip setup +" Trigger configuration +let g:UltiSnipsExpandTrigger="" +let g:UltiSnipsJumpForwardTrigger="" +let g:UltiSnipsJumpBackwardTrigger="" + +" If you want :UltiSnipsEdit to split your window. +let g:UltiSnipsEditSplit="vertical" +let g:UltiSnipsSnippetDirectories=[$HOME."/.vim/snipps"] + +" colors.lua setup +lua require'colorizer'.setup() + +" coc vim setup +let g:python3_host_prog = '/usr/bin/python'