aboutsummaryrefslogtreecommitdiff
path: root/vim/gvimrc
diff options
context:
space:
mode:
Diffstat (limited to 'vim/gvimrc')
-rw-r--r--vim/gvimrc234
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