Created
June 3, 2019 22:39
-
-
Save meskarune/3dfdd7cac1547ac49ad5f4159bd67560 to your computer and use it in GitHub Desktop.
My Vim configuration
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Vim defaults rather than vi ones. Keep at top. | |
set nocompatible | |
" set Vim-specific sequences for RGB colors - needed with tmux | |
if &term =~# 'tmux\|tmux-256color' | |
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" | |
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" | |
endif | |
" Colors | |
" True color support | |
if $TERM =~# 'xterm-termite\|xterm-kitty' | |
set termguicolors | |
endif | |
" 256 color support for terminals that support it | |
if $TERM =~# '*256color' | |
set t_Co=256 | |
endif | |
if &t_Co == 8 && $TERM !~# '^linux\|^Eterm' | |
set t_Co=16 | |
endif | |
" Turn on code highlighting┐ | |
syntax on | |
set background=dark | |
if &term=~'linux' | |
colorscheme midnight | |
else | |
colorscheme jellybeans | |
endif | |
" Vundle vim plugin manager | |
" Brief help | |
" :PluginList - list configured plugins | |
" :PluginInstall(!) - install (update) plugins | |
" :PluginSearch(!) foo - search (or refresh cache first) for foo | |
" :PluginClean(!) - confirm (or auto-approve) removal of unused plugins | |
filetype off | |
set rtp+=~/.vim/bundle/Vundle.vim | |
call vundle#begin() | |
Plugin 'gmarik/Vundle.vim' | |
Plugin 'nathanaelkane/vim-indent-guides' | |
Plugin 'gorodinskiy/vim-coloresque' | |
Plugin 'SirVer/ultisnips' | |
Plugin 'honza/vim-snippets' | |
Plugin 'vim-syntastic/syntastic' | |
call vundle#end() | |
" Enable filetype-specific settings. | |
filetype plugin indent on | |
"Turn off annoying bell | |
set noerrorbells visualbell t_vb= | |
" Turn on title | |
set title | |
" Turn on line numbers | |
set number relativenumber | |
augroup numbertoggle | |
autocmd! | |
autocmd BufEnter,FocusGained,InsertLeave * set relativenumber | |
autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber | |
augroup END | |
" Persistent undo and controlling swap files | |
if has('persistent_undo') | |
set undodir=$HOME/.vim/undo | |
set undofile | |
set undolevels=1000 | |
set undoreload=10000 | |
endif | |
set backupdir=$HOME/.vim/backups | |
set dir=$HOME/.vim/swap | |
" Turn off line wrapping | |
set nowrap | |
" Indentation settings, expand tabs to spaces | |
set autoindent | |
set copyindent | |
autocmd FileType * set tabstop=4 | set shiftwidth=4 | set softtabstop=4 | |
autocmd FileType html,php,css,javascript set tabstop=2 | set shiftwidth=2 | set softtabstop=2 | |
set expandtab | |
" Text formating | |
set textwidth=80 | |
set colorcolumn=80 | |
highlight ColorColumn guibg=#1c1c1c ctermbg=234 | |
set wrapscan | |
" Search lower and upper case | |
set incsearch | |
set infercase | |
set smartcase | |
set hlsearch | |
set backspace=2 | |
set showmatch | |
set formatoptions=1 | |
" Vim command completion | |
set wildmode=longest,list,full | |
set wildmenu | |
" Set encoding | |
set encoding=utf-8 | |
" Mouse support | |
set mouse=a | |
" Code folding | |
set foldenable | |
set foldlevelstart=4 | |
set foldnestmax=12 | |
set foldmethod=indent | |
" Highlight current line | |
set cursorline | |
hi CursorLine term=none guibg=#1c1c1c ctermbg=234 | |
" Allow editing past last character | |
set virtualedit=onemore | |
" Keep 4 lines above/below and left/right of cursor when scrolling | |
set scrolloff=4 | |
set sidescrolloff=4 | |
" Change leader key to , (default is \) | |
let mapleader = "," | |
" Write a readonly file using sudo | |
cmap w!! %!sudo tee > /dev/null % | |
" Toggle Paste Mode | |
set pastetoggle=<F2> | |
" Toggle whitespace characters | |
set list listchars=tab:»─,nbsp:·,eol:¬,trail:§,extends:»,precedes:« | |
map <leader>L :set list!<CR> | |
" Toggle spell check with F5 | |
map <F5> :setlocal spell! spelllang=en_us<CR> | |
" Show and unshow numbers | |
nnoremap <leader>n :set nonumber norelativenumber<CR> | |
nnoremap <leader>N :set number relativenumber<CR> | |
" Turn off search highlight until next search | |
nnoremap <silent><expr> <Leader>h (&hls && v:hlsearch ? ':nohls' : ':set hls')."\n" | |
" Remove all spaces at eol | |
nnoremap <leader>s :%s/\s\+$//<cr>:let @/=''<CR> | |
" Commenting/Uncommenting blocks of code. | |
autocmd FileType c,cpp,java,scala let b:comment_leader = '// ' | |
autocmd FileType sh,ruby,python,conf,fstab let b:comment_leader = '# ' | |
autocmd FileType tex let b:comment_leader = '% ' | |
autocmd FileType mail let b:comment_leader = '> ' | |
autocmd FileType vim let b:comment_leader = '" ' | |
noremap <silent> <leader>cc :<C-B>silent <C-E>s/^/<C-R>=escape(b:comment_leader,'\/')<CR>/<CR>:nohlsearch<CR> | |
noremap <silent> <leader>cu :<C-B>silent <C-E>s/^\V<C-R>=escape(b:comment_leader,'\/')<CR>//e<CR>:nohlsearch<CR> | |
" Highlight IP addresses | |
syn match ipaddr /\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)/ | |
hi link ipaddr Identifier | |
" Jellybeans colorscheme settings | |
let g:jellybeans_use_term_italics = 1 | |
let g:jellybeans_use_gui_italics =1 | |
let g:jellybeans_use_term_bold = 1 | |
let g:jellybeans_use_term_background_color = 1 | |
" Gvim settings | |
set guifont=Fira\ Mono\ 12 | |
set guioptions-=r "no scrollbar | |
set guiheadroom=0 | |
set guioptions-=T "no toolbar | |
set guioptions-=m "no menubar | |
" Change the cursor style on mode change - terminal | |
" Norm=block, ins=ibeam, rep=underline | |
if &term != 'linux' | |
let &t_SI = "\<Esc>]12;white\x7\<Esc>[6 q" | |
let &t_SR = "\<Esc>]12;red\x7\<Esc>[4 q" | |
let &t_EI = "\<Esc>]12;white\x7\<Esc>[2 q" | |
autocmd VimLeave * silent !echo -ne "\033]112\007" | |
endif | |
" Change the cursor color and style on mode change - Gvim only | |
set gcr=a:block | |
set gcr+=o:hor50-Cursor | |
set gcr+=n:Cursor | |
set gcr+=i-ci-sm:ver10-InsertCursor | |
set gcr+=r-cr:ReplaceCursor-hor20 | |
set gcr+=c:CommandCursor | |
set gcr+=v-ve:VisualCursor | |
set gcr+=a:blinkon0 | |
hi InsertCursor guifg=black guibg=#D90A29 | |
hi VisualCursor guifg=black guibg=#d8ad4c | |
hi ReplaceCursor guifg=black guibg=#D90A29 | |
hi CommandCursor guifg=black guibg=#71b9f8 | |
" ~~~ PLUGIN SETTINGS ~~~ | |
" Options for vim indent guides plugin | |
let g:indent_guides_enable_on_vim_startup = 1 | |
let g:indent_guides_start_level = 1 | |
let g:indent_guides_auto_colors = 0 | |
augroup IndentGuide | |
autocmd! | |
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd guibg=#1c1c1c ctermbg=234 | |
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=#121212 ctermbg=233 | |
augroup end | |
" Options for Syntastic - only run when called | |
let g:syntastic_always_populate_loc_list = 1 | |
let g:syntastic_auto_loc_list = 1 | |
let g:syntastic_check_on_open = 0 | |
let g:syntastic_check_on_wq = 0 | |
let g:syntastic_quiet_messages = { "type": "style" } | |
nnoremap <leader>sc :SyntasticCheck<CR> | |
"set statusline+=%{SyntasticStatuslineFlag()} | |
" Options for Ultisnips | |
let g:UltiSnipsExpandTrigger="<tab>" | |
let g:UltiSnipsListSnippets="<c-l>" | |
let g:UltiSnipsJumpForwardTrigger="<c-j>" | |
let g:UltiSnipsJumpBackwardTrigger="<c-k>" | |
" FZF bindings | |
noremap <c-f><c-b> :Buffers<CR> | |
noremap <c-f><c-o> :Files<CR> | |
noremap <c-f><c-g> :Ag<SPACE> | |
noremap <c-f><c-i> :GFiles<CR> | |
" Status line | |
" default: set statusline=%f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%) | |
" Warning for trailing spaces | |
function! StatuslineTrailingSpaceWarning() | |
if !exists("b:statusline_trailing_space_warning") | |
if &readonly || !&modifiable | |
let b:statusline_trailing_space_warning = '' | |
return b:statusline_trailing_space_warning | |
endif | |
let s:tsp = search('\s\+$', 'nw') | |
if s:tsp != 0 | |
let b:statusline_trailing_space_warning = printf('§[%d] ', s:tsp) | |
else | |
let b:statusline_trailing_space_warning = '' | |
endif | |
endif | |
return b:statusline_trailing_space_warning | |
endfunction | |
" Toggle word count in the panel if you hit <leader>wc | |
" Update the word count if you hit <leader>wu, display in statusline | |
" Add %{g:word_count} to statusline to see wordcount. | |
" set statusline+=%{g:word_count} | |
let g:word_count = '' | |
function! WordCount(...) | |
if a:0 < 1 | |
let s:update = 0 | |
else | |
let s:update = 1 | |
endif | |
if g:word_count == '' || s:update == 1 | |
let position = getpos(".") | |
exe ":silent normal g\<c-g>" | |
let stat = v:statusmsg | |
let g:word_count = 0 | |
if stat != '--No lines in buffer--' | |
let s:words = str2nr(split(v:statusmsg)[11]) | |
let g:word_count = printf(' Words [%d] ', s:words) | |
else | |
let g:word_count = 'Words [none]' | |
end | |
call setpos('.', position) | |
return g:word_count | |
else | |
let g:word_count = '' | |
return g:word_count | |
end | |
endfunction | |
nnoremap <leader>wc :call WordCount()<CR> | |
nnoremap <leader>wu :call WordCount('update')<CR> | |
" Status Line Custom Mode | |
let g:mode_hl = { | |
\ 'n' : ['Normal', 'Normal'], 'no' : ['Normal', 'N·Operator Pending'], | |
\ 'v' : ['Visual', 'Visual'], 'V' : ['Visual', 'V·Line'], | |
\ "\<c-v>" : ['Visual', 'V·Block'], 's' : ['Visual', 'Select'], | |
\ 'S' : ['Visual', 'S·Line'], "\<c-s>" : ['Visual', 'S·Block'], | |
\ 'i' : ['Insert', 'Insert'], 'ic' : ['Insert', 'I·Compl'], | |
\ 'ix' : ['Insert', 'I·X Compl'], 'R' : ['Replace', 'Replace'], | |
\ 'Rc' : ['Replace', 'R·Compl'], 'Rv' : ['Replace', 'R·Virtual'], | |
\ 'Rx' : ['Replace', 'R·X Compl'], 'c' : ['Command','Command'], | |
\ 'cv' : ['Term','Vim Ex'], 'ce' : ['Term','Ex'], | |
\ 'r' : ['Prompt','Prompt'], 'rm' : ['Prompt','More'], | |
\ 'r?' : ['Prompt','Confirm'], '!' : ['Term','Shell'], | |
\ 't' : ['Term','Terminal']} | |
let s:ins = {'i':'i', 'r':'R','v':'Rv'} | |
" Colors are [gui , cterm] | |
" norm=blue, ins=Green, vis=yellow, rep=red, com=cyan, prom=Magenta, term=white | |
let s:pallet = { | |
\ 'Normal' : ['#597bc5', '4'], 'Insert' : ['#99ad6a', '2'], | |
\ 'Visual' : ['#d8ad4c', '3'], 'Replace' : ['#cf6a4c', '1'], | |
\ 'Command' : ['#71b9f8', '14'], 'Prompt' : ['#a037b0', '5'], | |
\ 'Term' : ['#adadad', '7']} | |
let s:modecache = '' | |
function! ChangeColor(curmode) | |
let s:hlmode = g:mode_hl[a:curmode][0] | |
if s:modecache == s:hlmode | |
return '' | |
endif | |
let s:modecache = s:hlmode | |
let [s:color1, s:color2] = s:pallet[s:hlmode] | |
if &term =~ 'linux' | |
let s:mode_color = printf(' guifg=#1c1c1c guibg=%s ctermfg=black ctermbg=%s', s:color1, s:color2) | |
let s:accent_color = printf(' guifg=%s guibg=#1c1c1c ctermfg=%s ctermbg=black', s:color1, s:color2) | |
else | |
let s:mode_color = printf(' gui=bold guifg=#1c1c1c guibg=%s cterm=bold ctermfg=234 ctermbg=%s', s:color1, s:color2) | |
let s:accent_color = printf(' guifg=%s guibg=#1c1c1c ctermfg=%s ctermbg=234', s:color1, s:color2) | |
endif | |
execute 'highlight StlMode'.s:mode_color | |
execute 'highlight StlText'.s:accent_color | |
return '' | |
endfunction | |
function! SetCustomColors() | |
if &term=~'linux' | |
execute 'hi statusline ctermfg=black ctermbg=white' | |
execute 'hi StlText ctermfg=4 ctermbg=black' | |
execute 'hi statuslinenc ctermfg=white ctermbg=black' | |
execute 'hi Visual cterm=reverse' | |
execute 'hi User1 ctermfg=white ctermbg=black' | |
execute 'hi User2 ctermfg=red ctermbg=black' | |
execute 'hi User3 ctermfg=yellow ctermbg=black' | |
execute 'hi User4 ctermfg=white ctermbg=black' | |
else | |
execute 'hi statusline gui=bold ctermfg=234 ctermbg=7 guibg=#adadad guifg=#1c1c1c' | |
execute 'hi StlText guifg=#597bc5 guibg=#1c1c1c ctermfg=4 ctermbg=234' | |
execute 'hi statuslinenc gui=bold guifg=#adadad guibg=#1c1c1c ctermfg=007 ctermbg=234' | |
execute 'hi Visual guifg=#1c1c1c guibg=#d8ad4c ctermfg=0 ctermbg=3' | |
execute 'hi User1 ctermfg=007 ctermbg=237 guibg=#3b3b3b guifg=#adadad' | |
execute 'hi User2 ctermfg=001 ctermbg=234 guibg=#1c1c1c guifg=#cf6a4c' | |
execute 'hi User3 ctermfg=011 ctermbg=234 guibg=#1c1c1c guifg=#d8ad4c' | |
execute 'hi User4 guifg=#adadad guibg=#1c1c1c ctermfg=007 ctermbg=234' | |
endif | |
endfunction | |
augroup Statusline | |
autocmd! | |
autocmd CursorHold,CursorHoldI,InsertLeave,BufWritePost * unlet! b:statusline_trailing_space_warning | |
autocmd InsertEnter,InsertChange * call ChangeColor(s:ins[v:insertmode]) | |
autocmd InsertLeave,VimEnter,Colorscheme * call ChangeColor(mode(1)) | |
autocmd VimEnter,ColorScheme * call SetCustomColors() | |
autocmd VimEnter,WinEnter,BufWinEnter,CmdwinEnter,Colorscheme * call UpdateStl() | |
if exists('#CmdlineLeave') | |
autocmd CmdlineLeave * call UpdateStl() | |
endif | |
augroup end | |
set display=lastline | |
set laststatus=2 | |
set noshowmode | |
" See :help statusline for codes | |
let g:stl = [ | |
\ '%*%{ChangeColor(mode(1))}', | |
\ '%1*', | |
\ '%#StlMode#', | |
\ ' %{g:mode_hl[mode()][1]} ', | |
\ '%1* %n %Y %4*', | |
\ '%#StlText#', | |
\ ' %<%F ', | |
\ '%2*%M ', | |
\ '%2*%{&readonly?''RO '':''''}', | |
\ '%3*%{StatuslineTrailingSpaceWarning()}', | |
\ '%3*%{&paste?'' Paste '':''''}%{SyntasticStatuslineFlag()}', | |
\ '%2*%{&spell?'' Spell '':''''}', | |
\ '%=', | |
\ '%4*%w %{g:word_count}', | |
\ '%#StlText#', | |
\ ' %{&fenc!=''''?&fenc:&enc}', | |
\ ' [%{&ff}] ', | |
\ '%1* col: %-02v ', | |
\ '%#StlMode#', | |
\ ' ≡ %-03l/%L %3p%% ' | |
\] | |
let g:stl_ia = filter(copy(g:stl), { _,s -> s !~# '%#\|ChangeColor' }) | |
function! UpdateStl() | |
let l:wina = winnr() | |
let l:stls = [join(g:stl_ia, ''), join(g:stl, '')] | |
for l:winnr in range(1, winnr('$')) | |
call setwinvar(l:winnr, '&statusline', l:stls[l:winnr ==# l:wina]) | |
endfor | |
endfunction |
Author
meskarune
commented
Jun 3, 2019
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment