blob: fab890e68e51c26d3308971a94dad006587765d0 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim support file to define the default menus
2" You can also use this as a start for your own set of menus.
3"
4" Maintainer: Bram Moolenaar <Bram@vim.org>
Bram Moolenaare30de2d2008-07-01 19:56:57 +00005" Last Change: 2008 Jun 30
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" Note that ":an" (short for ":anoremenu") is often used to make a menu work
8" in all modes and avoid side effects from mappings defined by the user.
9
10" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
11" <CR> would not be recognized. See ":help 'cpoptions'".
12let s:cpo_save = &cpo
13set cpo&vim
14
15" Avoid installing the menus twice
16if !exists("did_install_default_menus")
17let did_install_default_menus = 1
18
19
20if exists("v:lang") || &langmenu != ""
21 " Try to find a menu translation file for the current language.
22 if &langmenu != ""
23 if &langmenu =~ "none"
24 let s:lang = ""
25 else
26 let s:lang = &langmenu
27 endif
28 else
29 let s:lang = v:lang
30 endif
31 " A language name must be at least two characters, don't accept "C"
32 if strlen(s:lang) > 1
33 " When the language does not include the charset add 'encoding'
34 if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
35 let s:lang = s:lang . '.' . &enc
36 endif
37
38 " We always use a lowercase name.
39 " Change "iso-8859" to "iso_8859" and "iso8859" to "iso_8859", some
40 " systems appear to use this.
41 " Change spaces to underscores.
42 let s:lang = substitute(tolower(s:lang), '\.iso-', ".iso_", "")
43 let s:lang = substitute(s:lang, '\.iso8859', ".iso_8859", "")
44 let s:lang = substitute(s:lang, " ", "_", "g")
45 " Remove "@euro", otherwise "LC_ALL=de_DE@euro gvim" will show English menus
46 let s:lang = substitute(s:lang, "@euro", "", "")
47 " Change "iso_8859-1" and "iso_8859-15" to "latin1", we always use the
48 " same menu file for them.
49 let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "")
50 menutrans clear
51 exe "runtime! lang/menu_" . s:lang . ".vim"
52
53 if !exists("did_menu_trans")
54 " There is no exact match, try matching with a wildcard added
55 " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE).
56 let s:lang = substitute(s:lang, '\.[^.]*', "", "")
Bram Moolenaar05159a02005-02-26 23:04:13 +000057 exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000058
Bram Moolenaare2cc9702005-03-15 22:43:58 +000059 if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
Bram Moolenaar071d4272004-06-13 20:20:40 +000060 " On windows locale names are complicated, try using $LANG, it might
Bram Moolenaare2cc9702005-03-15 22:43:58 +000061 " have been set by set_init_1(). But don't do this for "en" or "en_us".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000062 " But don't match "slovak" when $LANG is "sl".
63 exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000064 endif
65 endif
66 endif
67endif
68
69
70" Help menu
71an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
72an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
73an 9999.30 &Help.&How-to\ links :help how-to<CR>
74an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
75an 9999.45 &Help.-sep1- <Nop>
76an 9999.50 &Help.&Credits :help credits<CR>
77an 9999.60 &Help.Co&pying :help copying<CR>
78an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
79an 9999.70 &Help.O&rphans :help kcc<CR>
80an 9999.75 &Help.-sep2- <Nop>
81an 9999.80 &Help.&Version :version<CR>
82an 9999.90 &Help.&About :intro<CR>
83
84fun! s:Helpfind()
85 if !exists("g:menutrans_help_dialog")
86 let g:menutrans_help_dialog = "Enter a command or word to find help on:\n\nPrepend i_ for Input mode commands (e.g.: i_CTRL-X)\nPrepend c_ for command-line editing commands (e.g.: c_<Del>)\nPrepend ' for an option name (e.g.: 'shiftwidth')"
87 endif
88 let h = inputdialog(g:menutrans_help_dialog)
89 if h != ""
90 let v:errmsg = ""
91 silent! exe "help " . h
92 if v:errmsg != ""
93 echo v:errmsg
94 endif
95 endif
96endfun
97
98" File menu
99an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
100an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
Bram Moolenaar5c8837f2006-02-25 21:52:33 +0000101an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew :browse tabnew<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
103an <silent> 10.330 &File.&Close<Tab>:close
104 \ :if winheight(2) < 0 <Bar>
105 \ confirm enew <Bar>
106 \ else <Bar>
107 \ confirm close <Bar>
108 \ endif<CR>
109an 10.335 &File.-SEP1- <Nop>
110an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
111an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
112
113if has("diff")
114 an 10.400 &File.-SEP2- <Nop>
115 an 10.410 &File.Split\ &Diff\ with\.\.\. :browse vert diffsplit<CR>
116 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
117endif
118
119if has("printer")
120 an 10.500 &File.-SEP3- <Nop>
121 an 10.510 &File.&Print :hardcopy<CR>
122 vunmenu &File.&Print
123 vnoremenu &File.&Print :hardcopy<CR>
124elseif has("unix")
125 an 10.500 &File.-SEP3- <Nop>
126 an 10.510 &File.&Print :w !lpr<CR>
127 vunmenu &File.&Print
128 vnoremenu &File.&Print :w !lpr<CR>
129endif
130an 10.600 &File.-SEP4- <Nop>
131an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
132an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
133
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134func! <SID>SelectAll()
135 exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
136endfunc
137
Bram Moolenaaraba88572008-06-25 20:13:35 +0000138func! s:FnameEscape(fname)
139 if exists('*fnameescape')
140 return fnameescape(a:fname)
141 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
142endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143
144" Edit menu
145an 20.310 &Edit.&Undo<Tab>u u
146an 20.320 &Edit.&Redo<Tab>^R <C-R>
147an 20.330 &Edit.Rep&eat<Tab>\. .
148
149an 20.335 &Edit.-SEP1- <Nop>
150vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
151vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
152cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
153nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
154cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000155exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
156exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
158inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
159nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
160inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
161if has("win32") || has("win16")
162 vnoremenu 20.390 &Edit.&Delete<Tab>x x
163endif
164noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
165inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
166cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
167
168an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar843ee412004-06-30 16:16:41 +0000169if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000170 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
171 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000172 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
174 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000175 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000176else
177 an 20.410 &Edit.&Find<Tab>/ /
178 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
179 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
180 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
181endif
182
183an 20.425 &Edit.-SEP3- <Nop>
184an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000185an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
186
187fun! s:EditVimrc()
188 if $MYVIMRC != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000189 let fname = $MYVIMRC
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000190 elseif has("win32") || has("dos32") || has("dos16") || has("os2")
191 if $HOME != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000192 let fname = $HOME . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000193 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000194 let fname = $VIM . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000195 endif
196 elseif has("amiga")
197 let fname = "s:.vimrc"
198 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000199 let fname = $HOME . "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000200 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000201 let fname = s:FnameEscape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000202 if &mod
203 exe "split " . fname
204 else
205 exe "edit " . fname
206 endif
207endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000208
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000209fun! s:FixFText()
210 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000211 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000212endfun
213
Bram Moolenaar071d4272004-06-13 20:20:40 +0000214" Edit/Global Settings
215an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
216an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
217an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
218
219an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
220an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
221an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
222an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
223an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
224an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
225an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
226an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
227
228an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
229an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
230an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
231an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
232an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
233an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
234an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
235an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
236an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
237"
238" GUI options
239an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
240an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
241an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
242an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
243an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
244
245fun! s:SearchP()
246 if !exists("g:menutrans_path_dialog")
247 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
248 endif
249 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
250 if n != ""
251 let &path = substitute(n, ' ', '\\ ', 'g')
252 endif
253endfun
254
255fun! s:TagFiles()
256 if !exists("g:menutrans_tags_dialog")
257 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
258 endif
259 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
260 if n != ""
261 let &tags = substitute(n, ' ', '\\ ', 'g')
262 endif
263endfun
264
265fun! s:ToggleGuiOption(option)
266 " If a:option is already set in guioptions, then we want to remove it
267 if match(&guioptions, "\\C" . a:option) > -1
268 exec "set go-=" . a:option
269 else
270 exec "set go+=" . a:option
271 endif
272endfun
273
274" Edit/File Settings
275
276" Boolean options
277an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
278an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
279an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
280an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
281an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
282an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
283an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
284
285" other options
286an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
287an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
288an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
289an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
290an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
291an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
292an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
293
294an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
295an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
296an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
297an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
298an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
299an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
300
301an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
302an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
303fun! s:TextWidth()
304 if !exists("g:menutrans_textwidth_dialog")
305 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
306 endif
307 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
308 if n != ""
309 " remove leading zeros to avoid it being used as an octal number
310 let &tw = substitute(n, "^0*", "", "")
311 endif
312endfun
313
314fun! s:FileFormat()
315 if !exists("g:menutrans_fileformat_dialog")
316 let g:menutrans_fileformat_dialog = "Select format for writing the file"
317 endif
318 if !exists("g:menutrans_fileformat_choices")
319 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
320 endif
321 if &ff == "dos"
322 let def = 2
323 elseif &ff == "mac"
324 let def = 3
325 else
326 let def = 1
327 endif
328 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
329 if n == 1
330 set ff=unix
331 elseif n == 2
332 set ff=dos
333 elseif n == 3
334 set ff=mac
335 endif
336endfun
337
338" Setup the Edit.Color Scheme submenu
339let s:n = globpath(&runtimepath, "colors/*.vim")
340let s:idx = 100
341while strlen(s:n) > 0
342 let s:i = stridx(s:n, "\n")
343 if s:i < 0
344 let s:name = s:n
345 let s:n = ""
346 else
347 let s:name = strpart(s:n, 0, s:i)
348 let s:n = strpart(s:n, s:i + 1, 19999)
349 endif
350 " Ignore case for VMS and windows
351 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
352 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
353 unlet s:name
354 unlet s:i
355 let s:idx = s:idx + 10
356endwhile
357unlet s:n
358unlet s:idx
359
360" Setup the Edit.Keymap submenu
361if has("keymap")
362 let s:n = globpath(&runtimepath, "keymap/*.vim")
363 if s:n != ""
364 let s:idx = 100
365 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
366 while strlen(s:n) > 0
367 let s:i = stridx(s:n, "\n")
368 if s:i < 0
369 let s:name = s:n
370 let s:n = ""
371 else
372 let s:name = strpart(s:n, 0, s:i)
373 let s:n = strpart(s:n, s:i + 1, 19999)
374 endif
375 " Ignore case for VMS and windows
376 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
377 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
378 unlet s:name
379 unlet s:i
380 let s:idx = s:idx + 10
381 endwhile
382 unlet s:idx
383 endif
384 unlet s:n
385endif
Bram Moolenaardfccaf02004-12-31 20:56:11 +0000386if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000387 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
388endif
389
390" Programming menu
391if !exists("g:ctags_command")
392 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000393 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000394 else
395 let g:ctags_command = "ctags -R ."
396 endif
397endif
398
399an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
400vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
401vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
402an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
403an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
404
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000405if has("folding") || has("spell")
406 an 40.330 &Tools.-SEP1- <Nop>
407endif
408
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000409" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000410if has("spell")
411 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
412 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
413 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
Bram Moolenaardc27ac12005-07-06 22:35:45 +0000414 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000415 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +0000416 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000417 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
418 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
419 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
420 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
421 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
422 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
423 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
424 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
425
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000426 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000427 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000428 for cmd in s:undo_spellang
429 exe "silent! " . cmd
430 endfor
431 let s:undo_spellang = []
432
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000433 if &enc == "iso-8859-15"
434 let enc = "latin1"
435 else
436 let enc = &enc
437 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000438
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000439 let found = 0
440 let s = globpath(&rtp, "spell/*." . enc . ".spl")
441 if s != ""
442 let n = 300
443 for f in split(s, "\n")
444 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000445 if nm != "en" && nm !~ '/'
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000446 let found += 1
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000447 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
448 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
449 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000450 endif
451 let n += 10
452 endfor
453 endif
454 if found == 0
455 echomsg "Could not find other spell files"
456 elseif found == 1
457 echomsg "Found spell file " . nm
458 else
459 echomsg "Found " . found . " more spell files"
460 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000461 " Need to redo this when 'encoding' is changed.
462 augroup spellmenu
463 au! EncodingChanged * call <SID>SpellLang()
464 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000465 endfun
466
467endif
468
Bram Moolenaar071d4272004-06-13 20:20:40 +0000469" Tools.Fold Menu
470if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000471 " open close folds
472 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
473 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
474 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
475 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
476 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
477 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
478 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
479 " fold method
480 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
481 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
482 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
483 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
484 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
485 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
486 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
487 " create and delete folds
488 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
489 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
490 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
491 " moving around in folds
492 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
493 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
494 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
495 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
496 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
497 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
498 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
499 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
500 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
501endif " has folding
502
503if has("diff")
504 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
505 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
506 vunmenu &Tools.&Diff.&Get\ Block
507 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
508 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
509 vunmenu &Tools.&Diff.&Put\ Block
510 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
511endif
512
513an 40.358 &Tools.-SEP2- <Nop>
514an 40.360 &Tools.&Make<Tab>:make :make<CR>
515an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
516an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
517an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
518an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
519an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
520an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
521an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
522an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
523an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
524
525an 40.520 &Tools.-SEP3- <Nop>
526an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
527 \ :call <SID>XxdConv()<CR>
528an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
529 \ :call <SID>XxdBack()<CR>
530
531" Use a function to do the conversion, so that it also works with 'insertmode'
532" set.
533func! s:XxdConv()
534 let mod = &mod
535 if has("vms")
536 %!mc vim:xxd
537 else
538 call s:XxdFind()
539 exe '%!"' . g:xxdprogram . '"'
540 endif
541 if getline(1) =~ "^0000000:" " only if it worked
542 set ft=xxd
543 endif
544 let &mod = mod
545endfun
546
547func! s:XxdBack()
548 let mod = &mod
549 if has("vms")
550 %!mc vim:xxd -r
551 else
552 call s:XxdFind()
553 exe '%!"' . g:xxdprogram . '" -r'
554 endif
555 set ft=
556 doautocmd filetypedetect BufReadPost
557 let &mod = mod
558endfun
559
560func! s:XxdFind()
561 if !exists("g:xxdprogram")
562 " On the PC xxd may not be in the path but in the install directory
563 if (has("win32") || has("dos32")) && !executable("xxd")
564 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
565 else
566 let g:xxdprogram = "xxd"
567 endif
568 endif
569endfun
570
571" Setup the Tools.Compiler submenu
572let s:n = globpath(&runtimepath, "compiler/*.vim")
573let s:idx = 100
574while strlen(s:n) > 0
575 let s:i = stridx(s:n, "\n")
576 if s:i < 0
577 let s:name = s:n
578 let s:n = ""
579 else
580 let s:name = strpart(s:n, 0, s:i)
581 let s:n = strpart(s:n, s:i + 1, 19999)
582 endif
583 " Ignore case for VMS and windows
584 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000585 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000586 unlet s:name
587 unlet s:i
588 let s:idx = s:idx + 10
589endwhile
590unlet s:n
591unlet s:idx
592
593if !exists("no_buffers_menu")
594
595" Buffer list menu -- Setup functions & actions
596
597" wait with building the menu until after loading 'session' files. Makes
598" startup faster.
599let s:bmenu_wait = 1
600
601if !exists("bmenu_priority")
602 let bmenu_priority = 60
603endif
604
605func! s:BMAdd()
606 if s:bmenu_wait == 0
607 " when adding too many buffers, redraw in short format
608 if s:bmenu_count == &menuitems && s:bmenu_short == 0
609 call s:BMShow()
610 else
611 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
612 let s:bmenu_count = s:bmenu_count + 1
613 endif
614 endif
615endfunc
616
617func! s:BMRemove()
618 if s:bmenu_wait == 0
619 let name = expand("<afile>")
620 if isdirectory(name)
621 return
622 endif
623 let munge = <SID>BMMunge(name, expand("<abuf>"))
624
625 if s:bmenu_short == 0
626 exe 'silent! aun &Buffers.' . munge
627 else
628 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
629 endif
630 let s:bmenu_count = s:bmenu_count - 1
631 endif
632endfunc
633
634" Create the buffer menu (delete an existing one first).
635func! s:BMShow(...)
636 let s:bmenu_wait = 1
637 let s:bmenu_short = 1
638 let s:bmenu_count = 0
639 "
640 " get new priority, if exists
641 if a:0 == 1
642 let g:bmenu_priority = a:1
643 endif
644
645 " remove old menu, if exists; keep one entry to avoid a torn off menu to
646 " disappear.
647 silent! unmenu &Buffers
648 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
649 silent! unmenu! &Buffers
650
651 " create new menu; set 'cpo' to include the <CR>
652 let cpo_save = &cpo
653 set cpo&vim
654 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
655 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
656 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
657 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
658 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
659 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
660 let &cpo = cpo_save
661 unmenu &Buffers.Dummy
662
663 " figure out how many buffers there are
664 let buf = 1
665 while buf <= bufnr('$')
666 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000667 let s:bmenu_count = s:bmenu_count + 1
668 endif
669 let buf = buf + 1
670 endwhile
671 if s:bmenu_count <= &menuitems
672 let s:bmenu_short = 0
673 endif
674
675 " iterate through buffer list, adding each buffer to the menu:
676 let buf = 1
677 while buf <= bufnr('$')
678 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000679 call <SID>BMFilename(bufname(buf), buf)
680 endif
681 let buf = buf + 1
682 endwhile
683 let s:bmenu_wait = 0
684 aug buffer_list
685 au!
686 au BufCreate,BufFilePost * call <SID>BMAdd()
687 au BufDelete,BufFilePre * call <SID>BMRemove()
688 aug END
689endfunc
690
691func! s:BMHash(name)
692 " Make name all upper case, so that chars are between 32 and 96
693 let nm = substitute(a:name, ".*", '\U\0', "")
694 if has("ebcdic")
695 " HACK: Replace all non alphabetics with 'Z'
696 " Just to make it work for now.
697 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
698 let sp = char2nr('A') - 1
699 else
700 let sp = char2nr(' ')
701 endif
702 " convert first six chars into a number for sorting:
703 return (char2nr(nm[0]) - sp) * 0x800000 + (char2nr(nm[1]) - sp) * 0x20000 + (char2nr(nm[2]) - sp) * 0x1000 + (char2nr(nm[3]) - sp) * 0x80 + (char2nr(nm[4]) - sp) * 0x20 + (char2nr(nm[5]) - sp)
704endfunc
705
706func! s:BMHash2(name)
707 let nm = substitute(a:name, ".", '\L\0', "")
708 " Not exactly right for EBCDIC...
709 if nm[0] < 'a' || nm[0] > 'z'
710 return '&others.'
711 elseif nm[0] <= 'd'
712 return '&abcd.'
713 elseif nm[0] <= 'h'
714 return '&efgh.'
715 elseif nm[0] <= 'l'
716 return '&ijkl.'
717 elseif nm[0] <= 'p'
718 return '&mnop.'
719 elseif nm[0] <= 't'
720 return '&qrst.'
721 else
722 return '&u-z.'
723 endif
724endfunc
725
726" insert a buffer name into the buffer menu:
727func! s:BMFilename(name, num)
728 if isdirectory(a:name)
729 return
730 endif
731 let munge = <SID>BMMunge(a:name, a:num)
732 let hash = <SID>BMHash(munge)
733 if s:bmenu_short == 0
734 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
735 else
736 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
737 endif
738 " set 'cpo' to include the <CR>
739 let cpo_save = &cpo
740 set cpo&vim
741 exe name . ' :confirm b' . a:num . '<CR>'
742 let &cpo = cpo_save
743endfunc
744
745" Truncate a long path to fit it in a menu item.
746if !exists("g:bmenu_max_pathlen")
747 let g:bmenu_max_pathlen = 35
748endif
749func! s:BMTruncName(fname)
750 let name = a:fname
751 if g:bmenu_max_pathlen < 5
752 let name = ""
753 else
754 let len = strlen(name)
755 if len > g:bmenu_max_pathlen
756 let amountl = (g:bmenu_max_pathlen / 2) - 2
757 let amountr = g:bmenu_max_pathlen - amountl - 3
758 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
759 let left = substitute(name, pattern, '\1', '')
760 let right = substitute(name, pattern, '\2', '')
761 if strlen(left) + strlen(right) < len
762 let name = left . '...' . right
763 endif
764 endif
765 endif
766 return name
767endfunc
768
769func! s:BMMunge(fname, bnum)
770 let name = a:fname
771 if name == ''
772 if !exists("g:menutrans_no_file")
773 let g:menutrans_no_file = "[No file]"
774 endif
775 let name = g:menutrans_no_file
776 else
777 let name = fnamemodify(name, ':p:~')
778 endif
779 " detach file name and separate it out:
780 let name2 = fnamemodify(name, ':t')
781 if a:bnum >= 0
782 let name2 = name2 . ' (' . a:bnum . ')'
783 endif
784 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
785 let name = escape(name, "\\. \t|")
786 let name = substitute(name, "&", "&&", "g")
787 let name = substitute(name, "\n", "^@", "g")
788 return name
789endfunc
790
791" When just starting Vim, load the buffer menu later
792if has("vim_starting")
793 augroup LoadBufferMenu
794 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
795 au VimEnter * au! LoadBufferMenu
796 augroup END
797else
798 call <SID>BMShow()
799endif
800
801endif " !exists("no_buffers_menu")
802
803" Window menu
804an 70.300 &Window.&New<Tab>^Wn <C-W>n
805an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
806an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
807an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
808if has("vertsplit")
809 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
810 if !exists("*MenuExplOpen")
811 fun MenuExplOpen()
812 if @% == ""
813 20vsp .
814 else
Bram Moolenaaraba88572008-06-25 20:13:35 +0000815 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000816 endif
817 endfun
818 endif
819endif
820an 70.335 &Window.-SEP1- <Nop>
821an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
822an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
823an 70.350 &Window.-SEP2- <Nop>
824an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
825an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
826an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
827an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
828an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
829an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
830an 70.365 &Window.-SEP3- <Nop>
831an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
832an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
833an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
834an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
835an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
836
837" The popup menu
838an 1.10 PopUp.&Undo u
839an 1.15 PopUp.-SEP1- <Nop>
840vnoremenu 1.20 PopUp.Cu&t "+x
841vnoremenu 1.30 PopUp.&Copy "+y
842cnoremenu 1.30 PopUp.&Copy <C-Y>
843nnoremenu 1.40 PopUp.&Paste "+gP
844cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000845exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
846exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000847vnoremenu 1.50 PopUp.&Delete x
848an 1.55 PopUp.-SEP2- <Nop>
849vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000850
851nnoremenu 1.70 PopUp.Select\ &Word vaw
852onoremenu 1.70 PopUp.Select\ &Word aw
853vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
854inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
855cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
856
857nnoremenu 1.73 PopUp.Select\ &Sentence vas
858onoremenu 1.73 PopUp.Select\ &Sentence as
859vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
860inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
861cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
862
863nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
864onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
865vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
866inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
867cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
868
869nnoremenu 1.80 PopUp.Select\ &Line V
870onoremenu 1.80 PopUp.Select\ &Line <C-C>V
871vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
872inoremenu 1.80 PopUp.Select\ &Line <C-O>V
873cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
874
875nnoremenu 1.90 PopUp.Select\ &Block <C-V>
876onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
877vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
878inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
879cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
880
Bram Moolenaar071d4272004-06-13 20:20:40 +0000881noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
882inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
883cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
884
Bram Moolenaar45360022005-07-21 21:08:21 +0000885if has("spell")
886 " Spell suggestions in the popup menu. Note that this will slow down the
887 " appearance of the menu!
888 func! <SID>SpellPopup()
889 if exists("s:changeitem") && s:changeitem != ''
890 call <SID>SpellDel()
891 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000892
893 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000894 if !&spell || &spelllang == ''
895 return
896 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000897
898 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000899 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000900 if col('.') > curcol " don't use word after the cursor
901 let w = ''
902 call cursor(0, curcol) " put the cursor back where it was
903 endif
904 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000905 if a == 'caps'
906 let s:suglist = [substitute(w, '.*', '\u&', '')]
907 else
908 let s:suglist = spellsuggest(w, 10)
909 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000910 if len(s:suglist) <= 0
911 call cursor(0, curcol) " put the cursor back where it was
912 else
913 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
914 let s:fromword = w
915 let pri = 1
916 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000917 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000918 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
919 let pri += 1
920 endfor
921
922 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000923 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000924
925 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000926 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000927
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000928 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +0000929 endif
930 endif
931 endfunc
932
933 func! <SID>SpellReplace(n)
934 let l = getline('.')
935 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
936 \ . strpart(l, col('.') + len(s:fromword) - 1))
937 endfunc
938
939 func! <SID>SpellDel()
940 exe "aunmenu PopUp." . s:changeitem
941 exe "aunmenu PopUp." . s:additem
942 exe "aunmenu PopUp." . s:ignoreitem
943 aunmenu PopUp.-SpellSep-
944 let s:changeitem = ''
945 endfun
946
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000947 augroup SpellPopupMenu
948 au! MenuPopup * call <SID>SpellPopup()
949 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +0000950endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000951
952" The GUI toolbar (for MS-Windows and GTK)
953if has("toolbar")
954 an 1.10 ToolBar.Open :browse confirm e<CR>
955 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
956 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
957
958 if has("printer")
959 an 1.40 ToolBar.Print :hardcopy<CR>
960 vunmenu ToolBar.Print
961 vnoremenu ToolBar.Print :hardcopy<CR>
962 elseif has("unix")
963 an 1.40 ToolBar.Print :w !lpr<CR>
964 vunmenu ToolBar.Print
965 vnoremenu ToolBar.Print :w !lpr<CR>
966 endif
967
968 an 1.45 ToolBar.-sep1- <Nop>
969 an 1.50 ToolBar.Undo u
970 an 1.60 ToolBar.Redo <C-R>
971
972 an 1.65 ToolBar.-sep2- <Nop>
973 vnoremenu 1.70 ToolBar.Cut "+x
974 vnoremenu 1.80 ToolBar.Copy "+y
975 cnoremenu 1.80 ToolBar.Copy <C-Y>
976 nnoremenu 1.90 ToolBar.Paste "+gP
977 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000978 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
979 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000980
981 if !has("gui_athena")
982 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000983 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000984 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000985 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000986 an 1.110 ToolBar.FindNext n
987 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000988 endif
989
Bram Moolenaar071d4272004-06-13 20:20:40 +0000990 an 1.215 ToolBar.-sep5- <Nop>
991 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
992 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
993 an 1.240 ToolBar.RunScript :browse so<CR>
994
995 an 1.245 ToolBar.-sep6- <Nop>
996 an 1.250 ToolBar.Make :make<CR>
997 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
998 an 1.280 ToolBar.TagJump g<C-]>
999
1000 an 1.295 ToolBar.-sep7- <Nop>
1001 an 1.300 ToolBar.Help :help<CR>
1002 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1003
1004" Only set the tooltips here if not done in a language menu file
1005if exists("*Do_toolbar_tmenu")
1006 call Do_toolbar_tmenu()
1007else
1008 let did_toolbar_tmenu = 1
1009 tmenu ToolBar.Open Open file
1010 tmenu ToolBar.Save Save current file
1011 tmenu ToolBar.SaveAll Save all files
1012 tmenu ToolBar.Print Print
1013 tmenu ToolBar.Undo Undo
1014 tmenu ToolBar.Redo Redo
1015 tmenu ToolBar.Cut Cut to clipboard
1016 tmenu ToolBar.Copy Copy to clipboard
1017 tmenu ToolBar.Paste Paste from Clipboard
1018 if !has("gui_athena")
1019 tmenu ToolBar.Find Find...
1020 tmenu ToolBar.FindNext Find Next
1021 tmenu ToolBar.FindPrev Find Previous
1022 tmenu ToolBar.Replace Find / Replace...
1023 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001024 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001025 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001026 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001027 tmenu ToolBar.Make Make current project (:make)
1028 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001029 tmenu ToolBar.TagJump Jump to tag under cursor
1030 tmenu ToolBar.Help Vim Help
1031 tmenu ToolBar.FindHelp Search Vim Help
1032endif
1033
1034" Select a session to load; default to current session name if present
1035fun! s:LoadVimSesn()
1036 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001037 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001038 else
1039 let name = "Session.vim"
1040 endif
1041 execute "browse so " . name
1042endfun
1043
1044" Select a session to save; default to current session name if present
1045fun! s:SaveVimSesn()
1046 if strlen(v:this_session) == 0
1047 let v:this_session = "Session.vim"
1048 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001049 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001050endfun
1051
1052endif
1053
1054endif " !exists("did_install_default_menus")
1055
1056" Define these items always, so that syntax can be switched on when it wasn't.
1057" But skip them when the Syntax menu was disabled by the user.
1058if !exists("did_install_syntax_menu")
1059 an 50.212 &Syntax.&Manual :syn manual<CR>
1060 an 50.214 &Syntax.A&utomatic :syn on<CR>
1061 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1062 if !exists("*s:SynOnOff")
1063 fun s:SynOnOff()
1064 if has("syntax_items")
1065 syn clear
1066 else
1067 if !exists("g:syntax_on")
1068 syn manual
1069 endif
1070 set syn=ON
1071 endif
1072 endfun
1073 endif
1074endif
1075
1076
1077" Install the Syntax menu only when filetype.vim has been loaded or when
1078" manual syntax highlighting is enabled.
1079" Avoid installing the Syntax menu twice.
1080if (exists("did_load_filetypes") || exists("syntax_on"))
1081 \ && !exists("did_install_syntax_menu")
1082 let did_install_syntax_menu = 1
1083
1084" Skip setting up the individual syntax selection menus unless
1085" do_syntax_sel_menu is defined (it takes quite a bit of time).
1086if exists("do_syntax_sel_menu")
1087 runtime! synmenu.vim
1088else
1089 an 50.10 &Syntax.&Show\ filetypes\ in\ menu :let do_syntax_sel_menu = 1<Bar>runtime! synmenu.vim<Bar>aunmenu &Syntax.&Show\ filetypes\ in\ menu<CR>
1090 an 50.195 &Syntax.-SEP1- <Nop>
1091endif
1092
1093an 50.210 &Syntax.&Off :syn off<CR>
1094an 50.700 &Syntax.-SEP3- <Nop>
1095an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1096an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1097an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1098
1099endif " !exists("did_install_syntax_menu")
1100
Bram Moolenaar071d4272004-06-13 20:20:40 +00001101" Restore the previous value of 'cpoptions'.
1102let &cpo = s:cpo_save
1103unlet s:cpo_save
1104
1105" vim: set sw=2 :