Skip to content

Instantly share code, notes, and snippets.

@meskarune
Created June 3, 2019 22:39
Show Gist options
  • Save meskarune/3dfdd7cac1547ac49ad5f4159bd67560 to your computer and use it in GitHub Desktop.
Save meskarune/3dfdd7cac1547ac49ad5f4159bd67560 to your computer and use it in GitHub Desktop.
My Vim configuration
" 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
@meskarune
Copy link
Author

https://i.imgur.com/aBglMBQ.png

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment