Skip to content

Instantly share code, notes, and snippets.

@msmhrt
Created April 5, 2014 14:04
Show Gist options
  • Save msmhrt/9992406 to your computer and use it in GitHub Desktop.
Save msmhrt/9992406 to your computer and use it in GitHub Desktop.
" File: vimrc
"
" Author: created by reedes on 16-Feb-2013
" Updated: continuously
" URL: https://github.com/reedes/vim-config
set nocompatible
" # VUNDLE (package management)
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
" let vundle manage itself
Bundle 'gmarik/vundle'
" # Non-color Bundles
"Bundle 'roman/golden-ratio'
"Bundle 'ervandew/supertab'
Bundle 'Lokaltog/vim-easymotion'
Bundle 'tommcdo/vim-exchange'
Bundle 'airblade/vim-gitgutter'
Bundle 'kana/vim-textobj-user'
"Bundle 'kana/vim-operator-user'
Bundle 'kien/ctrlp.vim'
"Bundle 'mileszs/ack.vim'
"Bundle 'milkypostman/vim-togglelist'
Bundle 'moll/vim-bbye'
Bundle 'scrooloose/nerdtree'
Bundle 'tpope/vim-markdown'
"Bundle 'plasticboy/vim-markdown'
"Bundle 'bling/vim-airline'
"Bundle 'rhysd/vim-operator-surround'
"Bundle 'tpope/vim-repeat'
"Bundle 'tpope/vim-abolish'
"Bundle 'tpope/vim-unimpaired'
Bundle 'junegunn/vader.vim'
" # Authored Bundles
Bundle 'reedes/vim-colors-pencil'
Bundle 'reedes/vim-lexical'
Bundle 'reedes/vim-litecorrect'
Bundle 'reedes/vim-one'
Bundle 'reedes/vim-pencil'
Bundle 'reedes/vim-textobj-quote'
Bundle 'reedes/vim-textobj-sentence'
Bundle 'reedes/vim-thematic'
Bundle 'reedes/vim-wheel'
Bundle 'reedes/vim-wordy'
" # Color Bundles
Bundle 'hmaarrfk/vim-colors-solarized'
Bundle 'baskerville/bubblegum'
Bundle 'chriskempson/base16-vim'
Bundle 'endel/vim-github-colorscheme'
Bundle 'nanotech/jellybeans.vim'
Bundle 'noahfrederick/vim-hemisu'
syntax enable
filetype plugin indent on
set autoindent
set backspace=indent,eol,start
set complete-=i
set smarttab
set nrformats-=octal
set shiftround
set ttimeout
set ttimeoutlen=100
set incsearch
" Use <C-L> to clear the highlighting of :set hlsearch.
if maparg('<C-L>', 'n') ==# ''
nnoremap <silent> <C-L> :nohlsearch<CR><C-L>
endif
set ruler
set showcmd
set wildmenu
if !&scrolloff
set scrolloff=1
endif
if !&sidescrolloff
set sidescrolloff=5
endif
set display+=lastline
if &encoding ==# 'latin1' && has('gui_running')
set encoding=utf-8
endif
if &listchars ==# 'eol:$'
set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+
if !has('win32') && (&termencoding ==# 'utf-8' || &encoding ==# 'utf-8')
let &listchars = "tab:\u21e5 ,trail:\u2423,extends:\u21c9,precedes:\u21c7,nbsp:\u00b7"
endif
endif
if &shell =~# 'fish$'
set shell=/bin/bash
endif
set autoread
set fileformats+=mac
if &history < 1000
set history=1000
endif
if &tabpagemax < 50
set tabpagemax=50
endif
if !empty(&viminfo)
set viminfo^=!
endif
" Allow color schemes to do bright colors without forcing bold.
if &t_Co == 8 && $TERM !~# '^linux'
set t_Co=16
endif
" Load matchit.vim, but only if the user hasn't installed a newer version.
if !exists('g:loaded_matchit') && findfile('plugin/matchit.vim', &rtp) ==# ''
runtime! macros/matchit.vim
endif
inoremap <C-U> <C-G>u<C-U>
imap ,fn <c-r>=expand('%:t:r')<cr>
" Make the 'cw' and like commands put a $ at the end
" instead of just deleting the text and replacing it.
set cpoptions+=$
" Don't update the display while executing macros
set lazyredraw
" Don't show the current command int he lower right corner.
" In OSX, if this is set and lazyredraw is set then it's
" slow as molasses, so we unset this
"set noshowcmd
" Various characters are "wider" than normal fixed width
" characters, but the default setting of ambiwidth (single)
" squeezes them into "normal" width, which sucks.
"set ambiwidth=double
" Add the unnamed register to the clipboard
set clipboard+=unnamed
set expandtab " use spaces, not tabs (optional)
set hlsearch " highlight matches
set ignorecase " searches are case insensitive...
set laststatus=0
set list " show invisible characters
set nowrap " don't wrap lines
set shortmess=atI " suppress PRESS ENTER messages by shortening messages
set smartcase " ... unless they contain at least one capital letter
set synmaxcol=800 " Don't try to lines highlight longer than 800 characters.
set tabstop=2 shiftwidth=2 " a tab is two spaces (or set this to 4)
set visualbell " avoid beeping
set hidden " allow unwritten background buffers
if has('unix')
set shell=/bin/bash\ -i " make Vim’s :! shell behave like your command prompt
endif
" Make the current file executable
nmap ,x :w<cr>:!chmod 755 %<cr>:e<cr>
" command-t, ctrlp config and expanding wildcards
set wildignore+=*.*~
set wildignore+=*.bak
set wildignore+=*.bz2,*.gz,*.tar,*.xz,*.zip
set wildignore+=*.class,*.pyc,*.so
set wildignore+=*.epub,*.mobi,*.pdf
set wildignore+=*.png,*.jpg,*.gif
set wildignore+=*.swp
set wildignore+=.DS_Store
set wildignore+=.git/**
set wildignore+=.svn/**
set wildignore+=log/**
set wildignore+=tmp/**
" get rid of cmd-t for tab
"if has('gui_macvim')
" macmenu File.New\ Tab key=<nop>
"endif
iab mdy <c-r>=strftime("%B %d, %Y")<CR>
iab mdyhm <c-r>=strftime("%A %B %d, %Y %I:%M %p")<CR>
iab isodate <c-r>=strftime("%FT%T%z")<CR>
let mapleader = "," " <Leader> key instead of backslash (options '\_,;')
" join, maintaining cursor position
"nnoremap S i<cr><esc>^mzgk:silent! s/\v +$//<cr>:noh<cr>`z
"nnoremap J mzJ`z
"nnoremap <silent> K :nohlsearch<CR>
" select what was just pasted
nnoremap <expr> gp '`[' . strpart(getregtype(), 0, 1) . '`]'
augroup CursorLine
au!
au VimEnter,WinEnter,BufWinEnter * setlocal cursorline
au WinLeave * setlocal nocursorline
augroup END
"set nocursorline
"set nocursorcolumn
"nnoremap <silent> Q gwip
"nnoremap <silent> K vipJ
"nnoremap <silent> ,Q :g/^/norm gqq<cr>
"nnoremap <silent> ,K :%norm vipJ<cr>
" For quick recordings just type qq to start recording, then q to stop. You
" don't have to worry about the name this way (you just named the recording
" 'q'). Now, to play back the recording you just type Q.
"nnoremap Q @q
"noremap <Space> @q
"make <c-l> clear the highlight as well as redraw
noremap <silent> <C-l> :<C-u>nohlsearch<cr><C-l>
inoremap <silent> <C-l> <C-o>:nohlsearch<cr>
" Clean trailing whitespace and save
"nnoremap ,w mz:%s/\s\+$//e<cr>:let @/=''<cr>`z:w<cr>
nnoremap <silent> ,w :call TrimAndWrite()<cr>
function! TrimAndWrite()
let l:p = getpos('.')
silent! %s/\s\+$//e
call setpos('.', l:p)
write
endfunction
" # Quick Editing - edit vimrc file and others
" NOTE pointing to all files in vim dir so that can easily
" browse directory using NERDTreeFind (<leader>T).
nnoremap <silent> ,E :edit $MYVIMRC<cr>
"nnoremap <silent> ,es :wall<cr>:so $MYVIMRC<cr>
" Remember last location in file, but not for commit messages.
" see :help last-position-jump
augroup line_return
au!
au BufReadPost *
\ if &filetype !~ '^git\c' && line("'\"") > 0 && line("'\"") <= line("$") |
\ execute 'normal! g`"zvzz' |
\ endif
augroup END
" automatically save all buffers when focus is lost
autocmd FocusLost * :silent! wall
"autowriteall
" jump to the first open window that has buffer
"set switchbuf=useopen
" delete buffer without closing window (vim-bbye plugin)
nmap <C-@> :Bdelete<CR>
" switch buffers ([b and ]b in unimpaired)
nmap <C-p> :bprevious<CR>
nmap <C-n> :bnext<CR>
" switch buffers via quickfix ([q and ]q in unimpaired)
nmap <silent> ,p :cprevious<cr>zvzz
nmap <silent> ,n :cnext<cr>zvzz
nmap <silent> ,P :crewind<cr>zvzz
nmap <silent> ,N :clast<cr>zvzz
" switch buffers via location ([l and ]l in unimpaired)
"nmap <silent> ,k :lprevious<cr>zvzz
"nmap <silent> ,j :lnext<cr>zvzz
"nmap <silent> ,K :lrewind<cr>zvzz
"nmap <silent> ,J :llast<cr>zvzz
" # Common directories for backup, undo and swap
set backup " enable backups
set undofile " Save undo's after file closes
set undolevels=1000 " How many undos
set undoreload=10000 " number of lines to save for undo
set backupdir=~/.vim/tmp/backup// " backups
set undodir=~/.vim/tmp/undo// " undo files
set directory=~/.vim/tmp/swap// " swap files
" Make those folders automatically if they don't already exist.
if !isdirectory(expand("~/.vim/tmp/backup"))
call mkdir(expand("~/.vim/tmp/backup"), "p")
endif
if !isdirectory(expand("~/.vim/tmp/undo"))
call mkdir(expand("~/.vim/tmp/undo"), "p")
endif
if !isdirectory(expand("~/.vim/tmp/swap"))
call mkdir(expand("~/.vim/tmp/swap"), "p")
endif
" Close all folds except the one(1) the cursor is on, and center.
nnoremap z1 zMzvzz
" Make zO (not zero) recursively open whatever top level fold we're in, no
" matter where the cursor happens to be, and center.
nnoremap zO zCzOzz
" Make horizontal scrolling easier
"nmap <silent> <C-o> 10zl
"nmap <silent> <C-i> 10zh
" set styling on vertical splits (hard space)
set fillchars=vert:
set splitbelow
set splitright
"let g:SuperTabDefaultCompletionType = "context"
"highlight OverLength ctermbg=red ctermfg=white guibg=#592929
"match OverLength /\%81v.\+/
"call matchadd('ColorColumn', '\%81v', 100)
"key mapping for Gundo
"nnoremap <F4> :GundoToggle<CR>
"
"map ,e <Plug>(easymotion-prefix)
"
let g:one#handleSwapfileConflicts = 1 " 0=disable, 1=enable (def)
nmap <silent> ,v :wall<CR>:Vader<CR>
let g:force_reload_textobj_sentence = 1
let g:litecorrect#typographic = 0
augroup various
autocmd!
autocmd FileType markdown,mkd
\ call litecorrect#init() |
\ call lexical#init() |
\ call textobj#sentence#init() |
\ call textobj#quote#init() |
\ call pencil#init()
autocmd FileType text
\ call litecorrect#init() |
\ call lexical#init({ 'spell': 0 }) |
\ call textobj#sentence#init() |
\ call textobj#quote#init() |
\ call pencil#init()
augroup END
" Avoid loading of MatchParen, per pi_paren.txt
"let loaded_matchparen = 1
"let g:wheel#map#mouse = -1
let g:lexical#spelllang = ['en_us',]
let g:lexical#spell_key = ',u'
let g:lexical#thesaurus_key = ',j'
let g:lexical#dictionary_key = ',k'
let g:pencil#softDetectSample = 40
let g:pencil#softDetectThreshold = 100
let g:pencil#wrapModeDefault = 'soft'
let g:online_thesaurus_map_keys = 0
nnoremap ,r :OnlineThesaurusCurrentWord<CR>
map <silent> ,c <Plug>(ReplaceWithCurly)
map <silent> ,s <Plug>(ReplaceWithStraight)
map <silent> ,2 <Plug>(SurroundWithDouble)
map <silent> ,1 <Plug>(SurroundWithSingle)
" operator mappings for rhysd/vim-operator-surround
"map <silent>sa <Plug>(operator-surround-append)
"map <silent>sd <Plug>(operator-surround-delete)
"map <silent>sr <Plug>(operator-surround-replace)
" delete or replace most inner surround
"" if you use vim-textobj-quote
"nmap <silent>sdd <Plug>(operator-surround-delete)<Plug>(textobj-quote-a)
"nmap <silent>srr <Plug>(operator-surround-replace)<Plug>(textobj-quote-a)
"
"" if you use vim-textobj-sentence
"nmap <silent>sdd <Plug>(operator-surround-delete)<Plug>(textobj-sentence-a)
"nmap <silent>srr <Plug>(operator-surround-replace)<Plug>(textobj-sentence-a)
map <F10> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<'
\ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<"
\ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>
let g:pencil_neutral_headings = 1
let g:pencil_higher_contrast_ui = 0
nmap <silent> ,A :ShiftPencil<cr>
nmap <silent> <D-9> <Plug>ThematicNarrow
nmap <silent> <D-0> <Plug>ThematicWiden
nmap ,y <Plug>ThematicNext
nmap ,Y <Plug>ThematicRandom
nmap ,I :Thematic pencil_dark<CR>
" use jellybeans as default airline theme as it maps from
" existing colors
let g:thematic#defaults = {
\ 'airline-theme': 'jellybeans',
\ 'fullscreen-background-color-fix': 1,
\ 'sign-column-color-fix': 1,
\ 'laststatus': 0,
\ 'background': 'dark',
\ 'font-size': 20,
\ 'linespace': 0,
\ 'transparency': 0,
\ }
let g:thematic#themes = {
\ 'desert' : { 'sign-column-color-fix': 1,
\ 'columns': 80,
\ 'lines': 30,
\ 'linespace': 9,
\ 'sign-column': 1,
\ 'fold-column-color-mute': 1,
\ 'number-column-color-mute': 1,
\ 'typeface': 'Cutive Mono',
\ },
\ 'pencil_light':{ 'colorscheme': 'pencil',
\ 'background': 'light',
\ 'columns': 75,
\ 'font-size': 20,
\ 'fullscreen': 1,
\ 'laststatus': 0,
\ 'linespace': 8,
\ 'airline-theme': 'light',
\ 'typeface': 'Cousine',
\ },
\ 'pencil_dark': { 'colorscheme': 'pencil',
\ 'background': 'dark',
\ 'font-size': 20,
\ 'fullscreen': 1,
\ 'laststatus': 0,
\ 'linespace': 8,
\ 'airline-theme': 'badwolf',
\ 'typeface': 'Cousine',
\ },
\ 'traditional': { 'colorscheme': 'pencil',
\ 'background': 'light',
\ 'font-size': 20,
\ 'laststatus': 0,
\ 'linespace': 8,
\ 'typeface': 'Linux Libertine Mono O',
\ },
\ 'hemi_dark' : { 'colorscheme': 'hemisu',
\ 'font-size': 8,
\ 'linespace': 0,
\ 'typeface': 'Menlo',
\ },
\ 'hemi_lite' : { 'colorscheme': 'hemisu',
\ 'background': 'light',
\ 'columns': 75,
\ 'typeface': 'CosmicSansNeueMono',
\ },
\ 'matrix' : { 'colorscheme': 'base16-greenscreen',
\ 'font-size': 24,
\ 'linespace': 9,
\ 'typeface': 'Dot Matrix',
\ },
\ 'solar_dark' : { 'colorscheme': 'solarized',
\ 'diff-color-fix': 1,
\ 'sign-column': 1,
\ 'sign-column-color-fix': 1,
\ 'typeface': 'Source Code Pro Light',
\ },
\ 'solar_lite' : { 'colorscheme': 'solarized',
\ 'background': 'light',
\ 'font-size': 20,
\ 'sign-column-color-fix': 1,
\ 'typeface': 'Source Code Pro Medium',
\ },
\ 'github' : { 'background': 'light' },
\ }
"let g:thematic#theme_name = 'desert'
" Motions to Ack for things. Works with pretty much everything, including:
" w, W, e, E, b, B, t*, f*, i*, a*, and custom text objects
" Note: If the text covered by a motion contains a newline it won't work. Ack
" searches line-by-line.
nnoremap <silent> ,a :set opfunc=<SID>AckMotion<CR>g@
xnoremap <silent> ,a :<C-U>call <SID>AckMotion(visualmode())<CR>
function! s:CopyMotionForType(type)
if a:type ==# 'v'
silent execute "normal! `<" . a:type . "`>y"
elseif a:type ==# 'char'
silent execute "normal! `[v`]y"
endif
endfunction
function! s:AckMotion(type) abort
let reg_save = @@
call s:CopyMotionForType(a:type)
execute "normal! :Ack! --literal " . shellescape(@@) . "\<cr>"
let @@ = reg_save
endfunction
" # CtrlP (navigation)
" http://kien.github.com/ctrlp.vim/
nmap ,b :CtrlPBuffer<CR>
nmap ,m :CtrlPMRU<CR>
"let g:ctrlp_map = '<c-p>'
let g:ctrlp_map = '<Leader>f'
let g:ctrlp_working_path_mode = 0 " don't manage
let g:ctrlp_by_filename = 1 " only consider filename, not full path
let g:ctrlp_match_window_bottom = 0
let g:ctrlp_match_window_reversed = 0
let g:ctrlp_dotfiles = 0
let g:ctrlp_switch_buffer = 0
let g:ctrlp_buffer_func = { 'enter': 'MyCtrlPMappings' }
" The Silver Searcher
if executable('ag')
" Use ag in CtrlP for listing files. Lightning fast and respects .gitignore
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
" ag is fast enough that CtrlP doesn't need to cache
let g:ctrlp_use_caching = 0
let g:ackprg = 'ag --smart-case --nogroup --nocolor --column'
set grepprg=ag\ --nogroup\ --nocolor
endif
func! MyCtrlPMappings()
nnoremap <buffer> <silent> <c-@> :call <sid>DeleteBuffer()<cr>
endfunc
func! s:DeleteBuffer()
let line = getline('.')
let bufid = line =~ '\[\d\+\*No Name\]$' ? str2nr(matchstr(line, '\d\+'))
\ : fnamemodify(line[2:], ':p')
exec "bd" bufid
exec "norm \<F5>"
endfunc
" # NERD Tree (directory browser)
nmap <silent> ,t :set columns=999<CR>:NERDTreeToggle<CR>
nmap <silent> ,T :set columns=999<CR>:NERDTreeFind<CR>
let NERDChristmasTree=1
let NERDTreeChDirMode=2
let NERDTreeDirArrows=1
let NERDTreeHighlightCursorline=1
let NERDTreeIgnore=[ '\.pyc$', '\.bak$', '\.zip$', '\.xz$' ]
let NERDTreeMapJumpFirstChild = 'gK'
let NERDTreeMinimalUI=1
let NERDTreeShowHidden=1
" quit if nerdtree is the last buffer open
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
" Try ]c and [c to jump between hunks
let g:signify_sign_change='~'
let g:signify_sign_delete='-'
let g:signify_sign_overwrite=0 " prevent dumping gutter
let g:signify_update_on_focusgained=1 " dumps gutter if overwrite=1
let g:signify_sign_color_inherit_from_linenr=1
let g:airline#extensions#whitespace#show_message = 0
let g:airline#extensions#whitespace#checks = [ ]
let g:airline_powerline_fonts = 0
let g:airline_left_sep = ''
let g:airline_right_sep = ''
let g:airline_linecolumn_prefix = ''
let g:airline_fugitive_prefix = '⎇'
let g:airline_paste_symbol = 'ρ'
let g:airline_section_x = ''
let g:airline_section_y = "%{strlen(&ft)?&ft:'none'}"
" ===============================================================
"
"function! ToggleMinimap()
" if exists("s:isMini") && s:isMini == 0
" let s:isMini = 1
" else
" let s:isMini = 0
" end
"
" if (s:isMini == 0)
" " save current visible lines
" let s:firstLine = line("w0")
" let s:lastLine = line("w$")
"
" " make font small
" exe "set guifont=" . g:small_font
" " highlight lines which were visible
" let s:lines = ""
" for i in range(s:firstLine, s:lastLine)
" let s:lines = s:lines . "\\%" . i . "l"
"
" if i < s:lastLine
" let s:lines = s:lines . "\\|"
" endif
" endfor
"
" exe 'match Visible /' . s:lines . '/'
" hi Visible guibg=lightblue guifg=black term=bold
" nmap <s-j> 10j
" nmap <s-k> 10k
" else
" exe "set guifont=" . g:main_font
" hi clear Visible
" nunmap <s-j>
" nunmap <s-k>
" endif
"endfunction
"
"let g:main_font = "Anonymous\\ Pro:h18"
"let g:small_font = "Anonymous\\ Pro:h2"
"command! ToggleMinimap call ToggleMinimap()
" vim:set ft=vim et sw=2:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment