dotfiles/.vimrc

131 lines
5.6 KiB
VimL

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" x1phosura's .vimrc "
" "
" This is my basic .vimrc. I'm not a power user, but I like settings. "
" "
" note to self: vim navigates logical lines. To navigate a long paragraph up "
" and down when the paragraph is all on one line, use gj and gk. "
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" enable truecolors if available
"if has('nvim') || has('termguicolors')
" set termguicolors
"endif
" TODO: check _if_ mypeachpuff exists, if not, use peachpuff
colorscheme mypeachpuff
syntax on
set guicursor= "force using block cursor (for neovim)
set hlsearch " highlights search targets
set mouse= " disables mouse support, re-enable by 'set mouse=a'
set colorcolumn=80 " creates vertical line at column 80
set cursorline " underlines currently selected line
" below sets CursorLine colors (233 assumes 256-bit color, more specific black)
hi CursorLine ctermbg=235
hi ColorColumn ctermbg=235
"set number relativenumber " use "hybrid" numbering (both number and relative)
set number " note to self: tun off with 'set nonumber'
set ruler " ???
set shortmess+=I " Don't show splash screen
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" statusline
set noshowmode " don't show vim mode below statusline
set laststatus=2 " set 'laststatus' bar (neovim default)
let g:currentmode={ 'n' : 'Normal ', 'no' : 'N-Operator Pending ',
\ 'v' : 'Visual ', 'V' : 'V-Line ', '^V' : 'V-Block ',
\ 's' : 'Select ', 'S': 'S-Line ', '^S' : 'S-Block ',
\ 'i' : 'Insert ', 'R' : 'Replace ', 'Rv' : 'V-Replace ',
\ 'c' : 'Command ', 'cv' : 'Vim Ex ', 'ce' : 'Ex ',
\ 'r' : 'Prompt ', 'rm' : 'More ', 'r?' : 'Confirm ',
\ '!' : 'Shell ', 't' : 'Terminal '}
" get the current mode for display in vim statusline
function! ModeCurrent() abort
let l:modecurrent = mode()
" use get() -> fails safely, since ^V doesn't seem to register
" 3rd arg is used when return of mode() == 0, which is case with ^V
" thus, ^V fails -> returns 0 -> replaced with 'V Block'
let l:modelist = toupper(get(g:currentmode, l:modecurrent, 'V-Block '))
let l:current_status_mode = l:modelist
return l:current_status_mode
endfunction
" black on purple
highlight StatusHighlight term=bold ctermfg=0 ctermbg=13
" start building statusline
set statusline=%#StatusHighlight# " change background color to purple
set statusline+=\ %{ModeCurrent()} " put current mode here
set statusline+=%#ColorColumn#\ " change background color to ColorColumn
set statusline+=\ \[%n\] " show which vim buffer
"set statusline+=%* " switch back to normal statusline
set statusline+=\ %.30f " filename (truncate to 30 chars)
set statusline+=\ %m " modified flag
set statusline+=%= " format right side of statusline
set statusline+=\ %{&ff}, " unix or dos
set statusline+=%{&fileencoding?&fileencoding:&encoding}\ " File encoding
"set statusline+=\ %y " show filetype
set statusline+=%#StatusHighlight# " highlight purple
set statusline+=\ %l/%L: " current line/Total lines
set statusline+=%c%V " column number(-virtual column number)
"set statusline+=\ (%p%%) " percentage
set statusline+=%*
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let g:netrw_liststyle = 3 " change netrw file manager view style
setlocal ff=unix " Changes file format to unix (changes line endings)
" Indentation settings according to personal preference, including
" settings for using 4 spaces instead of tabs.
" Do not change 'tabstop' from its default value of 8 with this setup.
set shiftwidth=4 " TODO: explain
set softtabstop=4 " TODO: explain
set expandtab " can re-enable typing tabs with 'set noexpandtab' or 'set noet'
set autoindent " should automatically indent
set noeol " make vim _not_ automatically append newline to files after exiting
" makes words not get cut off and split weirdly at end of border
setlocal linebreak
" autocmd stuff (note: 'au' == 'autocmd')
" includes language/filetype-specific settings
if has("autocmd")
" applies columns rule even when vim is resized (caused by terminal resizing)
au VimResized * | set columns=84
" set markdown notes to "wordwrap" kinda
au BufRead,BufNewFile *.md setlocal columns=84
" turns off tabs-to-spaces conversion for makefiles
au FileType make setlocal shiftwidth=8 softtabstop=8 tabstop=8 noexpandtab
au FileType c setlocal shiftwidth=8 softtabstop=8 tabstop=8 noexpandtab
au FileType sh setlocal shiftwidth=4 softtabstop=4 tabstop=4 expandtab
au BufRead,BufNewFile *.rkt,*.rktl set filetype=scheme
au FileType scheme setlocal equalprg=scmindent.rkt " not sure if works
endif
let c_syntax_for_h=1 " assume header files are going to be C, not C++
" maps SHIFT-TAB to insert a real live tab character (in INSERT mode)
:inoremap <S-Tab> <C-V><Tab>
" double-<Esc> clears search highlights
"nnoremap <silent> <Esc><Esc> <Esc>:nohlsearch<CR><Esc>
" makes vim scroll fast (unnecesary for neovim)
set ttyfast