Files

198 lines
4.8 KiB
VimL

filetype plugin indent on
syntax on
colorscheme habamax
"set clipboard=unnamed
set clipboard=unnamedplus
set nobackup nowritebackup
set noswapfile
"set number
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set autoindent
set smarttab
set mouse=a
set laststatus=2
set scrolloff=5
set ignorecase
set hlsearch
set incsearch
set nowrap
set timeoutlen=1000
set ttimeoutlen=0
set hidden
set wildmenu
set colorcolumn=75
"set backspace=indent,eol,start
set updatetime=100
set signcolumn=auto
" ----- Custom Functions --------------------------------------------------
" Align regex
command! -nargs=? -range Align <line1>,<line2>call AlignSection('<args>')
vnoremap <silent> <Leader>a :Align<CR>
function! AlignSection(regex) range
let extra = 1
let sep = empty(a:regex) ? '=' : a:regex
let maxpos = 0
let section = getline(a:firstline, a:lastline)
for line in section
let pos = match(line, ' *'.sep)
if maxpos < pos
let maxpos = pos
endif
endfor
call map(section, 'AlignLine(v:val, sep, maxpos, extra)')
call setline(a:firstline, section)
endfunction
function! AlignLine(line, sep, maxpos, extra)
let m = matchlist(a:line, '\(.\{-}\) \{-}\('.a:sep.'.*\)')
if empty(m)
return a:line
endif
let spaces = repeat(' ', a:maxpos - strlen(m[1]) + a:extra)
return m[1] . spaces . m[2]
endfunction
" Window Operations
function! CreateOrSelectWindow()
let win_count = winnr('$')
if win_count == 1
execute 'vsplit'
endif
execute '2wincmd w'
endfunction
function! PutIntoShade()
let shade = float2nr(&columns * 0.95)
let default = float2nr(&columns * 0.5)
let min = float2nr(&columns * 0.5)
if winwidth(0) <= min
execute 'vertical resize ' . shade
else
execute 'vertical resize ' . default
endif
endfunction
" Preserve paste line column
function! PasteAbove()
let l = getline('.')
let c = col('.')
normal! P
if getline('.') == l
call cursor(0, c)
endif
endfunction
function! PasteBelow()
let l = getline('.')
let c = col('.')
normal! p
if getline('.') == l
call cursor(0, c)
endif
endfunction
function! IsPreviewOpen() abort
for l:win in range(1, winnr('$'))
if getwinvar(l:win, '&previewwindow') == 1
return 1
endif
endfor
return 0
endfunction
function! TagsTogglePreview(symbol)
if IsPreviewOpen()
execute 'pclose'
else
execute 'ptag ' . a:symbol
endif
endfunction
" ----- Custom Keymaps ----------------------------------------------------
"nnoremap <silent> K <Nop>
xnoremap p P
nnoremap <silent> ` ngnP
vnoremap <silent> > >:normal gv<CR>
vnoremap <silent> < <:normal gv<CR>
vnoremap <silent> J :m '>+1<CR>gv=gv
vnoremap <silent> K :m '<-2<CR>gv=gv
nnoremap <silent> H :bnext<CR>zz
nnoremap <silent> L :bprev<CR>zz
nnoremap <silent> , :copen<CR>
nnoremap <silent> > :cn<CR>
nnoremap <silent> < :cp<CR>
nnoremap <silent> g/ :noh<CR>
nnoremap <silent> gs :w<CR>
nnoremap <silent> E :Ex<CR>
nnoremap <silent> <space>z :set relativenumber!<CR>
nnoremap <silent> <space>x :set wrap!<CR>
nnoremap gb :make<CR>
nnoremap gr :make run<CR>
nnoremap <silent> gw :close<CR>
nnoremap <silent> gq :bdelete<CR>
nnoremap <silent> ! :1wincmd w<CR>
nnoremap <silent> @ :call CreateOrSelectWindow()<CR>
nnoremap <silent> # :call PutIntoShade()<CR>
nnoremap <silent> P :call PasteAbove()<CR>
nnoremap <silent> p :call PasteBelow()<CR>
nnoremap <silent> <space>cp :call TagsTogglePreview(expand('<cword>'))<CR>
" ----- Highlights --------------------------------------------------------
" Todo Comments highlights
" Colors: https://vim.fandom.com/wiki/Xterm256_color_names_for_console_Vim
" NOTE: These are confirmed to work with 'habamax' color scheme.
highlight TODOPerf term=bold,underline cterm=bold,underline ctermfg=93 " purple
highlight TODOHack term=bold,underline cterm=bold,underline ctermfg=214 " orange
highlight TODOTodo term=bold,underline cterm=bold,underline ctermfg=51 " cyan
highlight TODONote term=bold,underline cterm=bold,underline ctermfg=46 " green
highlight TODOFix term=bold,underline cterm=bold,underline ctermfg=196 " green
highlight TODOWarning term=bold,underline cterm=bold,underline ctermfg=214 " orange
augroup HiglightTODO
autocmd!
autocmd WinEnter,VimEnter * :silent! call matchadd('TODOPerf', 'PERF:', -1)
autocmd WinEnter,VimEnter * :silent! call matchadd('TODOHack', 'HACK:', -1)
autocmd WinEnter,VimEnter * :silent! call matchadd('TODOTodo', 'TODO:', -1)
autocmd WinEnter,VimEnter * :silent! call matchadd('TODONote', 'NOTE:', -1)
autocmd WinEnter,VimEnter * :silent! call matchadd('TODOFix', 'FIX:', -1)
autocmd WinEnter,VimEnter * :silent! call matchadd('TODOWarning', 'WARNING:', -1)
augroup END