Created
September 25, 2013 17:42
-
-
Save julianlconnor/6703235 to your computer and use it in GitHub Desktop.
.vimrc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Pathogen | |
set nocompatible | |
set laststatus=2 " Always show the statusline | |
set encoding=utf-8 " Necessary to show Unicode glyphs | |
set t_Co=256 " Explicitly tell Vim that the terminal supports 256 colors | |
filetype off " Pathogen needs to run before plugin indent on | |
call pathogen#runtime_append_all_bundles() | |
call pathogen#helptags() " generate helptags for everything in 'runtimepath' | |
call pathogen#infect() | |
filetype plugin indent on | |
filetype on | |
filetype plugin on | |
filetype indent on | |
syntax enable | |
set background=dark | |
highlight SpellBad term=reverse ctermbg=6 | |
:color elflord | |
if has("gui_running") | |
highlight SpellBad term=underline gui=undercurl guisp=Orange | |
endif | |
"if has("terminfo") | |
" set t_Co=16 | |
" set t_AB=[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm | |
" set t_AF=[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm | |
"else | |
" set t_Co=16 | |
" set t_Sf=[3%dm | |
" set t_Sb=[4%dm | |
"endif | |
" http://github.com/twerth/dotfiles/blob/master/etc/vim/vimrc | |
" very good vimrc (and well documented!) | |
" | |
set foldmethod=indent | |
set foldlevel=99 | |
nnoremap <space> za | |
vnoremap <space> zf | |
set wildignore=api/node_modules/**,node_modules/**,static/js/lib/** | |
let g:CommandTMaxHeight=25 | |
set nocompatible | |
set number | |
set et | |
set sw=4 | |
set smarttab | |
set incsearch | |
set hlsearch | |
set ignorecase | |
set smartcase | |
set cursorline | |
" set cursorcolumn | |
set nolist | |
" show in title bar | |
set title | |
set ruler | |
set showmode | |
set showcmd | |
set ai " Automatically set the indent of a new line (local to buffer) | |
set si " smartindent (local to buffer) | |
set tags=./tags; | |
set grepprg=ack | |
au BufRead,BufNewFile {*.less,*.sass} set ft=css | |
au BufRead,BufNewFile *.us set ft=html "our underscore.js html templates | |
""set equalalways " Multiple windows, when created, are equal in size | |
"set splitbelow splitright" | |
" Professor VIM says '87% of users prefer jj over esc', jj abrams disagrees | |
" imap jj <Esc> | |
autocmd WinEnter * setlocal cursorline | |
autocmd WinLeave * setlocal nocursorline | |
au BufRead,BufNewFile *.go set filetype=go | |
"autocmd BufRead,BufNewFile,BufDelete * :syntax on | |
let g:miniBufExplMapWindowNavVim = 1 | |
let g:miniBufExplMapWindowNavArrows = 1 | |
let g:miniBufExplMapCTabSwitchBufs = 1 | |
let g:miniBufExplModSelTarget = 1 | |
let syntastic_mode_map = { 'passive_filetypes': ['html'] } | |
let g:syntastic_python_checkers=['pyflakes'] | |
let g:syntastic_javascript_checkers=['jshint'] | |
let g:syntastic_always_populate_loc_list=1 | |
let g:syntastic_auto_loc_list=1 | |
let g:syntastic_enable_signs=0 | |
autocmd FileType python set omnifunc=pythoncomplete#Complete | |
autocmd FileType python setlocal nolist | |
autocmd FileType python set ft=python.django " For SnipMate | |
au BufRead,BufNewFile {Capfile,Gemfile,Rakefile,Vagrantfile,Thorfile,config.ru,.caprc,.irbrc,irb_tempfile*} set ft=ruby | |
" fix backspace in vim 7 | |
:set backspace=indent,eol,start | |
"nmap <buffer> <CR> gf | |
"nmap <buffer> <C-S-y> <Esc>yy<Esc>:bd<CR>:edit @"<CR> | |
" popout split buffer hack | |
" map <C-S-p> <Esc>:hide<CR>:blast<CR> | |
" ctrl-p paste | |
imap <C-l> <C-r>" | |
" map ,n to :NERDTree | |
nmap <Leader>nt :NERDTree<CR> | |
" automatically open NERDTree if no files were specified | |
autocmd vimenter * if !argc() | NERDTree | endif | |
" duplicate line" | |
" imap <C-D> <Esc>yyp | |
" nmap <C-D> <Esc>yyp | |
" copy all to clipboard | |
nmap ,a ggVG"*y | |
" copy word to clipboard | |
nmap ,d "*yiw | |
" underline current line, markdown style | |
nmap ,u "zyy"zp:.s/./-/g<CR>:let @/ = ""<CR> | |
" delete inner xml tag | |
nmap ,dit dt<dT> | |
nmap ,cit dt<cT> | |
" kortina - move note to the old-notes file | |
nmap ,kk ^"=strftime("%Y-%m-%d ")<CR>P<Esc>:,!~/Dropbox/nix/bin/note_archive.sh>/dev/null<CR> | |
nmap ,ll ^"=strftime("%Y-%m-%d ")<CR>P<Esc>:,!~/Dropbox/nix/bin/note_not_done.sh>/dev/null<CR> | |
nmap ,t <Leader>t | |
"clear the fucking search buffer, not just remove the highlight | |
map \c :let @/ = ""<CR> | |
" Revert the current buffer | |
nnoremap \r :e!<CR> | |
"Easy edit of vimrc | |
nmap \s :source $MYVIMRC<CR> | |
nmap \v :e $MYVIMRC<CR> | |
:runtime! ~/.vim/ | |
":helptags ~/.vim/doc | |
let g:pydiction_location = '~/.vim/bundle/pydiction/ftplugin/pydiction-1.2/complete-dict' | |
"################################################## | |
"# move through CamelCaseWords | |
"################################################## | |
" http://vim.wikia.com/wiki/Moving_through_camel_case_words | |
" Use one of the following to define the camel characters. | |
" Stop on capital letters. | |
let g:camelchar = "A-Z" | |
" Also stop on numbers. | |
let g:camelchar = "A-Z0-9" | |
" Include '.' for class member, ',' for separator, ';' end-statement, | |
" and <[< bracket starts and "'` quotes. | |
let g:camelchar = "A-Z0-9.,;:{([`'\"" | |
nnoremap <silent><C-Left> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR> | |
nnoremap <silent><C-Right> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR> | |
inoremap <silent><C-Left> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR> | |
inoremap <silent><C-Right> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR> | |
vnoremap <silent><C-Left> :<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>v`>o | |
vnoremap <silent><C-Right> <Esc>`>:<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>v`<o | |
"################################################## | |
" https://wincent.com/blog/2-hours-with-vim | |
"function! AckGrep(command) | |
" cexpr system("ack " . a:command) | |
" cw " show quickfix window already | |
"endfunction | |
"command! -nargs=+ -complete=file Ack call AckGrep(<q-args>) | |
"map <leader>a :Ack<space> | |
" prevent comments from going to beginning of line | |
autocmd BufRead *.py inoremap # X<c-h># | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" CUSTOM AUTOCMDS | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
augroup vimrcEx | |
" Clear all autocmds in the group | |
autocmd! | |
autocmd FileType text setlocal textwidth=78 | |
" Jump to last cursor position unless it's invalid or in an event handler | |
autocmd BufReadPost * | |
\ if line("'\"") > 0 && line("'\"") <= line("$") | | |
\ exe "normal g`\"" | | |
\ endif | |
"for ruby, autoindent with two spaces, always expand tabs | |
autocmd FileType ruby,haml,eruby,yaml,sass,cucumber,javascript set ai sw=2 sts=2 et | |
autocmd FileType python set sw=4 sts=4 et | |
autocmd! BufRead,BufNewFile *.sass setfiletype sass | |
autocmd BufRead *.mkd set ai formatoptions=tcroqn2 comments=n:> | |
autocmd BufRead *.markdown set ai formatoptions=tcroqn2 comments=n:> | |
" Indent p tags | |
autocmd FileType html,eruby if g:html_indent_tags !~ '\\|p\>' | let g:html_indent_tags .= '\|p\|li\|dt\|dd' | endif | |
" Don't syntax highlight markdown because it's often wrong | |
autocmd! FileType mkd setlocal syn=off | |
" Leave the return key alone when in command line windows, since it's used | |
" to run commands there. | |
autocmd! CmdwinEnter * :unmap <cr> | |
autocmd! CmdwinLeave * :call MapCR() | |
augroup END | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" MULTIPURPOSE TAB KEY | |
" Indent if we're at the beginning of a line. Else, do completion. | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
function! InsertTabWrapper() | |
let col = col('.') - 1 | |
if !col || getline('.')[col - 1] !~ '\k' | |
return "\<tab>" | |
else | |
return "\<c-p>" | |
endif | |
endfunction | |
inoremap <tab> <c-r>=InsertTabWrapper()<cr> | |
inoremap <s-tab> <c-n> | |
"################################################## | |
" markdown | |
"################################################## | |
augroup mkd | |
autocmd BufRead *.mkd set ai formatoptions=tcroqn2 comments=n:> | |
augroup END | |
"################################################## | |
" via http://www.vim.org/scripts/script.php?script_id=30 | |
"################################################## | |
map ,cm :call PythonCommentSelection()<CR> | |
vmap ,cm :call PythonCommentSelection()<CR> | |
map ,cu :call PythonUncommentSelection()<CR> | |
vmap ,cu :call PythonUncommentSelection()<CR> | |
" Comment out selected lines | |
" commentString is inserted in non-empty lines, and should be aligned with | |
" the block | |
function! PythonCommentSelection() range | |
let commentString = "#" | |
let cl = a:firstline | |
let ind = 1000 " I hope nobody use so long lines! :) | |
" Look for smallest indent | |
while (cl <= a:lastline) | |
if strlen(getline(cl)) | |
let cind = indent(cl) | |
let ind = ((ind < cind) ? ind : cind) | |
endif | |
let cl = cl + 1 | |
endwhile | |
if (ind == 1000) | |
let ind = 1 | |
else | |
let ind = ind + 1 | |
endif | |
let cl = a:firstline | |
execute ":".cl | |
" Insert commentString in each non-empty line, in column ind | |
while (cl <= a:lastline) | |
if strlen(getline(cl)) | |
execute "normal ".ind."|i".commentString | |
endif | |
execute "normal \<Down>" | |
let cl = cl + 1 | |
endwhile | |
endfunction | |
" Uncomment selected lines | |
function! PythonUncommentSelection() range | |
" commentString could be different than the one from CommentSelection() | |
" For example, this could be "# \\=" | |
let commentString = "#" | |
let cl = a:firstline | |
while (cl <= a:lastline) | |
let ul = substitute(getline(cl), | |
\"\\(\\s*\\)".commentString."\\(.*\\)$", "\\1\\2", "") | |
call setline(cl, ul) | |
let cl = cl + 1 | |
endwhile | |
endfunction |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment