]> git.r.bdr.sh - rbdr/dotfiles/blob - vim/gvimrc
Cleans and fixes for mappings
[rbdr/dotfiles] / vim / gvimrc
1 if has("gui_macvim")
2 " Fullscreen takes up entire screen
3 set fuoptions=maxhorz,maxvert
4
5 " Command-T for CommandT
6 macmenu &File.New\ Tab key=<D-T>
7 map <D-t> :CommandT<CR>
8 imap <D-t> <Esc>:CommandT<CR>
9
10 " Command-Return for fullscreen
11 macmenu Window.Toggle\ Full\ Screen\ Mode key=<D-CR>
12
13 " Command-Shift-F for Ack
14 map <D-F> :Ack<space>
15
16 " Command-e for ConqueTerm
17 map <D-e> :call StartTerm()<CR>
18
19 " Command-/ to toggle comments
20 map <D-/> <plug>NERDCommenterToggle<CR>
21 imap <D-/> <Esc><plug>NERDCommenterToggle<CR>i
22
23
24 " Command-][ to increase/decrease indentation
25 vmap <D-]> >gv
26 vmap <D-[> <gv
27
28 " Map Command-# to switch tabs
29 map <D-0> 0gt
30 imap <D-0> <Esc>0gt
31 map <D-1> 1gt
32 imap <D-1> <Esc>1gt
33 map <D-2> 2gt
34 imap <D-2> <Esc>2gt
35 map <D-3> 3gt
36 imap <D-3> <Esc>3gt
37 map <D-4> 4gt
38 imap <D-4> <Esc>4gt
39 map <D-5> 5gt
40 imap <D-5> <Esc>5gt
41 map <D-6> 6gt
42 imap <D-6> <Esc>6gt
43 map <D-7> 7gt
44 imap <D-7> <Esc>7gt
45 map <D-8> 8gt
46 imap <D-8> <Esc>8gt
47 map <D-9> 9gt
48 imap <D-9> <Esc>9gt
49
50 " Command-Option-ArrowKey to switch viewports
51 map <D-M-Up> <C-w>k
52 imap <D-M-Up> <Esc> <C-w>k
53 map <D-M-Down> <C-w>j
54 imap <D-M-Down> <Esc> <C-w>j
55 map <D-M-Right> <C-w>l
56 imap <D-M-Right> <Esc> <C-w>l
57 map <D-M-Left> <C-w>h
58 imap <D-M-Left> <C-w>h
59
60 " Adjust viewports to the same size
61 map <Leader>= <C-w>=
62 imap <Leader>= <Esc> <C-w>=
63 endif
64
65 " Don't beep
66 set visualbell
67
68 " Start without the toolbar
69 set guioptions-=T
70
71 " Default gui color scheme
72 color ir_black
73
74 " ConqueTerm wrapper
75 function StartTerm()
76 execute 'ConqueTerm ' . $SHELL . ' --login'
77 setlocal listchars=tab:\ \
78 endfunction
79
80 " Project Tree
81 if exists("loaded_nerd_tree")
82 autocmd VimEnter * call s:CdIfDirectory(expand("<amatch>"))
83 autocmd FocusGained * call s:UpdateNERDTree()
84 autocmd WinEnter * call s:CloseIfOnlyNerdTreeLeft()
85 endif
86
87 " Close all open buffers on entering a window if the only
88 " buffer that's left is the NERDTree buffer
89 function s:CloseIfOnlyNerdTreeLeft()
90 if exists("t:NERDTreeBufName")
91 if bufwinnr(t:NERDTreeBufName) != -1
92 if winnr("$") == 1
93 q
94 endif
95 endif
96 endif
97 endfunction
98
99 " If the parameter is a directory, cd into it
100 function s:CdIfDirectory(directory)
101 let explicitDirectory = isdirectory(a:directory)
102 let directory = explicitDirectory || empty(a:directory)
103
104 if explicitDirectory
105 exe "cd " . fnameescape(a:directory)
106 endif
107
108 " Allows reading from stdin
109 " ex: git diff | mvim -R -
110 if strlen(a:directory) == 0
111 return
112 endif
113
114 if directory
115 NERDTree
116 wincmd p
117 bd
118 endif
119
120 if explicitDirectory
121 wincmd p
122 endif
123 endfunction
124
125 " NERDTree utility function
126 function s:UpdateNERDTree(...)
127 let stay = 0
128
129 if(exists("a:1"))
130 let stay = a:1
131 end
132
133 if exists("t:NERDTreeBufName")
134 let nr = bufwinnr(t:NERDTreeBufName)
135 if nr != -1
136 exe nr . "wincmd w"
137 exe substitute(mapcheck("R"), "<CR>", "", "")
138 if !stay
139 wincmd p
140 end
141 endif
142 endif
143
144 if exists(":CommandTFlush") == 2
145 CommandTFlush
146 endif
147 endfunction
148
149 " Utility functions to create file commands
150 function s:CommandCabbr(abbreviation, expansion)
151 execute 'cabbrev ' . a:abbreviation . ' <c-r>=getcmdpos() == 1 && getcmdtype() == ":" ? "' . a:expansion . '" : "' . a:abbreviation . '"<CR>'
152 endfunction
153
154 function s:FileCommand(name, ...)
155 if exists("a:1")
156 let funcname = a:1
157 else
158 let funcname = a:name
159 endif
160
161 execute 'command -nargs=1 -complete=file ' . a:name . ' :call ' . funcname . '(<f-args>)'
162 endfunction
163
164 function s:DefineCommand(name, destination)
165 call s:FileCommand(a:destination)
166 call s:CommandCabbr(a:name, a:destination)
167 endfunction
168
169 " Public NERDTree-aware versions of builtin functions
170 function ChangeDirectory(dir, ...)
171 execute "cd " . fnameescape(a:dir)
172 let stay = exists("a:1") ? a:1 : 1
173
174 NERDTree
175
176 if !stay
177 wincmd p
178 endif
179 endfunction
180
181 function Touch(file)
182 execute "!touch " . shellescape(a:file, 1)
183 call s:UpdateNERDTree()
184 endfunction
185
186 function Remove(file)
187 let current_path = expand("%")
188 let removed_path = fnamemodify(a:file, ":p")
189
190 if (current_path == removed_path) && (getbufvar("%", "&modified"))
191 echo "You are trying to remove the file you are editing. Please close the buffer first."
192 else
193 execute "!rm " . shellescape(a:file, 1)
194 endif
195
196 call s:UpdateNERDTree()
197 endfunction
198
199 function Mkdir(file)
200 execute "!mkdir " . shellescape(a:file, 1)
201 call s:UpdateNERDTree()
202 endfunction
203
204 function Edit(file)
205 if exists("b:NERDTreeRoot")
206 wincmd p
207 endif
208
209 execute "e " . fnameescape(a:file)
210
211 ruby << RUBY
212 destination = File.expand_path(VIM.evaluate(%{system("dirname " . shellescape(a:file, 1))}))
213 pwd = File.expand_path(Dir.pwd)
214 home = pwd == File.expand_path("~")
215
216 if home || Regexp.new("^" + Regexp.escape(pwd)) !~ destination
217 VIM.command(%{call ChangeDirectory(fnamemodify(a:file, ":h"), 0)})
218 end
219 RUBY
220 endfunction
221
222 " Define the NERDTree-aware aliases
223 if exists("loaded_nerd_tree")
224 call s:DefineCommand("cd", "ChangeDirectory")
225 call s:DefineCommand("touch", "Touch")
226 call s:DefineCommand("rm", "Remove")
227 call s:DefineCommand("e", "Edit")
228 call s:DefineCommand("mkdir", "Mkdir")
229 endif
230
231 " Include user's local vim config
232 if filereadable(expand("~/.gvimrc.local"))
233 source ~/.gvimrc.local
234 endif