" This is my vimrc " There are many like it but this will eventually be mine " " vim: ts=2 sw=2 expandtab " vint: +ProhibitAbbreviationOption +ProhibitSetNoCompatible "***************************************************************************** "" 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 = "iceberg" 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 " {{{ call plug#begin(expand('$HOME/.config/vim/plugged')) " vim-sensible Plug 'tpope/vim-sensible' " coc.nvim - Intellisense engine Plug 'neoclide/coc.nvim', {'branch': 'release'} " editorconfig-vim - EditorConfig plugin Plug 'editorconfig/editorconfig-vim' " nerdtree - File system explorer Plug 'scrooloose/nerdtree' Plug 'jistr/vim-nerdtree-tabs' " vim-commentary - Commenting plugin Plug 'tpope/vim-commentary' " vim-fugitive - Git wrapper Plug 'tpope/vim-fugitive' " vim-gitgutter - Git diff in the gutter Plug 'airblade/vim-gitgutter' " grep.vim - Grep plugin Plug 'vim-scripts/grep.vim' " CSApprox - Approximate color scheme Plug 'vim-scripts/CSApprox' " tagbar - Tag list Plug 'majutsushi/tagbar' " ale - Asynchronous Lint Engine Plug 'dense-analysis/ale' " indentLine - Show indent lines Plug 'Yggdroot/indentLine' " vim-bootstrap-updater - Update vim-bootstrap Plug 'editor-bootstrap/vim-bootstrap-updater' " vim-rhubarb - Fugitive extension Plug 'tpope/vim-rhubarb' " required by fugitive to :GBrowse " ctrlp.vim - Fuzzy file finder Plug 'ctrlpvim/ctrlp.vim' " vim-airline Plug 'vim-airline/vim-airline' " iceberg.vim - Iceberg color scheme Plug 'cocopon/iceberg.vim' " fzf.vim - Fuzzy finder if isdirectory('~/.config/vim/extra/fzf') Plug '~/.config/vim/extra/fzf' | Plug 'junegunn/fzf.vim' else Plug 'junegunn/fzf', { 'dir': '~/.config/vim/extra/fzf', 'do': './install --bin' } Plug 'junegunn/fzf.vim' endif let g:make = 'gmake' if exists('make') let g:make = 'make' endif " vim-wordy - Uncover usage problems in your writing Plug 'preservim/vim-wordy' " vimproc.vim - Asynchronous execution Plug 'Shougo/vimproc.vim', {'do': g:make} " Vim-Session Plug 'xolox/vim-misc' Plug 'xolox/vim-session' " go Plug 'fatih/vim-go', {'do': ':GoInstallBinaries'} " html Plug 'hail2u/vim-css3-syntax' Plug 'gko/vim-coloresque' Plug 'tpope/vim-haml' Plug 'mattn/emmet-vim' " javascript Plug 'jelera/vim-javascript-syntax' " lua Plug 'xolox/vim-lua-ftplugin' Plug 'xolox/vim-lua-inspect' " php Plug 'phpactor/phpactor', {'for': 'php', 'do': 'composer install --no-dev -o'} Plug 'stephpy/vim-php-cs-fixer' " python Plug 'davidhalter/jedi-vim' Plug 'raimon49/requirements.txt.vim', {'for': 'requirements'} " typescript Plug 'leafgarland/typescript-vim' Plug 'HerringtonDarkholme/yats.vim' " vimrc Plug 'Vimjas/vint' " vuejs Plug 'posva/vim-vue' Plug 'leafOfTree/vim-vue-plugin' call plug#end() " }}} " COC let g:coc_global_extensions = [ \ '@yaegassy/coc-intelephense', \ '@yaegassy/coc-laravel', \ '@yaegassy/coc-phpstan', \ 'coc-blade', \ 'coc-git', \ 'coc-json', \ 'coc-php-cs-fixer', \ 'coc-phpls', \ 'coc-prettier', \ 'coc-sh', \ 'coc-toml', \ 'coc-tsserver', \ 'coc-vimlsp', \ 'coc-yaml', \ 'coc-yank', \ 'coc-marketplace' \ ] " 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 statusline to show the file name " 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 fugitive is installed, add the statusline 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 = 'iceberg' " 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 t :NERDTreeToggle " grep.vim configuration 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' " CoC (code suggestions, diagnostics and refactoring) " find or update definitions nmap gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) nmap gr (coc-references) nmap gn (coc-rename) " autoformat code based on linter function! s:auto_format() " eslint is no longer exposed as a proper linter to coc if index(['js', 'jsx', 'javascript', 'javascriptreact', 'ts', 'typescript', 'typescriptcommon', 'typescriptreact'], &filetype) >= 0 silent! CocCommand eslint.executeAutofix else call CocActionAsync('format') endif endfunction noremap f :call auto_format() " jump to diagnostics or the documentation nmap (coc-diagnostic-prev) nmap (coc-diagnostic-next) function! s:show_documentation() if index(['vim','help'], &filetype) >= 0 execute 'h '.expand('') else call CocActionAsync('doHover') endif endfunction noremap K :call show_documentation() " scroll popup windows function s:find_cursor_popup(...) let radius = 50 let srow = screenrow() let scol = screencol() for r in range(srow - radius, srow + radius) for c in range(scol - radius, scol + radius) let winid = popup_locate(r, c) if winid != 0 return winid endif endfor endfor return 0 endfunction function s:scroll_cursor_popup(down) let winid = find_cursor_popup() if winid == 0 return 0 endif let pp = popup_getpos(winid) call popup_setoptions(winid, {'firstline': pp.firstline + a:down}) return 1 endfunction imap scroll_cursor_popup(1) ? '' : '' imap scroll_cursor_popup(-1) ? '' : '' " expand snippets, completion or copilot with tab key based on selection imap let g:copilot_no_tab_map = v:true inoremap \ coc#pum#has_item_selected() ? coc#_select_confirm() : \ exists('b:_copilot.suggestions') ? copilot#Accept("\") : "" " automatically fix diagnostics and/or refactor noremap d :CocList diagnostics nmap c (coc-codeaction) xmap c (coc-codeaction-selected) let g:wordy#ring = [ \ 'weak', \ ['being', 'passive-voice', ], \ 'business-jargon', \ 'weasel', \ 'puffery', \ ['problematic', 'redundant', ], \ ['colloquial', 'idiomatic', 'similies', ], \ 'art-jargon', \ ['contractions', 'opinion', 'vague-time', 'said-synonyms', ], \ 'adjectives', \ 'adverbs', \ ] "***************************************************************************** "" Commands "***************************************************************************** " remove trailing whitespaces command! FixWhitespace :%s/\s\+$//e "***************************************************************************** "" Functions "***************************************************************************** " setup wrapping function if !exists('*s:setupWrapping') function s:setupWrapping() set wrap set wm=2 set textwidth=79 endfunction endif "***************************************************************************** "" Custom configs "***************************************************************************** " ale let g:ale_linters = { \ "vim": [ "vint" ] \} let g:ale_fixers = { \} " 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 " 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 for python 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' ], \ }) :call extend(g:ale_fixers, { \ '*': ['remove_trailing_lines', 'trim_whitespace'] \ }) let g:ale_sign_column_always = 1 let g:ale_fix_on_save = 1 " editorconfig let g:EditorConfig_exclude_patterns = ['fugitive://.*'] au FileType gitcommit let b:EditorConfig_disable = 1 " 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