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' " vim-mucomplete " https://github.com/lifepillar/vim-mucomplete Plugin 'lifepillar/vim-mucomplete' " 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' " 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 " let &t_8f = "\[38;2;%lu;%lu;%lum" " let &t_8b = "\[48;2;%lu;%lu;%lum" " set termguicolors colorscheme customred256 set backupdir=~/.vimtmp set directory=~/.vimtmp " tags file set tags=tags;/ " 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 = "\" " jk acts as escape in insert inoremap jk nnoremap co :!clear; " disable arrow keys "noremap "noremap "noremap "noremap " better window navigaton nnoremap h nnoremap l nnoremap k nnoremap j " better window resizing " need to use j because urxvt sends the character prefixed with Escape " instead of setting the eighth bit " see https://unix.stackexchange.com/a/199705 nnoremap j :resize +5 nnoremap k :resize -5 nnoremap l :vertical resize +5 nnoremap h :vertical resize -5 "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 ""; ""; inoremap '' '' inoremap ''; ''; inoremap [[ [] inoremap [[[ []O inoremap ;; ; nnoremap nn :set invrelativenumber nnoremap hl :nohlsearch " 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=\ %F\ " filename and path "set statusline+=%{SyntaxItem()} set statusline+=%h " help file flag set statusline+=%w " preview window flag set statusline+=%m " modified flag set statusline+=%r " read only flag set statusline+=\ set statusline+=[%{strlen(&ft)?&ft:'none'}, " filetype set statusline+=%{strlen(&fenc)?&fenc:&enc}, " encoding set statusline+=%{&fileformat}]\ " file format set statusline+=%{&spelllang}\ \ \ \ \ " Spell language set statusline+=%= " left/right separator set statusline+=[\ %{v:register}\ ]\ " active register set statusline+=[%{ObsessionStatus(fnamemodify(v:this_session,':t'),'---')}]\ \ " session status set statusline+=%#InterfaceH2# "set statusline+=\ %{SyntasticStatuslineFlag()} set statusline+=\ %{LinterStatus()} " set statusline+=%#InterfaceNormal# " set statusline+=\ %l\ set statusline+=%#InterfaceNormalDark# set statusline+=\ %P " percentage through file set statusline+=%* " always show 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 " 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 " 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 " MUcomplete set omnifunc=syntaxcomplete#Complete set completeopt+=menuone let g:mucomplete#enable_auto_at_startup = 1 inoremap mucomplete#popup_exit("\") inoremap mucomplete#popup_exit("\") inoremap mucomplete#popup_exit("\") set completeopt+=noselect set completeopt+=noinsert set complete-=i set complete-=t let g:mucomplete#chains = { 'default' : ['omni', 'tags', 'ulti', 'c-p', 'incl', 'file'] } " let g:mucomplete#popup_direction = { 'path' : 1, 'c-p': 1, 'tags': 1, 'incl': 1 } set shortmess+=c " Shut off completion messages set belloff+=ctrlg " If Vim beeps during completion " call add(g:mucomplete#chains['default'], 'ulti') " 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 " Trigger configuration. Do not use if you use https://github.com/Valloric/YouCompleteMe. let g:UltiSnipsExpandTrigger='' let g:UltiSnipsJumpForwardTrigger='' let g:UltiSnipsJumpBackwardTrigger='' " NERDtree nnoremap :NERDTreeFocus nnoremap nt :NERDTreeFocus " 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' \ ] \} 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 " ze end