" set nocompatible " be iMproved, required filetype off " required set ttyfast " set the runtime path to include Vundle and initialize set runtimepath+=~/.vim/bundle/Vundle.vim call vundle#begin() " alternatively, pass a path where Vundle should install plugins "call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' " plugin on GitHub repo Plugin 'tpope/vim-fugitive' " Nerdtree and nerdtree-git " Plugin 'scrooloose/nerdtree.git' " Plugin 'Xuyuanp/nerdtree-git-plugin' "css3-syntax Plugin 'hail2u/vim-css3-syntax.git' "scss-syntax Plugin 'cakebaker/scss-syntax.vim' "bufexplorer Plugin 'jlanzarotta/bufexplorer' "tagbar Plugin 'majutsushi/tagbar' "vim-surround Plugin 'tpope/vim-surround' "undotree Plugin 'mbbill/undotree' " gutentag "Plugin 'ludovicchabant/vim-gutentags' " vim-project-tags "dependancy needed: "https://github.com/still-dreaming-1/vim-project-tags Plugin 'still-dreaming-1/vim-elhiv' Plugin 'still-dreaming-1/vim-project-tags' " Ctrlp Plugin 'ctrlpvim/ctrlp.vim' " Obsession Plugin 'tpope/vim-obsession' " vim-css-color Plugin 'ap/vim-css-color' " vim-javascript-syntax " Plugin 'jelera/vim-javascript-syntax' " vim-javascript Plugin 'pangloss/vim-javascript' " ultisnips " https://github.com/sirver/UltiSnips Plugin 'SirVer/ultisnips' " and some snippets " https://github.com/honza/vim-snippets Plugin 'honza/vim-snippets' " ALE " https://github.com/w0rp/ale Plugin 'w0rp/ale' " MatchTag " https://github.com/gregsexton/MatchTag Plugin 'gregsexton/MatchTag' " phpcomplete.vim " https://github.com/shawncplus/phpcomplete.vim Plugin 'shawncplus/phpcomplete.vim' " https://github.com/dsawardekar/wordpress.vim " For up to date Wordpress Files see: " https://github.com/joseluis/wordpress.vim-generator "Plugin 'dsawardekar/wordpress.vim' " disabled - doesn't support universal ctags? " vim-vue " https://github.com/posva/vim-vue Plugin 'posva/vim-vue' " vim-commentary " https://github.com/tpope/vim-commentary Plugin 'tpope/vim-commentary' " vim-repeat " https://github.com/tpope/vim-repeat Plugin 'tpope/vim-repeat' " taboo.vim " https://github.com/gcmt/taboo.vim Plugin 'gcmt/taboo.vim' " https://github.com/mattn/emmet-vim Plugin 'mattn/emmet-vim' " vimwiki " https://github.com/vimwiki/vimwiki Plugin 'vimwiki/vimwiki' " vim-slash " https://github.com/junegunn/vim-slash Plugin 'junegunn/vim-slash' " youcompleteme " https://github.com/Valloric/YouCompleteMe Plugin 'Valloric/YouCompleteMe' " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required " To ignore plugin indent changes, instead use: " " Brief help " :PluginList - lists configured plugins " :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate " :PluginSearch foo - searches for foo; append `!` to refresh local cache " :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal " " see :h vundle for more details or wiki for FAQ " Put your non-Plugin stuff after this line if &term == 'xterm-256color' set termguicolors endif set guioptions-=mTrLb set guioptions+=c colorscheme customred256 set updatetime=30000 set backupdir=~/.vimtmp set directory=~/.vimtmp set clipboard=unnamedplus " ignore case when searching set ignorecase " unless search contains uppercase set smartcase set wildmenu set wildmode=longest:full,full " allow hidden buffers set hidden set background=dark " set number set number relativenumber set hlsearch " highlight searches set foldcolumn=1 " key mappings let g:mapleader = "\" " replace current word with last yanked/deleted text nnoremap rr "_diwP " replace current word with last yanked text nnoremap ry diw"0P " jk acts as escape in insert inoremap jk nnoremap co :!clear; " netrw nnoremap ex :Ex nnoremap ee :e . nnoremap qq :Rex " better window navigaton nnoremap h nnoremap l nnoremap k nnoremap j nnoremap j :resize -5 nnoremap k :resize +5 nnoremap l :vertical resize +5 nnoremap h :verkical resize -5 nnoremap = = "location list and quickfix mappings nnoremap ll :botright lwindow nnoremap lp :lprev nnoremap ln :lnext nnoremap lc :lclose nnoremap llh :lhistory nnoremap llp :lolder nnoremap lln :lnewer nnoremap qf :botright cwindow nnoremap qp :cprev nnoremap qn :cnext nnoremap qc :cclose nnoremap qfh :chistory nnoremap qfp :colder nnoremap qfn :cnewer nnoremap nh :noh " quick grep of visual selection vnoremap gr y:grep! -R " . " open quickfix window of TODOs nnoremap td :grep! -R '// *TODO' .:botright cwindow:echo len(getqflist()) 'TODOs' " brace/quotes completion inoremap {{ {} inoremap { {}O inoremap {; {};O inoremap }} {{}} inoremap (( () inoremap (; (); inoremap [[ [] inoremap [ []O inoremap "" "" inoremap "; ""; inoremap '' '' inoremap '; ''; inoremap ;; ; nnoremap nn :set invrelativenumber nnoremap hl :nohlsearch " devdocs mapping nnoremap dd :DD " abbreviations iabbrev adn and iabbrev waht what iabbrev tehn then set iskeyword+=- set scrolloff=10 " scroll offset set showcmd " show command in bottom bar set incsearch " statusline format set statusline=%#LineNr# set statusline+=\ \ \ set statusline+=%#StatusLineFile# set statusline+=\ " filename set statusline+=%#StatusLineMod# set statusline+=%M " modified flag set statusline+=%* set statusline+=%#StatusLineFile# set statusline+=\ %t\ \ " filename set statusline+=%* set statusline+=%q " quickfix/location list flag set statusline+=%h " help file flag set statusline+=%w " preview window flag set statusline+=%r " read only flag set statusline+=%#StatusLineNC# set statusline+=\ set statusline+=%* set statusline+=\ %{strlen(&ft)?&ft:'none'}, " filetype set statusline+=%{strlen(&fenc)?&fenc:&enc}, " encoding set statusline+=%{&fileformat}\ set statusline+=%#StatusLineNC# set statusline+=\ set statusline+=%* set statusline+=\ %{&spelllang}\ set statusline+=%#StatusLineNC# " set statusline+=\ " set statusline+=%* set statusline+=%= " left/right separator set statusline+=%#StatusLineNC# set statusline+=\ set statusline+=%* set statusline+=\ \"%{v:register}\"\ set statusline+=%#StatusLineNC# set statusline+=\ set statusline+=%* set statusline+=\ %{ObsessionStatus(fnamemodify(v:this_session,':t'),'---')}\ " session status set statusline+=%#InterfaceH2# set statusline+=\ %{LinterStatus()} set statusline+=%#InterfaceNormalDark# set statusline+=\ %P\ " percentage through file set statusline+=%* set laststatus=2 set foldmethod=manual set autoindent set breakindent set showbreak=↳ syntax on set mouse=a set listchars=eol:¬,tab:->,trail:~,extends:>,precedes:<,space:· " rewrapping set to 80 set textwidth=180 " disable automatic wrapping set formatoptions=cq " disable wrapping based on terminal size set wrapmargin=0 set t_Sf=[3%p1%dm " foreground colour set t_Sb=[4%p1%dm " background coloru nnoremap :set invpaste paste? set pastetoggle= set showmode " persistent folds augroup AutoSaveFolds autocmd! autocmd BufWritePost *.* mkview autocmd BufWinEnter *.* silent loadview augroup END " set custom syntax highlighting augroup syntaxhighlighting autocmd BufNewFile,BufRead *.html set syntax=html_custom autocmd BufNewFile,BufRead *.php set syntax=php_custom autocmd BufNewFile,BufRead *.vue set syntax=vue_custom autocmd BufNewFile,BufRead *.vue syntax sync fromstart autocmd BufNewFile,BufRead *.js set syntax=pangloss_javascript_custom augroup END " fix higlight problems such as vertical-align etc augroup VimCSS3Syntax autocmd! autocmd FileType css setlocal iskeyword+=- augroup END " Show trailing whitepace and spaces before a tab: augroup whitespaceerrors autocmd Syntax * syn match ExtraWhitespace /\s\+$\| \+\ze\t/ containedin=ALL augroup END " autocommands " automatically reload if color scheme file written augroup coloreload au! au BufWritePost customred256.vim so $MYVIMRC augroup end augroup linenumbering autocmd InsertEnter * :set norelativenumber autocmd InsertLeave * :set number relativenumber autocmd WinEnter * :set number relativenumber autocmd WinLeave * set norelativenumber augroup END augroup colorcolumns autocmd WinEnter * set colorcolumn=80 autocmd WinLeave * set colorcolumn=0 augroup END " Automatically reload .vimrc if chanaged augroup myvimrc au! au BufWritePost .vimrc,_vimrc,vimrc,.gvimrc,_gvimrc,gvimrc so $MYVIMRC | if has('gui_running') | so $MYGVIMRC | endif augroup END " persisitent undo file set undodir=/home/ray/.vim/undodir set undofile " Use the silver searcher ag command instead of grep if executable('ag') " Use ag over grep set grepprg=ag\ --nogroup\ --nocolor " Use ag in CtrlP for listing files. Lightning fast and respects .gitignore let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' " ag is fast enough that CtrlP doesn't need to cache let g:ctrlp_use_caching = 0 endif " Functions " get name of syntax item function! SyntaxItem() return synIDattr(synID(line('.'),col('.'),1),'name') . ' -> ' . synIDattr(synIDtrans(synID(line('.'),col('.'),1)), 'name' ) endfunction nnoremap p :echom SyntaxItem() " plugin stuff " youcompleteme let g:ycm_collect_identifiers_from_tags_files = 1 " emmet let g:user_emmet_leader_key='' " taboo.vim set sessionoptions+=tabpages,globals let g:taboo_tab_format = ' %f%m ' let g:taboo_renamed_tab_format = ' %l%m ' let g:taboo_modified_tab_flag = '+' " vue-vim " disable preprocessor checking for vue files - increases speed let g:vue_disable_pre_processors=1 " ALE nnoremap ne :lnext nnoremap pe :lprev let g:ale_sign_error = '>>' let g:ale_sign_warning = '--' let g:ale_sign_column_always = 1 let g:ale_linters = {'scss': ['stylelint'], 'javascript': ['eslint'], 'php':['php'], 'html':['htmlhint']} let g:ale_html_htmlhint_options = '-c ~/.htmlhintrc --format=unix' " let g:ale_javascript_eslint_options = '-c ~/.config/eslint/.eslintrc.js' let g:ale_fixers = {'javascript': ['eslint']} " function! ale#handlers#eslint#FindConfig(buffer) " return '/home/ray/.config/eslint/.eslintrc.js' " endfunction function! LinterStatus() abort let l:counts = ale#statusline#Count(bufnr('')) let l:all_errors = l:counts.error + l:counts.style_error let l:all_non_errors = l:counts.total - l:all_errors return l:counts.total == 0 ? 'OK' : printf('%dW %dE', l:all_non_errors, l:all_errors) endfunction "nmap (ale_previous_wrap) "nmap (ale_next_wrap) " ultisnips let g:UltiSnipsSnippetsDir="~/.vim/UltiSnips" " Trigger configuration. Do not use if you use https://github.com/Valloric/YouCompleteMe. let g:UltiSnipsExpandTrigger='' let g:UltiSnipsJumpForwardTrigger='' let g:UltiSnipsJumpBackwardTrigger='' let g:UltiSnipsEditSplit='horizontal' " Netrw let g:netrw_liststyle=3 " NERDtree " nnoremap :NERDTreeFocus " nnoremap nt :NERDTreeFocus " nnoremap nf :NERDTreeFind " " allow closing if only window open is a NERDTree " augroup nerdtreewindow " autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif " augroup END " let NERDTreeQuitOnOpen = 1 " TagBar nnoremap tb :TagbarOpen fj let g:tagbar_autoclose = 1 " tagbar css/scss thingy nnoremap ] :tag /[.#@]=expand('') " bufexploer nnoremap o :BufExplorer " undotree nnoremap ut :UndotreeToggle " vim-project-tags source ~/.vim/bundle/vim-elhiv/elhiv.vim " override function so we can have custom tag names for built in languages " function! project_tags#add_built_in_language_support() " call project_tags#add_language('.jstags', 'js') " call project_tags#add_language('.vimtags', 'vim') " call project_tags#add_language('.phptags', 'php') " endfunction " above function causes error (maybe autoloading problem when no " tags are being used or whatever?) " see if following three lines work instead call project_tags#add_language('.jstags', 'js') call project_tags#add_language('.vimtags', 'vim') call project_tags#add_language('.phptags', 'php') call project_tags#add_language('.csstags','css') call project_tags#add_language('.scsstags','scss') let g:tagbar_type_css = { \ 'ctagstype' : 'css', \ 'kinds' : [ \ 'c:classes', \ 'i:ids', \ 't:tags', \ 'm:medias' \ ] \} let g:tagbar_type_scss = { \ 'ctagstype' : 'scss', \ 'kinds' : [ \ 'v:variables', \ 'c:classes', \ 'i:ids', \ 't:tags', \ 'd:medias', \ 'm:mixins', \ 'f:functions' \ ] \} let g:tagbar_type_vue = { \ 'ctagstype' : 'vue', \ 'kinds' : [ \ 'o:objects', \ 'f:functions', \ 'a:array', \ 's:string', \ 'b:boolean', \ 'n:number', \ 'v:variable' \ ] \ } if !exists('*RangerExplorer') function RangerExplorer() exec 'silent !ranger --choosefile=/tmp/vim_ranger_current_file ' . expand('%:p:h') if filereadable('/tmp/vim_ranger_current_file') exec 'edit ' . system('cat /tmp/vim_ranger_current_file') call system('rm /tmp/vim_ranger_current_file') endif redraw! endfun map ra :call RangerExplorer() endif " devdocs DD " https://gist.github.com/romainl/8d3b73428b4366f75a19be2dad2f0987#file-devdocs-vim function! s:Get_env() abort if has('win64') || has('win32') || has('win16') return 'WINDOWS' else return toupper(substitute(system('uname'), '\n', '', '')) endif endfunction " What command to use on what system let s:cmds = {"DARWIN": "open", "LINUX": "qutebrowser", "WINDOWS": "start"} " Build the URL stub let s:stub = s:cmds[Get_env()] . " 'http://devdocs.io/?q=" command! -nargs=* DD silent! call system(len(split(, ' ')) == 0 ? \ s:stub . &ft . ' ' . expand('') . "'" : len(split(, ' ')) == 1 ? \ s:stub . &ft . ' ' . . "'" : s:stub . . "'") " ze end