" This is my vimrc " " "***************************************************************************** "" Vim-Plug core "***************************************************************************** let vimplug_exists=expand('$HOME/.config/autoload/plug.vim') if has('win32')&&!has('win64') let curl_exists=expand('C:\Windows\Sysnative\curl.exe') else let curl_exists=expand('curl') endif let g:vim_bootstrap_langs = "go,html,javascript,lua,php,python,typescript" let g:vim_bootstrap_editor = "vim" " nvim or vim let g:vim_bootstrap_theme = "minimalist" let g:vim_bootstrap_frams = "vuejs" if !filereadable(vimplug_exists) if !executable(curl_exists) echoerr "You have to install curl or first install vim-plug yourself!" execute "q!" endif echo "Installing Vim-Plug..." echo "" silent exec "!"curl_exists" -fLo " . shellescape(vimplug_exists) . " --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" let g:not_finish_vimplug = "yes" autocmd VimEnter * PlugInstall endif " Required: call plug#begin(expand('$HOME/.config/vim/plugged')) Plug 'scrooloose/nerdtree' Plug 'jistr/vim-nerdtree-tabs' Plug 'tpope/vim-commentary' Plug 'tpope/vim-fugitive' Plug 'airblade/vim-gitgutter' Plug 'vim-scripts/grep.vim' Plug 'vim-scripts/CSApprox' Plug 'Raimondi/delimitMate' Plug 'majutsushi/tagbar' Plug 'dense-analysis/ale' Plug 'Yggdroot/indentLine' Plug 'editor-bootstrap/vim-bootstrap-updater' Plug 'tpope/vim-rhubarb' " required by fugitive to :GBrowse Plug 'dikiaap/minimalist' Plug 'liuchengxu/vim-which-key' if isdirectory('~/.config/vim/extra/fzf') Plug '~/.local/bin/fzf' | Plug 'junegunn/fzf.vim' else Plug 'junegunn/fzf', { 'dir': '~/.config/vim/fzf', 'do': './install --bin' } Plug 'junegunn/fzf.vim' endif let g:make = 'gmake' if exists('make') let g:make = 'make' endif Plug 'Shougo/vimproc.vim', {'do': g:make} "" Vim-Session Plug 'xolox/vim-misc' Plug 'xolox/vim-session' " go "" Go Lang Bundle Plug 'fatih/vim-go', {'do': ':GoInstallBinaries'} " html "" HTML Bundle Plug 'hail2u/vim-css3-syntax' Plug 'gko/vim-coloresque' Plug 'tpope/vim-haml' Plug 'mattn/emmet-vim' " javascript "" Javascript Bundle Plug 'jelera/vim-javascript-syntax' " lua "" Lua Bundle Plug 'xolox/vim-lua-ftplugin' Plug 'xolox/vim-lua-inspect' " php "" PHP Bundle Plug 'phpactor/phpactor', {'for': 'php', 'do': 'composer install --no-dev -o'} Plug 'stephpy/vim-php-cs-fixer' " python "" Python Bundle Plug 'davidhalter/jedi-vim' Plug 'raimon49/requirements.txt.vim', {'for': 'requirements'} " typescript Plug 'leafgarland/typescript-vim' Plug 'HerringtonDarkholme/yats.vim' " vuejs Plug 'posva/vim-vue' Plug 'leafOfTree/vim-vue-plugin' "***************************************************************************** "***************************************************************************** set nocompatible " disable compatibility mode with vi filetype off " disable filetype detection (but re-enable later, see below) set encoding=utf-8 " UTF-8 set number " Show line numbers set relativenumber " Show relative line numbers set laststatus=2 " Always show statusline (even with only single window) set showmatch " Highlight matching brace set visualbell " Use visual bell (no beeping) set backspace=indent,eol,start " Backspace behaviour set cindent " Use 'C' style program indenting set cursorline " Highlight current line set expandtab " Use spaces instead of tabs set fileformats=unix,dos,mac set ignorecase " Always case-insensitive set incsearch " Searches for strings incrementally set linespace=3 set modeline set modelines=3 set mouse=a set mousemodel=popup set ruler " Show row and column ruler information set scrolloff=5 set shiftwidth=4 " Number of auto-indent spaces set smartcase " Enable smart-case search set smartindent " Enable smart-indent set smarttab " Enable smart-tabs set softtabstop=4 " Number of spaces per Tab set termguicolors set undolevels=1000 " Number of undo levels set wildmenu call plug#end() " Required: filetype plugin indent on "" Map leader to let mapleader=' ' "" Enable hidden buffers set hidden if exists('$SHELL') set shell=$SHELL else set shell=/bin/sh endif " session management let g:session_directory = "~/.local/state/vim/session" let g:session_autoload = "yes" let g:session_autosave = "yes" let g:session_command_aliases = 1 syntax on set mousemodel=popup set t_Co=256 set guioptions=egmrti if has("gui_running") if has("gui_mac") || has("gui_macvim") set macligatures set guifont=JetBrains\ Mono:h14 set transparency=7 endif else let g:CSApprox_loaded = 1 " IndentLine let g:indentLine_enabled = 1 let g:indentLine_concealcursor = '' let g:indentLine_char = '┆' let g:indentLine_faster = 1 if $COLORTERM == 'gnome-terminal' set term=gnome-256color else if $TERM == 'xterm' set term=xterm-256color endif endif endif if &term =~ '256color' set t_ut= endif set title set titleold="Terminal" set titlestring=%F set statusline=%F%m%r%h%w%=(%{&ff}/%Y)\ (line\ %l\/%L)| " Search mappings: These will make it so that going to the next one in a " search will center on the line it's found in. nnoremap n nzzzv nnoremap N Nzzzv if exists("*fugitive#statusline") set statusline+=%{fugitive#statusline()} endif " vim-airline let g:airline#extensions#ale#enabled = 1 let g:airline#extensions#branch#enabled = 1 let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tagbar#enabled = 1 let g:airline_powerline_fonts = 1 let g:airline_skip_empty_sections = 1 let g:airline_theme = 'minimalist' "***************************************************************************** "" Abbreviations "***************************************************************************** "" no one is really happy until you have this shortcuts cnoreabbrev W! w! cnoreabbrev Q! q! cnoreabbrev Qall! qall! cnoreabbrev Wq wq cnoreabbrev Wa wa cnoreabbrev wQ wq cnoreabbrev WQ wq cnoreabbrev W w cnoreabbrev Q q cnoreabbrev Qall qall "" NERDTree configuration let g:NERDTreeChDirMode=2 let g:NERDTreeIgnore=['node_modules', 'vendor', '\.rbc$', '\~$', '\.pyc$', '\.db$', '\.sqlite$', '__pycache__'] let g:NERDTreeSortOrder=['^__\.py$', '\/$', '*', '\.swp$', '\.bak$', '\~$'] let g:NERDTreeShowBookmarks=1 let g:nerdtree_tabs_focus_on_files=1 let g:NERDTreeMapOpenInTabSilent = '' let g:NERDTreeWinSize = 50 set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.db,*.sqlite,*node_modules/,*vendor/ nnoremap :NERDTreeFind nnoremap q :NERDTreeToggle " grep.vim nnoremap f :Rgrep let Grep_Default_Options = '-IR' let Grep_Skip_Files = '*.log *.db .DS_Store' let Grep_Skip_Dirs = '.git node_modules vendor plugged' " terminal emulation nnoremap sh :terminal " vim-which-key config nnoremap :WhichKey '' set timeoutlen=500 " By default timeoutlen=1000 (ms) "***************************************************************************** "" Commands "***************************************************************************** " remove trailing whitespaces command! FixWhitespace :%s/\s\+$//e "***************************************************************************** "" Functions "***************************************************************************** if !exists('*s:setupWrapping') function s:setupWrapping() set wrap set wm=2 set textwidth=79 endfunction endif "***************************************************************************** "" Autocmd Rules "***************************************************************************** "" The PC is fast enough, do syntax highlight syncing from start unless 200 lines augroup vimrc-sync-fromstart autocmd! autocmd BufEnter * :syntax sync maxlines=200 augroup END "" Remember cursor position augroup vimrc-remember-cursor-position autocmd! " autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif augroup END "" txt augroup vimrc-wrapping autocmd! autocmd BufRead,BufNewFile *.txt call s:setupWrapping() augroup END "" make/cmake augroup vimrc-make-cmake autocmd! autocmd FileType make setlocal noexpandtab autocmd BufNewFile,BufRead CMakeLists.txt setlocal filetype=cmake augroup END set autoread "***************************************************************************** "" Mappings "***************************************************************************** "" Split noremap h :split noremap v :vsplit "" Git noremap ga :Gwrite noremap gc :Git commit --verbose noremap gsh :Git push noremap gll :Git pull noremap gs :Git noremap gb :Git blame noremap gd :Gvdiffsplit noremap gr :GRemove " session management nnoremap so :OpenSession nnoremap ss :SaveSession nnoremap sd :DeleteSession nnoremap sc :CloseSession "" Tabs nnoremap gt nnoremap gT nnoremap :tabnew "" Set working directory nnoremap . :lcd %:p:h "" Opens an edit command with the path of the currently edited file filled in noremap e :e =expand("%:p:h") . "/" "" Opens a tab edit command with the path of the currently edited file filled noremap te :tabe =expand("%:p:h") . "/" "" fzf.vim set wildmode=list:longest,list:full set wildignore+=*.o,*.obj,.git,*.rbc,*.pyc,__pycache__,vendor let $FZF_DEFAULT_COMMAND = "find * -path '*/\.*' -prune -o -path 'node_modules/**' -prune -o -path 'target/**' -prune -o -path 'vendor/**' -prune -o -path 'dist/**' -prune -o -type f -print -o -type l -print 2> /dev/null" " ripgrep if executable('rg') let $FZF_DEFAULT_COMMAND = 'rg --files --hidden --follow --glob "!.git/*"' set grepprg=rg\ --vimgrep command! -bang -nargs=* Find call fzf#vim#grep('rg --column --line-number --no-heading --fixed-strings --ignore-case --hidden --follow --glob "!.git/*" --color "always" '.shellescape().'| tr -d "\017"', 1, 0) endif cnoremap =expand("%:p:h") . "/" nnoremap b :Buffers nnoremap e :FZF -m "Recovery commands from history through FZF nmap y :History: " ale let g:ale_linters = {} " Tagbar nmap :TagbarToggle let g:tagbar_autofocus = 1 " Disable visualbell set noerrorbells visualbell t_vb= if has('autocmd') autocmd GUIEnter * set visualbell t_vb= endif "" Copy/Paste/Cut if has('unnamedplus') set clipboard=unnamed,unnamedplus endif noremap YY "+y noremap p "+gP noremap XX "+x if has('macunix') " pbcopy for OSX copy/paste vmap :!pbcopy vmap :w !pbcopy vmap :!pbpaste endif "" Buffer nav noremap z :bp noremap q :bp noremap x :bn noremap w :bn "" Close buffer noremap c :bd "" Clean search (highlight) nnoremap :noh "" Switching windows noremap j noremap k noremap l noremap h "" Vmap for maintain Visual Mode after shifting > and < vmap < >gv "" Move visual block vnoremap J :m '>+1gv=gv vnoremap K :m '<-2gv=gv "" Open current line on GitHub nnoremap o :.GBrowse "***************************************************************************** "" Custom configs "***************************************************************************** " go " vim-go " run :GoBuild or :GoTestCompile based on the go file function! s:build_go_files() let l:file = expand('%') if l:file =~# '^\f\+_test\.go$' call go#test#Test(0, 1) elseif l:file =~# '^\f\+\.go$' call go#cmd#Build(0) endif endfunction let g:go_list_type = "quickfix" let g:go_fmt_command = "goimports" let g:go_fmt_fail_silently = 1 let g:go_highlight_types = 1 let g:go_highlight_fields = 1 let g:go_highlight_functions = 1 let g:go_highlight_methods = 1 let g:go_highlight_operators = 1 let g:go_highlight_build_constraints = 1 let g:go_highlight_structs = 1 let g:go_highlight_generate_tags = 1 let g:go_highlight_space_tab_error = 0 let g:go_highlight_array_whitespace_error = 0 let g:go_highlight_trailing_whitespace_error = 0 let g:go_highlight_extra_types = 1 autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 augroup completion_preview_close autocmd! if v:version > 703 || v:version == 703 && has('patch598') autocmd CompleteDone * if !&previewwindow && &completeopt =~ 'preview' | silent! pclose | endif endif augroup END augroup go au! au Filetype go command! -bang A call go#alternate#Switch(0, 'edit') au Filetype go command! -bang AV call go#alternate#Switch(0, 'vsplit') au Filetype go command! -bang AS call go#alternate#Switch(0, 'split') au Filetype go command! -bang AT call go#alternate#Switch(0, 'tabe') au FileType go nmap dd (go-def-vertical) au FileType go nmap dv (go-doc-vertical) au FileType go nmap db (go-doc-browser) au FileType go nmap r (go-run) au FileType go nmap t (go-test) au FileType go nmap gt (go-coverage-toggle) au FileType go nmap i (go-info) au FileType go nmap l (go-metalinter) au FileType go nmap :GoDecls au FileType go nmap dr :GoDeclsDir au FileType go imap :GoDecls au FileType go imap dr :GoDeclsDir au FileType go nmap rb :call build_go_files() augroup END " ale :call extend(g:ale_linters, {"go": [ 'golint', 'go vet' ]}) " html " for html files, 2 spaces autocmd Filetype html setlocal ts=2 sw=2 expandtab " javascript let g:javascript_enable_domhtmlcss = 1 " vim-javascript augroup vimrc-javascript autocmd! autocmd FileType javascript setl tabstop=4|setl shiftwidth=4|setl expandtab softtabstop=4 augroup END " php " Phpactor plugin " Include use statement nmap u :call phpactor#UseAdd() " Invoke the context menu nmap mm :call phpactor#ContextMenu() " Invoke the navigation menu nmap nn :call phpactor#Navigate() " Goto definition of class or class member under the cursor nmap oo :call phpactor#GotoDefinition() nmap oh :call phpactor#GotoDefinition('hsplit') nmap ov :call phpactor#GotoDefinition('vsplit') nmap ot :call phpactor#GotoDefinition('tabnew') " Show brief information about the symbol under the cursor nmap K :call phpactor#Hover() " Transform the classes in the current file nmap tt :call phpactor#Transform() " Generate a new class (replacing the current file) nmap cc :call phpactor#ClassNew() " Extract expression (normal mode) nmap ee :call phpactor#ExtractExpression(v:false) " Extract expression from selection vmap ee :call phpactor#ExtractExpression(v:true) " Extract method from selection vmap em :call phpactor#ExtractMethod() " python " vim-python augroup vimrc-python autocmd! autocmd FileType python setlocal expandtab shiftwidth=4 tabstop=8 colorcolumn=79 formatoptions+=croq softtabstop=4 cinwords=if,elif,else,for,while,try,except,finally,def,class,with augroup END " jedi-vim let g:jedi#popup_on_dot = 0 let g:jedi#goto_assignments_command = "g" let g:jedi#goto_definitions_command = "d" let g:jedi#documentation_command = "K" let g:jedi#usages_command = "n" let g:jedi#rename_command = "r" let g:jedi#show_call_signatures = "0" let g:jedi#completions_command = "" let g:jedi#smart_auto_mappings = 0 " ale :call extend(g:ale_linters, { 'python': [ 'flake8' ] }) " Syntax highlight let python_highlight_all = 1 " typescript let g:yats_host_keyword = 1 " vuejs " vim vue let g:vue_disable_pre_processors=1 " vim vue plugin let g:vim_vue_plugin_load_full_syntax = 1