dotfiles/vimrc

179 lines
5.9 KiB
VimL

" ~/.vimrc
" This must be first - it changes other options as a side effect
set nocompatible " use Vim settings, rather then Vi settings
set shortmess+=I " get rid of the intro screen on blank file
set background=dark " this works better for text mode white-on-black terms
set backspace=2 " allow backspacing over everything in insert mode
set esckeys " allow cursor keys in insert mode
set noautoindent " always set autoindenting off
set shiftwidth=4 " number of spaces used for autoindent insertions
set tabstop=4 " tabstop positions
set nobackup " backups are for wimps
set history=250 " keep 250 lines of command line history
set noerrorbells " damn that beep to hell
set visualbell " enable terminal visual bell, but...
set t_vb= " ...unset the code to do it. (MacVim needs this)
set magic " use 'magic' patterns (extended regexp) in search
set ignorecase " ignore case during searches
set smartcase " all lower/upper = case insensitive, \c \C overrides
set laststatus=2 " show status line, even if only one buffer
set report=0 " show report on all (0) changes
set lazyredraw " do not update screen while executing macros
set ruler " show the cursor position all the time
set showcmd " show current uncompleted command
set showmode " show current mode
set showmatch " show matching brackets
" tone down that dang bold highlighting, folks
" highlight=8b,db,es,hs,mb,Mn,nu,rs,sr,tb,vr,ws
set highlight=8r,db,es,hs,mb,Mr,nu,rs,sr,tb,vr,ws
" highlight extra/unwanted whitespace
autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red
highlight ExtraWhitespace ctermbg=red guibg=red guifg=red
match ExtraWhitespace /\s\+$\| \+\ze\t/
" do not jump to first character with page commands, ie keep the cursor
" in the current column.
set nostartofline
" what info to store from an editing session in the viminfo file
set viminfo='50,\"100,:100,n~/.viminfo
" allow the last line to be a modeline - useful when
" the last line gives the preferred textwidth
set modeline
set modelines=1
" add the dash ('-'), the dot ('.'), and the '@' as "letters" to "words".
" this makes it possible to expand email addresses, eg: joe-www@foo.org
set iskeyword=@,48-57,_,192-255,-,.,@-@
" which chars/keys to allow eol wrapping (:help whichwrap)
set whichwrap=<,>,[,]
" enable wrapping but without linebreaks
set wrap
set linebreak
set nolist " list disables linebreak
set textwidth=0
set wrapmargin=0
set formatoptions+=l
" When you forgot to sudo before editing a file
cmap w!! w !sudo tee > /dev/null %
" When the backspace key sends a "delete" character
" then you simply map the "delete" to a "backspace" (CTRL-H):
map <Del> <C-H>
" Don't use Ex mode, use Q for formatting
map Q gq
" Make shift-insert work like in Xterm
map <S-Insert> <MiddleMouse>
map! <S-Insert> <MiddleMouse>
" Make p in Visual mode replace the selected text with the "" register.
vnoremap p <Esc>:let current_reg = @"<CR>gvdi<C-R>=current_reg<CR><Esc>
" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif
" GVIM preferences
if has("gui_running")
" CUA Mode (shift+arrows select in insert mode, etc.)
source $VIMRUNTIME/mswin.vim
set showtabline=2 " always show the tab bar
set guioptions-=tT " turn off the menu tearoffs
set guicursor+=a:blinkon0 " turn off the blinking cursor
set t_Co=256 " 256 colors
set lines=26 columns=80 " we like 80x24
" mostly mimic cli colors from syncolor.vim - white text, black bg
hi Normal guifg=White guibg=Black gui=NONE
hi Comment guifg=LightBlue gui=NONE
hi Constant guifg=LightMagenta gui=NONE
hi Special guifg=LightRed gui=NONE
hi Identifier guifg=Cyan gui=NONE
hi Statement guifg=Yellow gui=NONE
hi PreProc guifg=LightBlue gui=NONE
hi Type guifg=LightGreen gui=NONE
hi Underlined guifg=LightBlue gui=NONE
hi Ignore guifg=Black gui=NONE
hi Error guifg=White guibg=Red gui=NONE
hi Todo guifg=Blue guibg=Yellow gui=NONE
hi link String Constant
hi link Character Constant
hi link Number Constant
hi link Boolean Constant
hi link Float Number
hi link Function Identifier
hi link Conditional Statement
hi link Repeat Statement
hi link Label Statement
hi link Operator Statement
hi link Keyword Statement
hi link Exception Statement
hi link Include PreProc
hi link Define PreProc
hi link Macro PreProc
hi link PreCondit PreProc
hi link StorageClass Type
hi link Structure Type
hi link Typedef Type
hi link Tag Special
hi link SpecialChar Special
hi link Delimiter Special
hi link SpecialComment Special
hi link Debug Special
let os=substitute(system('uname'), '\n', '', '')
if os == 'Darwin' || os == 'Mac'
set guifont=Menlo:h16
elseif os == 'Linux'
set guifont=Monospace\ 12
endif
function! GuiTabLabel()
let label = ''
let bufnrlist = tabpagebuflist(v:lnum)
" Add '+' if one of the buffers in the tab page is modified
for bufnr in bufnrlist
if getbufvar(bufnr, "&modified")
let label = '+'
break
endif
endfor
" Append the tab number
let label .= v:lnum.': '
" Append the buffer name
let name = bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
if name == ''
" give a name to no-name documents
if &buftype=='quickfix'
let name = '[Quickfix]'
else
let name = '[No Name]'
endif
else
" get only the file name
let name = fnamemodify(name,":t")
endif
let label .= name
return label
endfunction
set guitablabel=%{GuiTabLabel()}
endif