Skip to content

Instantly share code, notes, and snippets.

@jeremyckahn
Forked from millermedeiros/.vimrc
Created January 5, 2012 16:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeremyckahn/1566008 to your computer and use it in GitHub Desktop.
Save jeremyckahn/1566008 to your computer and use it in GitHub Desktop.
My VIM settings (.vimrc)
" =============================================================================
" Miller Medeiros .vimrc file
" -----------------------------------------------------------------------------
" heavily inspired by: @factorylabs, @scrooloose, @nvie, @gf3, @bit-theory.
" =============================================================================
" -----------------------------------------------------------------------------
" BEHAVIOR
" -----------------------------------------------------------------------------
set nocompatible " Disable vi compatibility
filetype on " filetype must be 'on' before setting it 'off'
" otherwise it exits with a bad status and breaks
" git commit.
filetype off " force reloading *after* pathogen loaded
" Use Pathogen to load bundles
call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
syntax on
filetype plugin indent on " enable detection, plugins and indent
" Local dirs (centralize everything)
set backupdir=~/.vim/backups
set directory=~/.vim/swaps
" Change mapleader (easier to type), at the top since its used everywhere
let mapleader=","
set spelllang=en_us " spell checking
set encoding=utf-8 nobomb " BOM often causes trouble, UTF-8 is awsum.
" set encoding=latin1 nobomb " BOM often causes trouble, UTF-8 is awsum.
" --- performance / buffer ---
set hidden " can put buffer to the background without writing
" to disk, will remember history/marks.
set lazyredraw " don't update the display while executing macros
set ttyfast " Send more characters at a given time.
" --- history / file handling ---
set history=999 " Increase history (default = 20)
set undolevels=999 " Moar undo (default=100)
set autoread " reload files if changed externally
" --- backup and swap files ---
" I save all the time, those are annoying and unnecessary...
set nobackup
set nowritebackup
set noswapfile
" --- search / regexp ---
set gdefault " RegExp global by default
set magic " Enable extended regexes.
set hlsearch " highlight searches
set incsearch " show the `best match so far' astyped
set ignorecase smartcase " make searches case-insensitive, unless they
" contain upper-case letters
" --- keys ---
set backspace=indent,eol,start " allow backspacing over everything.
set esckeys " Allow cursor keys in insert mode.
set nostartofline " Make j/k respect the columns
"set virtualedit=all " allow the cursor to go in to 'invalid' places
" -----------------------------------------------------------------------------
" UI
" -----------------------------------------------------------------------------
set t_Co=256 " 256 colors terminal
let g:molokai_original=0
colorscheme molokai
" --- UI settings ---
if has('gui_running')
"set guifont=Menlo:h13
set gfn:Monaco:h13
set transp=0
" toolbar and scrollbars
set guioptions-=T " remove toolbar
set guioptions+=L " left scroll bar
set guioptions+=r " right scroll bar
"set guioptions+=b " bottom scroll bar
"set guioptions-=h " only calculate bottom scroll size of current line
set shortmess=atI " Don't show the intro message at start and
" truncate msgs (avoid press ENTER msgs).
endif
set cursorline " Highlight current line
set laststatus=2 " Always show status line
set number " Enable line numbers.
set numberwidth=5 " width of numbers line (default on gvim is 4)
set report=0 " Show all changes.
set showmode " Show the current mode.
set showcmd " show partial command on last line of screen.
set showmatch " show matching parenthesis
set splitbelow splitright " how to split new windows.
set title " Show the filename in the window title bar.
set scrolloff=5 " Start scrolling n lines before horizontal
" border of window.
set sidescrolloff=7 " Start scrolling n chars before end of screen.
set sidescroll=1 " The minimal number of columns to scroll
" horizontally.
" add useful stuff to title bar (file name, flags, cwd)
" based on @factorylabs
if has('title') && (has('gui_running') || &title)
set titlestring=
set titlestring+=%f
set titlestring+=%h%m%r%w
set titlestring+=\ -\ %{v:progname}
set titlestring+=\ -\ %{substitute(getcwd(),\ $HOME,\ '~',\ '')}
endif
" --- command completion ---
set wildmenu " Hitting TAB in command mode will
set wildchar=<TAB> " show possible completions.
set wildmode=list:longest
set wildignore+=*.DS_STORE,*.db
" --- diff ---
set diffopt=filler " Add vertical spaces to keep right
" and left aligned.
set diffopt+=iwhite " Ignore whitespace changes.
" --- folding---
set foldmethod=indent " fold based on indent
set foldnestmax=3 " deepest fold is 3 levels
set nofoldenable " don't fold by default
" --- list chars ---
" list spaces and tabs to avoid trailing spaces and mixed indentation
" see key mapping at the end of file to toggle `list`
set listchars=tab:▹\ ,trail:·,nbsp:⚋
set fillchars=fold:-
set list
" --- remove sounds effects ---
set noerrorbells
set visualbell
" -----------------------------------------------------------------------------
" INDENTATION AND TEXT-WRAP
" -----------------------------------------------------------------------------
set expandtab " Expand tabs to spaces
set autoindent smartindent " auto/smart indent
set copyindent " copy previous indentation on auto indent
set softtabstop=4 " Tab key results in # spaces
set tabstop=4 " Tab is 4 spaces
set shiftwidth=4 " The # of spaces for indenting.
set smarttab " At start of line, <Tab> inserts shift width
" spaces, <Bs> deletes shift width spaces.
set wrap " wrap lines
set textwidth=79
"set colorcolumn=+1 " Show large lines
set formatoptions=qrn1 " automatic formating.
set formatoptions-=o " don't start new lines w/ comment leader on
" pressing 'o'
set nomodeline " don't use modeline (security)
set pastetoggle=<leader>p " paste mode: avoid auto indent, treat chars
" as literal.
" -----------------------------------------------------------------------------
" PLUGINS
" -----------------------------------------------------------------------------
" --- NERDTree ----
let NERDTreeIgnore=['.DS_Store']
let NERDTreeShowBookmarks=1 "show bookmarks on startup
let NERDTreeHighlightCursorline=1 "Highlight the selected entry in the tree
noremap <leader>nt :NERDTreeToggle<CR>
" --- NERDCommenter ---
let NERDSpaceDelims=1 " space around delimiters
let NERDRemoveExtraSpaces=1
" --- Syntastic : Linting / Error check ---
" let g:syntastic_auto_loc_list=1
let g:syntastic_check_on_open=1
" close/open location list (errors)
noremap <silent><leader>lc :lcl<CR>
noremap <silent><leader>lo :lw<CR>
" --- autocomplete ---
set infercase
set completeopt=longest,menuone
set omnifunc=syntaxcomplete#Complete
set complete=.,w,b,u,U,t,i,d
" see autocommands at the end for more autocomplete settings
" --- supertab autocomplete ---
let g:SuperTabMappingForward = '<C-Space>'
let g:SuperTabMappingBackward = '<S-C-Space>'
let g:SuperTabLongestEnhanced = 1
" --- snipmate ---
let g:snips_trigger_key = '<C-Tab>'
let g:snips_author = 'Miller Medeiros'
" --- indent-guides ---
let g:indent_guides_guide_size = 1
let g:indent_guides_color_change_percent = 3
" --- EasyMotion ---
let g:EasyMotion_leader_key = '<Leader>e'
" --- Command-T ---
let g:CommandTMaxFiles=2000
let g:CommandTMaxHeight=12
noremap <silent><leader>bt :CommandTBuffer<CR>
" --- Strip trailing whitespace ---
function! StripWhitespace ()
let save_cursor = getpos(".")
let old_query = getreg('/')
:%s/\s\+$//e
call setpos('.', save_cursor)
call setreg('/', old_query)
endfunction
" Trailing white space (strip spaces)
noremap <leader>ss :call StripWhitespace()<CR>
" --- matchit ---
runtime macros/matchit.vim " enable matchit (better '%' key mapping)
" --- vim-css-color ---
let g:cssColorVimDoNotMessMyUpdatetime = 1
" --- Zoomwin ---
nnoremap <leader>z :ZoomWin<CR>
" --- LustyJuggler ---
let g:LustyJugglerSuppressRubyWarning = 1 " avoid error if running on terminal
" --- statline ---
" errors color
hi User3 guifg=#FFFFFF guibg=#FF0000 gui=bold ctermfg=15 ctermbg=1 cterm=bold
let g:statline_fugitive = 1
let g:statline_filename_relative = 1
" --- gundo ---
nnoremap <leader>gu :GundoToggle<CR>
let g:gundo_right = 1
let g:gundo_preview_bottom = 1
" --- toggle indentation mode ---
function! ToggleExpandTab()
if &et
set noet softtabstop=0
else
execute "set et softtabstop=". &tabstop
endif
endfunction
noremap <silent> <leader>et :call ToggleExpandTab()<CR>
" --- Show syntax highlighting groups for word under cursor ---
" http://vimcasts.org/episodes/creating-colorschemes-for-vim/
nnoremap <leader>sh :call <SID>SynStack()<CR>
function! <SID>SynStack()
if !exists("*synstack")
return
endif
echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
" -----------------------------------------------------------------------------
" KEY MAPPINGS
" -----------------------------------------------------------------------------
" mapleader set at the top of the file to avoid conflicts
" --- FIX/IMPROVE DEFAULT BEHAVIOR ---
" faster commands
nnoremap <space> :
" nnoremap ; :
" avoid mistyping commands
command! W w
command! Bd bd
" Split line (sister to [J]oin lines)
" The normal use of S is covered by cc, so don't worry about shadowing
nnoremap S i<cr><esc><right>
" movement by screen line instead of file line (for text wrap)
nnoremap j gj
nnoremap <down> gj
nnoremap k gk
nnoremap <up> gk
" next tab
nnoremap <C-Tab> :tabn<CR>
" automatic esc, really uncommon to type jj,jk
inoremap jj <ESC>
inoremap jk <Esc>
" Faster scrolling
nnoremap <C-e> 3<C-e>
nnoremap <C-y> 3<C-y>
" Move between splits
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l
" Move windows around (only works on same row)
noremap <C-S-Right> <C-w>r
noremap <C-S-Left> <C-w>R
" Bubble single lines, similar to Eclipse (requires unimpaired.vim)
nmap <C-Up> [e
nmap <C-Down> ]e
" Bubble multiple lines, similar to Eclipse (requires unimpaired.vim)
vmap <C-Up> [egv
vmap <C-Down> ]egv
" Duplicate lines, similar to Eclipse
noremap <C-S-Up> YP
noremap <C-S-Down> YP
" 'fix' search regexp to be compatible with Perl format
nmap / /\v
vmap / /\v
" Use the damn hjkl keys
" noremap <up> <nop>
" noremap <down> <nop>
" noremap <left> <nop>
" noremap <right> <nop>
" --- COMMON STUFF / HELPERS ---
" Toggle show tabs and trailing spaces
nnoremap <leader>c :set nolist!<CR>
" Clear the search highlight
noremap <silent> \ :silent nohlsearch<CR>
" text wrap: Hard wrap paragraph text (similar to TextMate Ctrl+Q)
nnoremap <leader>tw gqip
" Open file (useful for HTML)
noremap <silent> <leader>o :!open %<CR>
" Reformat code
nnoremap <leader>rf gg=G
" I use retab too much and it's hard to type
nnoremap <leader>rt :retab!<CR>
" Pull word under cursor into LHS of a substitute (find and replace)
nnoremap <leader>fr :%s#\<<C-r>=expand("<cword>")<CR>\>#
" Insert/append a single character
" noremap ,, i_<esc>r
" noremap ;; a_<esc>r
" Visually select the text that was last edited/pasted
nnoremap <leader>v `[v`]
" fast Ack
nnoremap <leader>a :Ack<Space>
nnoremap <leader>aw :Ack<cword><CR>
" Open current buffer in a new split
noremap <leader>s <C-w>v<C-w>l
noremap <leader>i <C-w>s<C-w>j
" close window
noremap <leader>q :clo<CR>
" Toggle spelling hints
nnoremap <silent> <leader>ts :set spell!<CR>
" delete buffer but keep window open (requires bufkill.vim)
map <leader>bd :BD<CR>
" smarter next/prev buffer (requires bufkill.vim)
map <leader>bn :BF<CR>
map <leader>bp :BB<CR>
" -----------------------------------------------------------------------------
" FILE HANDLING
" -----------------------------------------------------------------------------
" borrowed from @bit-theory vimfiles and edited
augroup mm_buf_cmds
" clear commands before resetting
autocmd!
" when vimrc is edited, reload it
autocmd bufwritepost .gvimrc source %
autocmd bufwritepost .vimrc source %
" filetype
autocmd BufNewFile,BufRead *.json setf json
autocmd BufNewFile,BufRead *.hx setf haxe
autocmd FileType mustache runtime! ftplugin/html/sparkup.vim
" Enable omnicomplete for supported filetypes
autocmd FileType * if exists("+completefunc") && &completefunc == "" | setlocal completefunc=syntaxcomplete#Complete | endif
autocmd FileType * if exists("+omnifunc") && &omnifunc == "" | setlocal omnifunc=syntaxcomplete#Complete | endif
augroup END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment