blob: b7eccea301129d64ebd9d53636920758d06686c7 [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 Moolenaar5c736222010-01-06 20:54:52 +01005" Last Change: 2009 Feb 26
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)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100141 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000142 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
143endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144
145" Edit menu
146an 20.310 &Edit.&Undo<Tab>u u
147an 20.320 &Edit.&Redo<Tab>^R <C-R>
148an 20.330 &Edit.Rep&eat<Tab>\. .
149
150an 20.335 &Edit.-SEP1- <Nop>
151vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
152vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
153cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
154nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
155cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000156exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
157exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
159inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
160nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
161inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
162if has("win32") || has("win16")
163 vnoremenu 20.390 &Edit.&Delete<Tab>x x
164endif
165noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
166inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
167cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
168
169an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar843ee412004-06-30 16:16:41 +0000170if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
172 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000173 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
175 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000176 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000177else
178 an 20.410 &Edit.&Find<Tab>/ /
179 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
180 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
181 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
182endif
183
184an 20.425 &Edit.-SEP3- <Nop>
185an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000186an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
187
188fun! s:EditVimrc()
189 if $MYVIMRC != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000190 let fname = $MYVIMRC
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000191 elseif has("win32") || has("dos32") || has("dos16") || has("os2")
192 if $HOME != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000193 let fname = $HOME . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000194 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000195 let fname = $VIM . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000196 endif
197 elseif has("amiga")
198 let fname = "s:.vimrc"
199 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000200 let fname = $HOME . "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000201 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000202 let fname = s:FnameEscape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000203 if &mod
204 exe "split " . fname
205 else
206 exe "edit " . fname
207 endif
208endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000210fun! s:FixFText()
211 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000212 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000213endfun
214
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215" Edit/Global Settings
216an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
217an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
218an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
219
220an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
221an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
222an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
223an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
224an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
225an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
226an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
227an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
228
229an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
230an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
231an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
232an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
233an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
234an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
235an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
236an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
237an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
238"
239" GUI options
240an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
241an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
242an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
243an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
244an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
245
246fun! s:SearchP()
247 if !exists("g:menutrans_path_dialog")
248 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
249 endif
250 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
251 if n != ""
252 let &path = substitute(n, ' ', '\\ ', 'g')
253 endif
254endfun
255
256fun! s:TagFiles()
257 if !exists("g:menutrans_tags_dialog")
258 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
259 endif
260 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
261 if n != ""
262 let &tags = substitute(n, ' ', '\\ ', 'g')
263 endif
264endfun
265
266fun! s:ToggleGuiOption(option)
267 " If a:option is already set in guioptions, then we want to remove it
268 if match(&guioptions, "\\C" . a:option) > -1
269 exec "set go-=" . a:option
270 else
271 exec "set go+=" . a:option
272 endif
273endfun
274
275" Edit/File Settings
276
277" Boolean options
278an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
279an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
280an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
281an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
282an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
283an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
284an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
285
286" other options
287an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
288an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
289an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
290an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
291an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
292an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
293an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
294
295an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
296an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
297an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
298an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
299an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
300an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
301
302an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
303an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
304fun! s:TextWidth()
305 if !exists("g:menutrans_textwidth_dialog")
306 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
307 endif
308 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
309 if n != ""
310 " remove leading zeros to avoid it being used as an octal number
311 let &tw = substitute(n, "^0*", "", "")
312 endif
313endfun
314
315fun! s:FileFormat()
316 if !exists("g:menutrans_fileformat_dialog")
317 let g:menutrans_fileformat_dialog = "Select format for writing the file"
318 endif
319 if !exists("g:menutrans_fileformat_choices")
320 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
321 endif
322 if &ff == "dos"
323 let def = 2
324 elseif &ff == "mac"
325 let def = 3
326 else
327 let def = 1
328 endif
329 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
330 if n == 1
331 set ff=unix
332 elseif n == 2
333 set ff=dos
334 elseif n == 3
335 set ff=mac
336 endif
337endfun
338
339" Setup the Edit.Color Scheme submenu
340let s:n = globpath(&runtimepath, "colors/*.vim")
341let s:idx = 100
342while strlen(s:n) > 0
343 let s:i = stridx(s:n, "\n")
344 if s:i < 0
345 let s:name = s:n
346 let s:n = ""
347 else
348 let s:name = strpart(s:n, 0, s:i)
349 let s:n = strpart(s:n, s:i + 1, 19999)
350 endif
351 " Ignore case for VMS and windows
352 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
353 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
354 unlet s:name
355 unlet s:i
356 let s:idx = s:idx + 10
357endwhile
358unlet s:n
359unlet s:idx
360
361" Setup the Edit.Keymap submenu
362if has("keymap")
363 let s:n = globpath(&runtimepath, "keymap/*.vim")
364 if s:n != ""
365 let s:idx = 100
366 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
367 while strlen(s:n) > 0
368 let s:i = stridx(s:n, "\n")
369 if s:i < 0
370 let s:name = s:n
371 let s:n = ""
372 else
373 let s:name = strpart(s:n, 0, s:i)
374 let s:n = strpart(s:n, s:i + 1, 19999)
375 endif
376 " Ignore case for VMS and windows
377 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
378 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
379 unlet s:name
380 unlet s:i
381 let s:idx = s:idx + 10
382 endwhile
383 unlet s:idx
384 endif
385 unlet s:n
386endif
Bram Moolenaardfccaf02004-12-31 20:56:11 +0000387if 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 +0000388 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
389endif
390
391" Programming menu
392if !exists("g:ctags_command")
393 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000394 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000395 else
396 let g:ctags_command = "ctags -R ."
397 endif
398endif
399
400an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
401vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
402vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
403an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
404an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
405
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000406if has("folding") || has("spell")
407 an 40.330 &Tools.-SEP1- <Nop>
408endif
409
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000410" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000411if has("spell")
412 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
413 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
414 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
Bram Moolenaardc27ac12005-07-06 22:35:45 +0000415 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000416 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +0000417 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000418 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
419 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
420 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
421 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
422 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
423 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
424 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
425 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
426
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000427 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000428 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000429 for cmd in s:undo_spellang
430 exe "silent! " . cmd
431 endfor
432 let s:undo_spellang = []
433
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000434 if &enc == "iso-8859-15"
435 let enc = "latin1"
436 else
437 let enc = &enc
438 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000439
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000440 let found = 0
441 let s = globpath(&rtp, "spell/*." . enc . ".spl")
442 if s != ""
443 let n = 300
444 for f in split(s, "\n")
445 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000446 if nm != "en" && nm !~ '/'
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000447 let found += 1
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000448 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
449 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
450 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000451 endif
452 let n += 10
453 endfor
454 endif
455 if found == 0
456 echomsg "Could not find other spell files"
457 elseif found == 1
458 echomsg "Found spell file " . nm
459 else
460 echomsg "Found " . found . " more spell files"
461 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000462 " Need to redo this when 'encoding' is changed.
463 augroup spellmenu
464 au! EncodingChanged * call <SID>SpellLang()
465 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000466 endfun
467
468endif
469
Bram Moolenaar071d4272004-06-13 20:20:40 +0000470" Tools.Fold Menu
471if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000472 " open close folds
473 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
474 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
475 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
476 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
477 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
478 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
479 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
480 " fold method
481 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
482 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
483 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
484 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
485 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
486 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
487 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
488 " create and delete folds
489 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
490 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
491 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
492 " moving around in folds
493 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
494 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
495 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
496 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
497 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
498 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
499 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
500 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
501 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
502endif " has folding
503
504if has("diff")
505 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
506 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
507 vunmenu &Tools.&Diff.&Get\ Block
508 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
509 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
510 vunmenu &Tools.&Diff.&Put\ Block
511 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
512endif
513
514an 40.358 &Tools.-SEP2- <Nop>
515an 40.360 &Tools.&Make<Tab>:make :make<CR>
516an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
517an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
518an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
519an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
520an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
521an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
522an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
523an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
524an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
525
526an 40.520 &Tools.-SEP3- <Nop>
527an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
528 \ :call <SID>XxdConv()<CR>
529an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
530 \ :call <SID>XxdBack()<CR>
531
532" Use a function to do the conversion, so that it also works with 'insertmode'
533" set.
534func! s:XxdConv()
535 let mod = &mod
536 if has("vms")
537 %!mc vim:xxd
538 else
539 call s:XxdFind()
540 exe '%!"' . g:xxdprogram . '"'
541 endif
542 if getline(1) =~ "^0000000:" " only if it worked
543 set ft=xxd
544 endif
545 let &mod = mod
546endfun
547
548func! s:XxdBack()
549 let mod = &mod
550 if has("vms")
551 %!mc vim:xxd -r
552 else
553 call s:XxdFind()
554 exe '%!"' . g:xxdprogram . '" -r'
555 endif
556 set ft=
557 doautocmd filetypedetect BufReadPost
558 let &mod = mod
559endfun
560
561func! s:XxdFind()
562 if !exists("g:xxdprogram")
563 " On the PC xxd may not be in the path but in the install directory
564 if (has("win32") || has("dos32")) && !executable("xxd")
565 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
566 else
567 let g:xxdprogram = "xxd"
568 endif
569 endif
570endfun
571
572" Setup the Tools.Compiler submenu
573let s:n = globpath(&runtimepath, "compiler/*.vim")
574let s:idx = 100
575while strlen(s:n) > 0
576 let s:i = stridx(s:n, "\n")
577 if s:i < 0
578 let s:name = s:n
579 let s:n = ""
580 else
581 let s:name = strpart(s:n, 0, s:i)
582 let s:n = strpart(s:n, s:i + 1, 19999)
583 endif
584 " Ignore case for VMS and windows
585 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000586 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000587 unlet s:name
588 unlet s:i
589 let s:idx = s:idx + 10
590endwhile
591unlet s:n
592unlet s:idx
593
594if !exists("no_buffers_menu")
595
596" Buffer list menu -- Setup functions & actions
597
598" wait with building the menu until after loading 'session' files. Makes
599" startup faster.
600let s:bmenu_wait = 1
601
602if !exists("bmenu_priority")
603 let bmenu_priority = 60
604endif
605
606func! s:BMAdd()
607 if s:bmenu_wait == 0
608 " when adding too many buffers, redraw in short format
609 if s:bmenu_count == &menuitems && s:bmenu_short == 0
610 call s:BMShow()
611 else
612 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
613 let s:bmenu_count = s:bmenu_count + 1
614 endif
615 endif
616endfunc
617
618func! s:BMRemove()
619 if s:bmenu_wait == 0
620 let name = expand("<afile>")
621 if isdirectory(name)
622 return
623 endif
624 let munge = <SID>BMMunge(name, expand("<abuf>"))
625
626 if s:bmenu_short == 0
627 exe 'silent! aun &Buffers.' . munge
628 else
629 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
630 endif
631 let s:bmenu_count = s:bmenu_count - 1
632 endif
633endfunc
634
635" Create the buffer menu (delete an existing one first).
636func! s:BMShow(...)
637 let s:bmenu_wait = 1
638 let s:bmenu_short = 1
639 let s:bmenu_count = 0
640 "
641 " get new priority, if exists
642 if a:0 == 1
643 let g:bmenu_priority = a:1
644 endif
645
646 " remove old menu, if exists; keep one entry to avoid a torn off menu to
647 " disappear.
648 silent! unmenu &Buffers
649 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
650 silent! unmenu! &Buffers
651
652 " create new menu; set 'cpo' to include the <CR>
653 let cpo_save = &cpo
654 set cpo&vim
655 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
656 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
657 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
658 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
659 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
660 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
661 let &cpo = cpo_save
662 unmenu &Buffers.Dummy
663
664 " figure out how many buffers there are
665 let buf = 1
666 while buf <= bufnr('$')
667 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000668 let s:bmenu_count = s:bmenu_count + 1
669 endif
670 let buf = buf + 1
671 endwhile
672 if s:bmenu_count <= &menuitems
673 let s:bmenu_short = 0
674 endif
675
676 " iterate through buffer list, adding each buffer to the menu:
677 let buf = 1
678 while buf <= bufnr('$')
679 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000680 call <SID>BMFilename(bufname(buf), buf)
681 endif
682 let buf = buf + 1
683 endwhile
684 let s:bmenu_wait = 0
685 aug buffer_list
686 au!
687 au BufCreate,BufFilePost * call <SID>BMAdd()
688 au BufDelete,BufFilePre * call <SID>BMRemove()
689 aug END
690endfunc
691
692func! s:BMHash(name)
693 " Make name all upper case, so that chars are between 32 and 96
694 let nm = substitute(a:name, ".*", '\U\0', "")
695 if has("ebcdic")
696 " HACK: Replace all non alphabetics with 'Z'
697 " Just to make it work for now.
698 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
699 let sp = char2nr('A') - 1
700 else
701 let sp = char2nr(' ')
702 endif
703 " convert first six chars into a number for sorting:
704 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)
705endfunc
706
707func! s:BMHash2(name)
708 let nm = substitute(a:name, ".", '\L\0', "")
709 " Not exactly right for EBCDIC...
710 if nm[0] < 'a' || nm[0] > 'z'
711 return '&others.'
712 elseif nm[0] <= 'd'
713 return '&abcd.'
714 elseif nm[0] <= 'h'
715 return '&efgh.'
716 elseif nm[0] <= 'l'
717 return '&ijkl.'
718 elseif nm[0] <= 'p'
719 return '&mnop.'
720 elseif nm[0] <= 't'
721 return '&qrst.'
722 else
723 return '&u-z.'
724 endif
725endfunc
726
727" insert a buffer name into the buffer menu:
728func! s:BMFilename(name, num)
729 if isdirectory(a:name)
730 return
731 endif
732 let munge = <SID>BMMunge(a:name, a:num)
733 let hash = <SID>BMHash(munge)
734 if s:bmenu_short == 0
735 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
736 else
737 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
738 endif
739 " set 'cpo' to include the <CR>
740 let cpo_save = &cpo
741 set cpo&vim
742 exe name . ' :confirm b' . a:num . '<CR>'
743 let &cpo = cpo_save
744endfunc
745
746" Truncate a long path to fit it in a menu item.
747if !exists("g:bmenu_max_pathlen")
748 let g:bmenu_max_pathlen = 35
749endif
750func! s:BMTruncName(fname)
751 let name = a:fname
752 if g:bmenu_max_pathlen < 5
753 let name = ""
754 else
755 let len = strlen(name)
756 if len > g:bmenu_max_pathlen
757 let amountl = (g:bmenu_max_pathlen / 2) - 2
758 let amountr = g:bmenu_max_pathlen - amountl - 3
759 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
760 let left = substitute(name, pattern, '\1', '')
761 let right = substitute(name, pattern, '\2', '')
762 if strlen(left) + strlen(right) < len
763 let name = left . '...' . right
764 endif
765 endif
766 endif
767 return name
768endfunc
769
770func! s:BMMunge(fname, bnum)
771 let name = a:fname
772 if name == ''
773 if !exists("g:menutrans_no_file")
774 let g:menutrans_no_file = "[No file]"
775 endif
776 let name = g:menutrans_no_file
777 else
778 let name = fnamemodify(name, ':p:~')
779 endif
780 " detach file name and separate it out:
781 let name2 = fnamemodify(name, ':t')
782 if a:bnum >= 0
783 let name2 = name2 . ' (' . a:bnum . ')'
784 endif
785 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
786 let name = escape(name, "\\. \t|")
787 let name = substitute(name, "&", "&&", "g")
788 let name = substitute(name, "\n", "^@", "g")
789 return name
790endfunc
791
792" When just starting Vim, load the buffer menu later
793if has("vim_starting")
794 augroup LoadBufferMenu
795 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
796 au VimEnter * au! LoadBufferMenu
797 augroup END
798else
799 call <SID>BMShow()
800endif
801
802endif " !exists("no_buffers_menu")
803
804" Window menu
805an 70.300 &Window.&New<Tab>^Wn <C-W>n
806an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
807an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
808an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
809if has("vertsplit")
810 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
811 if !exists("*MenuExplOpen")
812 fun MenuExplOpen()
813 if @% == ""
814 20vsp .
815 else
Bram Moolenaaraba88572008-06-25 20:13:35 +0000816 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000817 endif
818 endfun
819 endif
820endif
821an 70.335 &Window.-SEP1- <Nop>
822an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
823an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
824an 70.350 &Window.-SEP2- <Nop>
825an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
826an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
827an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
828an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
829an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
830an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
831an 70.365 &Window.-SEP3- <Nop>
832an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
833an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
834an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
835an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
836an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
837
838" The popup menu
839an 1.10 PopUp.&Undo u
840an 1.15 PopUp.-SEP1- <Nop>
841vnoremenu 1.20 PopUp.Cu&t "+x
842vnoremenu 1.30 PopUp.&Copy "+y
843cnoremenu 1.30 PopUp.&Copy <C-Y>
844nnoremenu 1.40 PopUp.&Paste "+gP
845cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000846exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
847exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000848vnoremenu 1.50 PopUp.&Delete x
849an 1.55 PopUp.-SEP2- <Nop>
850vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000851
852nnoremenu 1.70 PopUp.Select\ &Word vaw
853onoremenu 1.70 PopUp.Select\ &Word aw
854vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
855inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
856cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
857
858nnoremenu 1.73 PopUp.Select\ &Sentence vas
859onoremenu 1.73 PopUp.Select\ &Sentence as
860vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
861inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
862cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
863
864nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
865onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
866vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
867inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
868cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
869
870nnoremenu 1.80 PopUp.Select\ &Line V
871onoremenu 1.80 PopUp.Select\ &Line <C-C>V
872vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
873inoremenu 1.80 PopUp.Select\ &Line <C-O>V
874cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
875
876nnoremenu 1.90 PopUp.Select\ &Block <C-V>
877onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
878vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
879inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
880cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
881
Bram Moolenaar071d4272004-06-13 20:20:40 +0000882noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
883inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
884cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
885
Bram Moolenaar45360022005-07-21 21:08:21 +0000886if has("spell")
887 " Spell suggestions in the popup menu. Note that this will slow down the
888 " appearance of the menu!
889 func! <SID>SpellPopup()
890 if exists("s:changeitem") && s:changeitem != ''
891 call <SID>SpellDel()
892 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000893
894 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000895 if !&spell || &spelllang == ''
896 return
897 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000898
899 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000900 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000901 if col('.') > curcol " don't use word after the cursor
902 let w = ''
903 call cursor(0, curcol) " put the cursor back where it was
904 endif
905 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000906 if a == 'caps'
907 let s:suglist = [substitute(w, '.*', '\u&', '')]
908 else
909 let s:suglist = spellsuggest(w, 10)
910 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000911 if len(s:suglist) <= 0
912 call cursor(0, curcol) " put the cursor back where it was
913 else
914 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
915 let s:fromword = w
916 let pri = 1
917 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000918 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000919 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
920 let pri += 1
921 endfor
922
923 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000924 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000925
926 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000927 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000928
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000929 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +0000930 endif
931 endif
932 endfunc
933
934 func! <SID>SpellReplace(n)
935 let l = getline('.')
936 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
937 \ . strpart(l, col('.') + len(s:fromword) - 1))
938 endfunc
939
940 func! <SID>SpellDel()
941 exe "aunmenu PopUp." . s:changeitem
942 exe "aunmenu PopUp." . s:additem
943 exe "aunmenu PopUp." . s:ignoreitem
944 aunmenu PopUp.-SpellSep-
945 let s:changeitem = ''
946 endfun
947
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000948 augroup SpellPopupMenu
949 au! MenuPopup * call <SID>SpellPopup()
950 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +0000951endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000952
953" The GUI toolbar (for MS-Windows and GTK)
954if has("toolbar")
955 an 1.10 ToolBar.Open :browse confirm e<CR>
956 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
957 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
958
959 if has("printer")
960 an 1.40 ToolBar.Print :hardcopy<CR>
961 vunmenu ToolBar.Print
962 vnoremenu ToolBar.Print :hardcopy<CR>
963 elseif has("unix")
964 an 1.40 ToolBar.Print :w !lpr<CR>
965 vunmenu ToolBar.Print
966 vnoremenu ToolBar.Print :w !lpr<CR>
967 endif
968
969 an 1.45 ToolBar.-sep1- <Nop>
970 an 1.50 ToolBar.Undo u
971 an 1.60 ToolBar.Redo <C-R>
972
973 an 1.65 ToolBar.-sep2- <Nop>
974 vnoremenu 1.70 ToolBar.Cut "+x
975 vnoremenu 1.80 ToolBar.Copy "+y
976 cnoremenu 1.80 ToolBar.Copy <C-Y>
977 nnoremenu 1.90 ToolBar.Paste "+gP
978 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000979 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
980 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000981
982 if !has("gui_athena")
983 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000984 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000985 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000986 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000987 an 1.110 ToolBar.FindNext n
988 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000989 endif
990
Bram Moolenaar071d4272004-06-13 20:20:40 +0000991 an 1.215 ToolBar.-sep5- <Nop>
992 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
993 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
994 an 1.240 ToolBar.RunScript :browse so<CR>
995
996 an 1.245 ToolBar.-sep6- <Nop>
997 an 1.250 ToolBar.Make :make<CR>
998 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
999 an 1.280 ToolBar.TagJump g<C-]>
1000
1001 an 1.295 ToolBar.-sep7- <Nop>
1002 an 1.300 ToolBar.Help :help<CR>
1003 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1004
1005" Only set the tooltips here if not done in a language menu file
1006if exists("*Do_toolbar_tmenu")
1007 call Do_toolbar_tmenu()
1008else
1009 let did_toolbar_tmenu = 1
1010 tmenu ToolBar.Open Open file
1011 tmenu ToolBar.Save Save current file
1012 tmenu ToolBar.SaveAll Save all files
1013 tmenu ToolBar.Print Print
1014 tmenu ToolBar.Undo Undo
1015 tmenu ToolBar.Redo Redo
1016 tmenu ToolBar.Cut Cut to clipboard
1017 tmenu ToolBar.Copy Copy to clipboard
1018 tmenu ToolBar.Paste Paste from Clipboard
1019 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001020 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001021 tmenu ToolBar.FindNext Find Next
1022 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001023 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 :