diff options
Diffstat (limited to 'vim/gvimrc')
| -rw-r--r-- | vim/gvimrc | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/vim/gvimrc b/vim/gvimrc new file mode 100644 index 0000000..af0fe2c --- /dev/null +++ b/vim/gvimrc @@ -0,0 +1,234 @@ +if has("gui_macvim") + " Fullscreen takes up entire screen + set fuoptions=maxhorz,maxvert + + " Command-T for CommandT + macmenu &File.New\ Tab key=<D-T> + map <D-t> :CommandT<CR> + imap <D-t> <Esc>:CommandT<CR> + + " Command-Return for fullscreen + macmenu Window.Toggle\ Full\ Screen\ Mode key=<D-CR> + + " Command-Shift-F for Ack + map <D-F> :Ack<space> + + " Command-e for ConqueTerm + map <D-e> :call StartTerm()<CR> + + " Command-/ to toggle comments + map <D-/> <plug>NERDCommenterToggle<CR> + imap <D-/> <Esc><plug>NERDCommenterToggle<CR>i + + + " Command-][ to increase/decrease indentation + vmap <D-]> >gv + vmap <D-[> <gv + + " Map Command-# to switch tabs + map <D-0> 0gt + imap <D-0> <Esc>0gt + map <D-1> 1gt + imap <D-1> <Esc>1gt + map <D-2> 2gt + imap <D-2> <Esc>2gt + map <D-3> 3gt + imap <D-3> <Esc>3gt + map <D-4> 4gt + imap <D-4> <Esc>4gt + map <D-5> 5gt + imap <D-5> <Esc>5gt + map <D-6> 6gt + imap <D-6> <Esc>6gt + map <D-7> 7gt + imap <D-7> <Esc>7gt + map <D-8> 8gt + imap <D-8> <Esc>8gt + map <D-9> 9gt + imap <D-9> <Esc>9gt + + " Command-Option-ArrowKey to switch viewports + map <D-M-Up> <C-w>k + imap <D-M-Up> <Esc> <C-w>k + map <D-M-Down> <C-w>j + imap <D-M-Down> <Esc> <C-w>j + map <D-M-Right> <C-w>l + imap <D-M-Right> <Esc> <C-w>l + map <D-M-Left> <C-w>h + imap <D-M-Left> <C-w>h + + " Adjust viewports to the same size + map <Leader>= <C-w>= + imap <Leader>= <Esc> <C-w>= +endif + +" Don't beep +set visualbell + +" Start without the toolbar +set guioptions-=T + +" Default gui color scheme +color ir_black + +" ConqueTerm wrapper +function StartTerm() + execute 'ConqueTerm ' . $SHELL . ' --login' + setlocal listchars=tab:\ \ +endfunction + +" Project Tree +if exists("loaded_nerd_tree") + autocmd VimEnter * call s:CdIfDirectory(expand("<amatch>")) + autocmd FocusGained * call s:UpdateNERDTree() + autocmd WinEnter * call s:CloseIfOnlyNerdTreeLeft() +endif + +" Close all open buffers on entering a window if the only +" buffer that's left is the NERDTree buffer +function s:CloseIfOnlyNerdTreeLeft() + if exists("t:NERDTreeBufName") + if bufwinnr(t:NERDTreeBufName) != -1 + if winnr("$") == 1 + q + endif + endif + endif +endfunction + +" If the parameter is a directory, cd into it +function s:CdIfDirectory(directory) + let explicitDirectory = isdirectory(a:directory) + let directory = explicitDirectory || empty(a:directory) + + if explicitDirectory + exe "cd " . fnameescape(a:directory) + endif + + " Allows reading from stdin + " ex: git diff | mvim -R - + if strlen(a:directory) == 0 + return + endif + + if directory + NERDTree + wincmd p + bd + endif + + if explicitDirectory + wincmd p + endif +endfunction + +" NERDTree utility function +function s:UpdateNERDTree(...) + let stay = 0 + + if(exists("a:1")) + let stay = a:1 + end + + if exists("t:NERDTreeBufName") + let nr = bufwinnr(t:NERDTreeBufName) + if nr != -1 + exe nr . "wincmd w" + exe substitute(mapcheck("R"), "<CR>", "", "") + if !stay + wincmd p + end + endif + endif + + if exists(":CommandTFlush") == 2 + CommandTFlush + endif +endfunction + +" Utility functions to create file commands +function s:CommandCabbr(abbreviation, expansion) + execute 'cabbrev ' . a:abbreviation . ' <c-r>=getcmdpos() == 1 && getcmdtype() == ":" ? "' . a:expansion . '" : "' . a:abbreviation . '"<CR>' +endfunction + +function s:FileCommand(name, ...) + if exists("a:1") + let funcname = a:1 + else + let funcname = a:name + endif + + execute 'command -nargs=1 -complete=file ' . a:name . ' :call ' . funcname . '(<f-args>)' +endfunction + +function s:DefineCommand(name, destination) + call s:FileCommand(a:destination) + call s:CommandCabbr(a:name, a:destination) +endfunction + +" Public NERDTree-aware versions of builtin functions +function ChangeDirectory(dir, ...) + execute "cd " . fnameescape(a:dir) + let stay = exists("a:1") ? a:1 : 1 + + NERDTree + + if !stay + wincmd p + endif +endfunction + +function Touch(file) + execute "!touch " . shellescape(a:file, 1) + call s:UpdateNERDTree() +endfunction + +function Remove(file) + let current_path = expand("%") + let removed_path = fnamemodify(a:file, ":p") + + if (current_path == removed_path) && (getbufvar("%", "&modified")) + echo "You are trying to remove the file you are editing. Please close the buffer first." + else + execute "!rm " . shellescape(a:file, 1) + endif + + call s:UpdateNERDTree() +endfunction + +function Mkdir(file) + execute "!mkdir " . shellescape(a:file, 1) + call s:UpdateNERDTree() +endfunction + +function Edit(file) + if exists("b:NERDTreeRoot") + wincmd p + endif + + execute "e " . fnameescape(a:file) + +ruby << RUBY + destination = File.expand_path(VIM.evaluate(%{system("dirname " . shellescape(a:file, 1))})) + pwd = File.expand_path(Dir.pwd) + home = pwd == File.expand_path("~") + + if home || Regexp.new("^" + Regexp.escape(pwd)) !~ destination + VIM.command(%{call ChangeDirectory(fnamemodify(a:file, ":h"), 0)}) + end +RUBY +endfunction + +" Define the NERDTree-aware aliases +if exists("loaded_nerd_tree") + call s:DefineCommand("cd", "ChangeDirectory") + call s:DefineCommand("touch", "Touch") + call s:DefineCommand("rm", "Remove") + call s:DefineCommand("e", "Edit") + call s:DefineCommand("mkdir", "Mkdir") +endif + +" Include user's local vim config +if filereadable(expand("~/.gvimrc.local")) + source ~/.gvimrc.local +endif |