Instantly share code, notes, and snippets.

Embed
What would you like to do?
set nocompatible " We're running Vim, not Vi!
syntax on " Enable syntax highlighting
filetype off " Disable filetype detection to keep Vundle happy
set shiftwidth=2 " That's a good tab width
set expandtab " ...and we don't like tab chars
set softtabstop=2
set tw=90 " 90 chars fits two columns on my screen
set wrap
set fdm=syntax " Use syntax to define folding
set fdls=99 " ...but start off unfolded
set autoread " Reread files when they change (i.e. git update)
set incsearch " Jump to search results
set laststatus=2 " Always display the status line
set dir=~/.vim/swap " Put all the swap files in .vim/swap
set mouse+=a " Enable mouse selection and scrolling in Vim in iTerm
set ttymouse=xterm2 " Extended mouse support for window resizing in tmux
set tags=tags,ctags " Sometimes we need an alternate tag file name
set cedit=<C-t> " The Vim default of C-F doesn't seem to work
" Start up vim-plug
call plug#begin('~/.vim/bundle')
" Plugins
Plug 'bkad/CamelCaseMotion'
Plug 'christoomey/vim-tmux-navigator'
Plug 'corntrace/bufexplorer'
Plug 'elzr/vim-json'
Plug 'guns/vim-slamhound'
Plug 'jballanc/YankRing.vim'
Plug 'JuliaLang/julia-vim'
Plug 'jpalardy/vim-slime'
Plug 'kovisoft/paredit'
Plug 'nvie/vim-flake8'
Plug 'Raimondi/delimitMate'
Plug 'rking/ag.vim'
Plug 'rkneufeld/vim-boot'
Plug 'The-NERD-Tree'
Plug 'tpope/vim-dispatch'
Plug 'tpope/vim-endwise'
Plug 'tpope/vim-fireplace'
Plug 'tpope/vim-fugitive'
Plug 'tpope/vim-leiningen'
Plug 'tpope/vim-markdown'
Plug 'tpope/vim-repeat'
Plug 'tpope/vim-surround'
Plug 'typedclojure/vim-typedclojure'
Plug 'vim-ruby/vim-ruby'
Plug 'xolox/vim-misc'
Plug 'xolox/vim-lua-inspect'
call plug#end()
" Now that Vundle is done...
filetype indent plugin on " Enable filetype specific indenting and plugins
" Cursor shape for iTerm (with TMUX fix)
if !has('gui_running')
if exists('$TMUX')
let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
else
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
endif
end
" Font and colorscheme
set gfn=Menlo:h11
let g:solarized_style="dark"
let g:solarized_termcolors=16
set t_Co=16
hi cursor guifg=lightgoldenrod
colorscheme solarized
" Quick light/dark color scheme switching
function! ToggleView()
if (g:solarized_style=="dark")
let g:solarized_style="light"
set gfn=Menlo:h22
colorscheme solarized
else
let g:solarized_style="dark"
set gfn=Menlo:h11
colorscheme solarized
hi cursor guifg=lightgoldenrod,reverse
endif
endfunction
nnoremap <F6> :call ToggleView()<CR>
inoremap <F6> <ESC>:call ToggleView()<CR>a
vnoremap <F6> <ESC>:call ToggleView()<CR>
" Reveal tabs and trailing whitespace
set listchars=tab:»·,trail:·
set list
" Disable scrollbars and toolbar in MacVim
set go-=T
set go-=r
set go-=L
" Ctrl-s for easier escaping
nnoremap <C-s> <Esc>
vnoremap <C-s> <Esc>gV
onoremap <C-s> <Esc>
inoremap <C-s> <Esc>`^
cnoremap <C-s> <C-c>
" Remap leader
let mapleader = ","
" Useful function for displaying highlight group
nmap <leader>h :call SynStack()<CR>
function! SynStack()
if !exists("*synstack")
return
endif
echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
" Readline cursor movement in insert mode
noremap! <C-a> <home>
noremap! <C-e> <end>
noremap! <C-f> <right>
noremap! <C-b> <left>
noremap! <C-h> <backspace>
noremap! <C-d> <delete>
" Prevent mistyped :W and :Q
command! W w
command! Q q
" Quick way through the fix list
nnoremap <silent> <Leader>n :cn<CR>
nnoremap <silent> <Leader>p :cp<CR>
" MacVim independent tab controls
nnoremap <silent> <Leader>to :tabnew<CR>
nnoremap <silent> <Leader>tn :tabnext<CR>
nnoremap <silent> <Leader>tp :tabprev<CR>
nnoremap <silent> <Leader>tx :tabclose<CR>
"Open tags in new tabs
nnoremap <silent> <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
" Remap navigation keys with C-w prefix
let g:tmux_navigator_no_mappings = 1
nmap <silent> <C-w>h :TmuxNavigateLeft<CR>
nmap <silent> <C-w>j :TmuxNavigateDown<CR>
nmap <silent> <C-w>k :TmuxNavigateUp<CR>
nmap <silent> <C-w>l :TmuxNavigateRight<CR>
nmap <silent> <C-w>w :TmuxNavigatePrevious<CR>
" Vim-Slime should use tmux, and default to window 1 of this pane
let g:slime_target = 'tmux'
let g:slime_default_config = {'socket_name': 'default', 'target_pane': '.1'}
" Customize delimitMate
set backspace=indent,eol,start
let delimitMate_expand_cr = 1
let delimitMate_expand_space = 1
let delimitMate_balance_matchpairs = 1
au FileType clojure let b:delimitMate_quotes = "\""
" Customize YankRing
let g:yankring_history_file = '.yankring_history'
" Customize luainspect
let g:lua_inspect_warnings = 0
" Customize CamelCaseMotion
map w <Plug>CamelCaseMotion_w
map b <Plug>CamelCaseMotion_b
map e <Plug>CamelCaseMotion_e
sunmap w
sunmap b
sunmap e
" Customize fold line
function! FoldText()
let indent_level = strlen(v:folddashes) - 1
let indent_width = (indent_level * shiftwidth()) - 1
let indent = "+" . repeat(" ", indent_width)
let start_line = substitute(getline(v:foldstart), "^\\s*", "", "")
let elipsis = "..."
let end_line = substitute(getline(v:foldend), "^\\s*", "", "")
return indent . start_line . elipsis . end_line
endfunction
set foldtext=FoldText()
" Customize paredit
let g:paredit_smartjump = 1
" Quickly toggle paredit mode
nnoremap <silent> <leader>pe :call PareditToggle()<CR>
" Customize for Clojure
let g:clojure_fuzzy_indent = 1
let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
let g:clojure_align_multiline_strings = 1
let g:clojure_fold = 1
" SLIME-like controls for Clojure
nnoremap <silent> <leader>f :w<CR>:Require<CR>
nnoremap <silent> <leader>F :w<CR>:Require!<CR>
function! GotoNamespace()
execute "SlimeSend1 (clojure.core/in-ns '".fireplace#ns().")"
endfunction
nnoremap <silent> <leader>g :call GotoNamespace()<CR>
" Remove / from keyword char list for better tag jumping in Clojure
autocmd FileType clojure setlocal iskeyword-=/
" Ruby indentation should be 2
autocmd FileType ruby setlocal tabstop=2
" Python, JS, C, and Java use a different indentation standard
autocmd Filetype python,javascript,c,java setlocal shiftwidth=4 softtabstop=4
" Python standard is 79 columns and indent can be used for folding
autocmd Filetype python setlocal textwidth=79 foldmethod=indent
" Spelling for Markdown files
autocmd Filetype markdown setlocal spell textwidth=80
" Git commit formatting
autocmd Filetype gitcommit setlocal spell textwidth=72
" For NeoVim only:
if has('neovim')
" Start python support
runtime! plugin/python_setup.vim
set unnamedclip
endif
" Now that setup is done...
filetype indent plugin on " Enable filetype specific indenting and plugins
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment