vimrc updates
[dotfiles.git] / .vimrc
1 "          _                    
2 "   __   _(_)_ __ ___  _ __ ___ 
3 "   \ \ / / | '_ ` _ \| '__/ __|
4 "    \ V /| | | | | | | | | (__ 
5 "   (_)_/ |_|_| |_| |_|_|  \___|
6 "                            
7
8 " basics
9 syntax on
10 set number
11 set relativenumber
12 set incsearch
13 set encoding=utf-8
14 set tabstop=4
15 set shiftwidth=4
16 set expandtab
17 set ignorecase
18 set smartcase
19 set hidden
20
21 " cursors depending on mode
22 let &t_EI = "\<Esc>[2 q" "normal mode
23 let &t_SI = "\<Esc>[6 q" "insert mode
24 let &t_SR = "\<Esc>[4 q" "replace mode
25
26 " conceal
27 set conceallevel=2
28
29 " Bindings
30 let mapleader = ' '
31
32 " netrw stuff
33 map <leader>f :Ex<cr>
34 map <leader>l :bn<cr>
35 map <leader>h :bp<cr>
36 map <leader>d :bd<cr>
37
38 let g:netrw_liststyle = 3
39 let g:netrw_banner = 0
40 let g:netrw_winsize = 25
41
42 " spell check
43 setlocal spell
44 set spelllang=en_us
45 set spellcapcheck=
46
47 " accept first spell check fix
48 map <leader>z 1z=<cr>
49
50 " folding
51 set foldmethod=manual
52 set foldnestmax=10
53 set nofoldenable
54 set foldlevel=2
55
56 " View whitespace
57 map <leader>s :set list!<cr>
58 set listchars=tab:▸\ ,space:·,eol:¬
59
60 " reload vimrc
61 map <leader>r :source ~/.vimrc<cr>:echo "vimrc reloaded"<cr>
62
63 " write with sudo
64 cmap w!! w !sudo tee > /dev/null %
65
66 " reload current file
67 map <leader>e :e<cr>:echo "current file reloaded"<cr>
68 map <leader>E :e!<cr>:echo "current file force reloaded"<cr>
69
70 " highlighting (will get rid of this sometime prob)
71 au BufRead,BufNewFile *.svelte set filetype=svelte
72 au! Syntax svelte source ~/.vim/syntax/svelte.vim
73
74 " statusline
75 function! StatusModeColor()
76     if (mode() =~# '\v(n|no)')
77         hi StatusLine cterm=None gui=None ctermfg=black ctermbg=Yellow
78     elseif (mode() =~# '\v(v|V|\16)')
79         hi StatusLine cterm=None gui=None ctermfg=black ctermbg=Red
80     elseif (mode() ==# 'i')
81         hi StatusLine cterm=None gui=None ctermfg=black ctermbg=LightBlue
82     elseif (mode() ==# 'c') 
83         hi StatusLine cterm=None gui=None ctermfg=black ctermbg=Green
84     else
85         hi StatusLine cterm=None gui=None ctermfg=black ctermbg=DarkGrey
86     endif
87
88     return ''
89 endfunction
90
91 function! StatusModifiedColor()
92     if getbufinfo(1)[0].changed
93         hi User1 cterm=None gui=None ctermfg=Black ctermbg=Magenta
94     else
95         hi User1 cterm=None gui=None ctermfg=White ctermbg=Black
96     endif
97
98     return ''
99 endfunction
100
101 function! BufCount()
102     return printf("%d/%d", bufnr("%"), len(getbufinfo({'buflisted':1})))
103 endfunction
104
105 call StatusModeColor()
106 call StatusModifiedColor()
107 autocmd BufWritePost <buffer> call StatusModifiedColor()
108
109 set laststatus=2
110 set statusline=
111 set statusline+=%{StatusModeColor()}
112 set statusline+=%{StatusModifiedColor()}
113 set statusline+=%1*\ | 
114 set statusline+=%0*\ vim\ \[%{mode()}\]
115 set statusline+=\[%{BufCount()}\]
116 set statusline+=\ %1*\ %{expand('%:~:.')}\ %m
117 set statusline+=%=
118 set statusline+=%y
119 set statusline+=\ %0*
120 set statusline+=\ %r\[%{v:register}\]
121 set statusline+=\ %l/%L:%c\ |
122 set statusline+=%1*\ |
123
124 " Tab line
125 hi TabLineSel   cterm=Bold ctermfg=Yellow
126 hi TabLine      cterm=None ctermfg=Grey ctermbg=Black
127 hi TabLineFill  cterm=None ctermbg=Black
128
129 " Templates
130 augroup templates
131     autocmd BufNewFile *.tex 0r ~/.vim/templates/skeleton.tex
132     autocmd BufNewFile *.html 0r ~/.vim/templates/skeleton.html
133     autocmd BufNewFile *.rkt 0r ~/.vim/templates/skeleton.rkt
134     autocmd BufNewFile *.xml 0r ~/.vim/templates/skeleton.xml
135 augroup END
136
137 " vim plug
138 " this blob auto installs vim plug if it isnt already
139 fun! s:VimPlugSetup()
140     if empty(glob('~/.vim/autoload/plug.vim'))
141         silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
142         autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
143     else
144         echo 'VimPlug is already installed'
145     endif
146 endfun
147 command PlugSetup :call s:VimPlugSetup()
148
149 " template stuff
150 call plug#begin('~/.vim/plugged')
151
152 Plug 'sirver/ultisnips'
153 Plug 'tpope/vim-commentary'
154 Plug 'ap/vim-buftabline'
155 Plug 'lervag/vimtex', { 'for': 'tex' }
156 Plug 'PietroPate/vim-tex-conceal', { 'for': 'tex' }
157 " Plug 'jiangmiao/auto-pairs'
158 " Plug 'rlue/vim-barbaric'
159 " Plug 'junegunn/fzf'
160
161 call plug#end()
162
163 " leader for plugins
164 let maplocalleader = "\\"
165
166 " Ultisnips
167 let g:UltiSnipsExpandTrigger = '<tab>'
168 let g:UltiSnipsJumpForwardTrigger = '<tab>'
169 let g:UltiSnipsJumpBackwardTrigger = '<s-tab>'
170 let g:UltiSnipsSnippetDirectories=["UltiSnips", "mysnippets"]
171
172 map <localleader>sr :call UltiSnips#RefreshSnippets()<cr>:echo "Refreshed Snippets"<cr>
173
174 " latex stuff
175 " fun! LatexCompile()
176 "     echo 'compiling latex'
177 " endfun
178 " augroup latex
179 "     autocmd!
180 "     autocmd BufWritePost *.tex :call LatexCompile()
181 " augroup END
182
183 " Vimtex
184 let g:tex_flavor='latex'
185 let g:vimtex_view_method='zathura'
186 let g:vimtex_quickfix_mode=0
187 let g:tex_conceal='abdmgs'
188
189 let g:vimtex_compiler_latexmk = {
190     \'build_dir': '/home/pinosaur/.cache/latexaux/',
191 \}
192     " \'options': [
193     " \   '-shell-escape',
194     " \],
195
196 " vim-barbaric
197 " let g:barbaric_ime = 'ibus'
198 " set ttimeoutlen=0
199
200 " buftabline
201 let g:buftabline_show = 1
202
203 " fzf
204 " let g:fzf_layout = { 'down': '40%' }
205 " let g:fzf_layout = { 'window': '-tabnew' }
206
207 " Run after plugins
208 autocmd FileType * set formatoptions-=o
209
210 " colors
211 " based off https://github.com/jeffkreeftmeijer/vim-dim/blob/main/colors/default-light.vim
212 hi SpecialKey     ctermfg=4
213 hi TermCursor     cterm=reverse
214 hi NonText        ctermfg=12
215 hi Directory      ctermfg=4
216 hi ErrorMsg       ctermfg=15 ctermbg=1
217 hi IncSearch      cterm=reverse
218 hi MoreMsg        ctermfg=2
219 hi ModeMsg        cterm=bold
220 hi Question       ctermfg=2
221 hi Title          ctermfg=5
222 hi WarningMsg     ctermfg=1
223 hi WildMenu       ctermfg=0 ctermbg=11
224 hi Conceal        ctermbg=0
225 hi SpellBad       ctermfg=9 ctermbg=0 cterm=underline
226 hi SpellRare      ctermbg=13 ctermbg=0 cterm=underline
227 hi SpellLocal     ctermfg=14 ctermbg=0 cterm=underline
228 hi PmenuSbar      ctermbg=8
229 hi PmenuThumb     ctermbg=0
230 hi CursorColumn   ctermbg=7
231 hi CursorLine     cterm=underline
232 hi MatchParen     cterm=NONE ctermfg=0 ctermbg=14
233 hi Constant       ctermfg=1
234 hi Special        ctermfg=5
235 hi Identifier     cterm=NONE ctermfg=6
236 hi Statement      ctermfg=3
237 hi PreProc        ctermfg=5
238 hi Type           ctermfg=2
239 hi Underlined     cterm=underline ctermfg=5
240 hi Ignore         ctermfg=15
241 hi Error          ctermfg=15 ctermbg=9
242 hi Todo           ctermfg=0 ctermbg=11
243 hi Comment        ctermfg=DarkGrey
244 hi lineNr         ctermfg=DarkGrey
245 hi Folded         ctermfg=0
246 hi Pmenu          ctermfg=0 ctermbg=7
247 hi PmenuSel       ctermfg=0 ctermbg=6