Merge branch 'vim-with-runtime' into feat/rel-line-numbers
[vim_extended.git] / runtime / menu.vim
blob5b5246507cbd39c45d407825354fd3eb0c8b63cc
1 " Vim support file to define the default menus
2 " You can also use this as a start for your own set of menus.
4 " Maintainer:   Bram Moolenaar <Bram@vim.org>
5 " Last Change:  2009 Feb 26
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.
10 " Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
11 " <CR> would not be recognized.  See ":help 'cpoptions'".
12 let s:cpo_save = &cpo
13 set cpo&vim
15 " Avoid installing the menus twice
16 if !exists("did_install_default_menus")
17 let did_install_default_menus = 1
20 if 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
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"
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, '\.[^.]*', "", "")
57       exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
59       if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
60         " On windows locale names are complicated, try using $LANG, it might
61         " have been set by set_init_1().  But don't do this for "en" or "en_us".
62         " But don't match "slovak" when $LANG is "sl".
63         exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
64       endif
65     endif
66   endif
67 endif
70 " Help menu
71 an 9999.10 &Help.&Overview<Tab><F1>     :help<CR>
72 an 9999.20 &Help.&User\ Manual          :help usr_toc<CR>
73 an 9999.30 &Help.&How-to\ links         :help how-to<CR>
74 an <silent> 9999.40 &Help.&Find\.\.\.   :call <SID>Helpfind()<CR>
75 an 9999.45 &Help.-sep1-                 <Nop>
76 an 9999.50 &Help.&Credits               :help credits<CR>
77 an 9999.60 &Help.Co&pying               :help copying<CR>
78 an 9999.70 &Help.&Sponsor/Register      :help sponsor<CR>
79 an 9999.70 &Help.O&rphans               :help kcc<CR>
80 an 9999.75 &Help.-sep2-                 <Nop>
81 an 9999.80 &Help.&Version               :version<CR>
82 an 9999.90 &Help.&About                 :intro<CR>
84 fun! 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
96 endfun
98 " File menu
99 an 10.310 &File.&Open\.\.\.<Tab>:e              :browse confirm e<CR>
100 an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp       :browse sp<CR>
101 an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew     :browse tabnew<CR>
102 an 10.325 &File.&New<Tab>:enew                  :confirm enew<CR>
103 an <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>
109 an 10.335 &File.-SEP1-                          <Nop>
110 an <silent> 10.340 &File.&Save<Tab>:w           :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
111 an 10.350 &File.Save\ &As\.\.\.<Tab>:sav        :browse confirm saveas<CR>
113 if 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>
117 endif
119 if 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>
124 elseif 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>
129 endif
130 an 10.600 &File.-SEP4-                          <Nop>
131 an 10.610 &File.Sa&ve-Exit<Tab>:wqa             :confirm wqa<CR>
132 an 10.620 &File.E&xit<Tab>:qa                   :confirm qa<CR>
134 func! <SID>SelectAll()
135   exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
136 endfunc
138 func! s:FnameEscape(fname)
139   if exists('*fnameescape')
140     return fnameescape(a:fname)
141   endif
142   return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
143 endfunc
145 " Edit menu
146 an 20.310 &Edit.&Undo<Tab>u                     u
147 an 20.320 &Edit.&Redo<Tab>^R                    <C-R>
148 an 20.330 &Edit.Rep&eat<Tab>\.                  .
150 an 20.335 &Edit.-SEP1-                          <Nop>
151 vnoremenu 20.340 &Edit.Cu&t<Tab>"+x             "+x
152 vnoremenu 20.350 &Edit.&Copy<Tab>"+y            "+y
153 cnoremenu 20.350 &Edit.&Copy<Tab>"+y            <C-Y>
154 nnoremenu 20.360 &Edit.&Paste<Tab>"+gP          "+gP
155 cnoremenu        &Edit.&Paste<Tab>"+gP          <C-R>+
156 exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP   ' . paste#paste_cmd['v']
157 exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP   ' . paste#paste_cmd['i']
158 nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p      [p
159 inoremenu        &Edit.Put\ &Before<Tab>[p      <C-O>[p
160 nnoremenu 20.380 &Edit.Put\ &After<Tab>]p       ]p
161 inoremenu        &Edit.Put\ &After<Tab>]p       <C-O>]p
162 if has("win32") || has("win16")
163   vnoremenu 20.390 &Edit.&Delete<Tab>x          x
164 endif
165 noremenu  <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  :<C-U>call <SID>SelectAll()<CR>
166 inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  <C-O>:call <SID>SelectAll()<CR>
167 cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  <C-U>call <SID>SelectAll()<CR>
169 an 20.405        &Edit.-SEP2-                           <Nop>
170 if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
171   an 20.410      &Edit.&Find\.\.\.                      :promptfind<CR>
172   vunmenu        &Edit.&Find\.\.\.
173   vnoremenu <silent>     &Edit.&Find\.\.\.              y:promptfind <C-R>=<SID>FixFText()<CR><CR>
174   an 20.420      &Edit.Find\ and\ Rep&lace\.\.\.        :promptrepl<CR>
175   vunmenu        &Edit.Find\ and\ Rep&lace\.\.\.
176   vnoremenu <silent>     &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
177 else
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/
182 endif
184 an 20.425        &Edit.-SEP3-                           <Nop>
185 an 20.430        &Edit.Settings\ &Window                :options<CR>
186 an 20.435        &Edit.Startup\ &Settings               :call <SID>EditVimrc()<CR>
188 fun! s:EditVimrc()
189   if $MYVIMRC != ''
190     let fname = $MYVIMRC
191   elseif has("win32") || has("dos32") || has("dos16") || has("os2")
192     if $HOME != ''
193       let fname = $HOME . "/_vimrc"
194     else
195       let fname = $VIM . "/_vimrc"
196     endif
197   elseif has("amiga")
198     let fname = "s:.vimrc"
199   else
200     let fname = $HOME . "/.vimrc"
201   endif
202   let fname = s:FnameEscape(fname)
203   if &mod
204     exe "split " . fname
205   else
206     exe "edit " . fname
207   endif
208 endfun
210 fun! s:FixFText()
211   " Fix text in nameless register to be used with :promptfind.
212   return substitute(@", "[\r\n]", '\\n', 'g')
213 endfun
215 " Edit/Global Settings
216 an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls!        :set hls! hls?<CR>
217 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic!        :set ic! ic?<CR>
218 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm!  :set sm! sm?<CR>
220 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\  :set so=1<CR>
221 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\  :set so=2<CR>
222 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\  :set so=3<CR>
223 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\  :set so=4<CR>
224 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\  :set so=5<CR>
225 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\  :set so=7<CR>
226 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\  :set so=10<CR>
227 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\  :set so=100<CR>
229 an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
230 an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
231 an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
232 an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
233 an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
234 an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im!       :set im!<CR>
235 an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     :set cp!<CR>
236 an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\.  :call <SID>SearchP()<CR>
237 an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\.  :call <SID>TagFiles()<CR>
239 " GUI options
240 an 20.440.300 &Edit.&Global\ Settings.-SEP1-                            <Nop>
241 an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar         :call <SID>ToggleGuiOption("T")<CR>
242 an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
243 an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
244 an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
246 fun! 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
254 endfun
256 fun! 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
264 endfun
266 fun! 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
273 endfun
275 " Edit/File Settings
277 " Boolean options
278 an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu!      :set nu! nu?<CR>
279 an 20.440.105 &Edit.F&ile\ Settings.Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!   :set rnu! rnu?<CR>
280 an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
281 an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
282 an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr!      :set lbr! lbr?<CR>
283 an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et!   :set et! et?<CR>
284 an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai!  :set ai! ai?<CR>
285 an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
287 " other options
288 an 20.440.600 &Edit.F&ile\ Settings.-SEP2-              <Nop>
289 an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2    :set sw=2 sw?<CR>
290 an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3    :set sw=3 sw?<CR>
291 an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4    :set sw=4 sw?<CR>
292 an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5    :set sw=5 sw?<CR>
293 an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6    :set sw=6 sw?<CR>
294 an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8    :set sw=8 sw?<CR>
296 an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
297 an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
298 an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
299 an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
300 an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
301 an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
303 an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\.  :call <SID>TextWidth()<CR>
304 an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\.  :call <SID>FileFormat()<CR>
305 fun! s:TextWidth()
306   if !exists("g:menutrans_textwidth_dialog")
307     let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
308   endif
309   let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
310   if n != ""
311     " remove leading zeros to avoid it being used as an octal number
312     let &tw = substitute(n, "^0*", "", "")
313   endif
314 endfun
316 fun! s:FileFormat()
317   if !exists("g:menutrans_fileformat_dialog")
318     let g:menutrans_fileformat_dialog = "Select format for writing the file"
319   endif
320   if !exists("g:menutrans_fileformat_choices")
321     let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
322   endif
323   if &ff == "dos"
324     let def = 2
325   elseif &ff == "mac"
326     let def = 3
327   else
328     let def = 1
329   endif
330   let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
331   if n == 1
332     set ff=unix
333   elseif n == 2
334     set ff=dos
335   elseif n == 3
336     set ff=mac
337   endif
338 endfun
340 " Setup the Edit.Color Scheme submenu
341 let s:n = globpath(&runtimepath, "colors/*.vim")
342 let s:idx = 100
343 while strlen(s:n) > 0
344   let s:i = stridx(s:n, "\n")
345   if s:i < 0
346     let s:name = s:n
347     let s:n = ""
348   else
349     let s:name = strpart(s:n, 0, s:i)
350     let s:n = strpart(s:n, s:i + 1, 19999)
351   endif
352   " Ignore case for VMS and windows
353   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
354   exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
355   unlet s:name
356   unlet s:i
357   let s:idx = s:idx + 10
358 endwhile
359 unlet s:n
360 unlet s:idx
362 " Setup the Edit.Keymap submenu
363 if has("keymap")
364   let s:n = globpath(&runtimepath, "keymap/*.vim")
365   if s:n != ""
366     let s:idx = 100
367     an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
368     while strlen(s:n) > 0
369       let s:i = stridx(s:n, "\n")
370       if s:i < 0
371         let s:name = s:n
372         let s:n = ""
373       else
374         let s:name = strpart(s:n, 0, s:i)
375         let s:n = strpart(s:n, s:i + 1, 19999)
376       endif
377       " Ignore case for VMS and windows
378       let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
379       exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
380       unlet s:name
381       unlet s:i
382       let s:idx = s:idx + 10
383     endwhile
384     unlet s:idx
385   endif
386   unlet s:n
387 endif
388 if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
389   an 20.470 &Edit.Select\ Fo&nt\.\.\.   :set guifont=*<CR>
390 endif
392 " Programming menu
393 if !exists("g:ctags_command")
394   if has("vms")
395     let g:ctags_command = "mc vim:ctags *.*"
396   else
397     let g:ctags_command = "ctags -R ."
398   endif
399 endif
401 an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
402 vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
403 vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
404 an 40.310 &Tools.Jump\ &back<Tab>^T             <C-T>
405 an 40.320 &Tools.Build\ &Tags\ File             :exe "!" . g:ctags_command<CR>
407 if has("folding") || has("spell")
408   an 40.330 &Tools.-SEP1-                                               <Nop>
409 endif
411 " Tools.Spelling Menu
412 if has("spell")
413   an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On              :set spell<CR>
414   an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off             :set nospell<CR>
415   an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s        ]s
416   an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s    [s
417   an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z=   z=
418   an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall   :spellrepall<CR>
419   an 40.335.200 &Tools.&Spelling.-SEP1-                         <Nop>
420   an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en"        :set spl=en spell<CR>
421   an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au"     :set spl=en_au spell<CR>
422   an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca"     :set spl=en_ca spell<CR>
423   an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb"     :set spl=en_gb spell<CR>
424   an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz"     :set spl=en_nz spell<CR>
425   an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us"     :set spl=en_us spell<CR>
426   an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages        :call <SID>SpellLang()<CR>
428   let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
429   func! s:SpellLang()
430     for cmd in s:undo_spellang
431       exe "silent! " . cmd
432     endfor
433     let s:undo_spellang = []
435     if &enc == "iso-8859-15"
436       let enc = "latin1"
437     else
438       let enc = &enc
439     endif
441     let found = 0
442     let s = globpath(&rtp, "spell/*." . enc . ".spl")
443     if s != ""
444       let n = 300
445       for f in split(s, "\n")
446         let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
447         if nm != "en" && nm !~ '/'
448           let found += 1
449           let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
450           exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
451           let s:undo_spellang += ['aun ' . menuname]
452         endif
453         let n += 10
454       endfor
455     endif
456     if found == 0
457       echomsg "Could not find other spell files"
458     elseif found == 1
459       echomsg "Found spell file " . nm
460     else
461       echomsg "Found " . found . " more spell files"
462     endif
463     " Need to redo this when 'encoding' is changed.
464     augroup spellmenu
465     au! EncodingChanged * call <SID>SpellLang()
466     augroup END
467   endfun
469 endif
471 " Tools.Fold Menu
472 if has("folding")
473   " open close folds
474   an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi           zi
475   an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv              zv
476   an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx      zMzx
477   an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm              zm
478   an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM               zM
479   an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr               zr
480   an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR                zR
481   " fold method
482   an 40.340.200 &Tools.&Folding.-SEP1-                  <Nop>
483   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual   :set fdm=manual<CR>
484   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent   :set fdm=indent<CR>
485   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
486   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax   :set fdm=syntax<CR>
487   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff     :set fdm=diff<CR>
488   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker   :set fdm=marker<CR>
489   " create and delete folds
490   vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf     zf
491   an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd            zd
492   an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD      zD
493   " moving around in folds
494   an 40.340.300 &Tools.&Folding.-SEP2-                          <Nop>
495   an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\   :set fdc=0<CR>
496   an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\   :set fdc=2<CR>
497   an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\   :set fdc=3<CR>
498   an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\   :set fdc=4<CR>
499   an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\   :set fdc=5<CR>
500   an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\   :set fdc=6<CR>
501   an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\   :set fdc=7<CR>
502   an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\   :set fdc=8<CR>
503 endif  " has folding
505 if has("diff")
506   an 40.350.100 &Tools.&Diff.&Update            :diffupdate<CR>
507   an 40.350.110 &Tools.&Diff.&Get\ Block        :diffget<CR>
508   vunmenu &Tools.&Diff.&Get\ Block
509   vnoremenu &Tools.&Diff.&Get\ Block            :diffget<CR>
510   an 40.350.120 &Tools.&Diff.&Put\ Block        :diffput<CR>
511   vunmenu &Tools.&Diff.&Put\ Block
512   vnoremenu &Tools.&Diff.&Put\ Block            :diffput<CR>
513 endif
515 an 40.358 &Tools.-SEP2-                                 <Nop>
516 an 40.360 &Tools.&Make<Tab>:make                        :make<CR>
517 an 40.370 &Tools.&List\ Errors<Tab>:cl                  :cl<CR>
518 an 40.380 &Tools.L&ist\ Messages<Tab>:cl!               :cl!<CR>
519 an 40.390 &Tools.&Next\ Error<Tab>:cn                   :cn<CR>
520 an 40.400 &Tools.&Previous\ Error<Tab>:cp               :cp<CR>
521 an 40.410 &Tools.&Older\ List<Tab>:cold                 :colder<CR>
522 an 40.420 &Tools.N&ewer\ List<Tab>:cnew                 :cnewer<CR>
523 an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin    :cwin<CR>
524 an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen     :copen<CR>
525 an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose   :cclose<CR>
527 an 40.520 &Tools.-SEP3-                                 <Nop>
528 an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
529         \ :call <SID>XxdConv()<CR>
530 an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
531         \ :call <SID>XxdBack()<CR>
533 " Use a function to do the conversion, so that it also works with 'insertmode'
534 " set.
535 func! s:XxdConv()
536   let mod = &mod
537   if has("vms")
538     %!mc vim:xxd
539   else
540     call s:XxdFind()
541     exe '%!"' . g:xxdprogram . '"'
542   endif
543   if getline(1) =~ "^0000000:"          " only if it worked
544     set ft=xxd
545   endif
546   let &mod = mod
547 endfun
549 func! s:XxdBack()
550   let mod = &mod
551   if has("vms")
552     %!mc vim:xxd -r
553   else
554     call s:XxdFind()
555     exe '%!"' . g:xxdprogram . '" -r'
556   endif
557   set ft=
558   doautocmd filetypedetect BufReadPost
559   let &mod = mod
560 endfun
562 func! s:XxdFind()
563   if !exists("g:xxdprogram")
564     " On the PC xxd may not be in the path but in the install directory
565     if (has("win32") || has("dos32")) && !executable("xxd")
566       let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
567     else
568       let g:xxdprogram = "xxd"
569     endif
570   endif
571 endfun
573 " Setup the Tools.Compiler submenu
574 let s:n = globpath(&runtimepath, "compiler/*.vim")
575 let s:idx = 100
576 while strlen(s:n) > 0
577   let s:i = stridx(s:n, "\n")
578   if s:i < 0
579     let s:name = s:n
580     let s:n = ""
581   else
582     let s:name = strpart(s:n, 0, s:i)
583     let s:n = strpart(s:n, s:i + 1, 19999)
584   endif
585   " Ignore case for VMS and windows
586   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
587   exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
588   unlet s:name
589   unlet s:i
590   let s:idx = s:idx + 10
591 endwhile
592 unlet s:n
593 unlet s:idx
595 if !exists("no_buffers_menu")
597 " Buffer list menu -- Setup functions & actions
599 " wait with building the menu until after loading 'session' files. Makes
600 " startup faster.
601 let s:bmenu_wait = 1
603 if !exists("bmenu_priority")
604   let bmenu_priority = 60
605 endif
607 func! s:BMAdd()
608   if s:bmenu_wait == 0
609     " when adding too many buffers, redraw in short format
610     if s:bmenu_count == &menuitems && s:bmenu_short == 0
611       call s:BMShow()
612     else
613       call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
614       let s:bmenu_count = s:bmenu_count + 1
615     endif
616   endif
617 endfunc
619 func! s:BMRemove()
620   if s:bmenu_wait == 0
621     let name = expand("<afile>")
622     if isdirectory(name)
623       return
624     endif
625     let munge = <SID>BMMunge(name, expand("<abuf>"))
627     if s:bmenu_short == 0
628       exe 'silent! aun &Buffers.' . munge
629     else
630       exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
631     endif
632     let s:bmenu_count = s:bmenu_count - 1
633   endif
634 endfunc
636 " Create the buffer menu (delete an existing one first).
637 func! s:BMShow(...)
638   let s:bmenu_wait = 1
639   let s:bmenu_short = 1
640   let s:bmenu_count = 0
641   "
642   " get new priority, if exists
643   if a:0 == 1
644     let g:bmenu_priority = a:1
645   endif
647   " remove old menu, if exists; keep one entry to avoid a torn off menu to
648   " disappear.
649   silent! unmenu &Buffers
650   exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
651   silent! unmenu! &Buffers
653   " create new menu; set 'cpo' to include the <CR>
654   let cpo_save = &cpo
655   set cpo&vim
656   exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
657   exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
658   exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
659   exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
660   exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
661   exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
662   let &cpo = cpo_save
663   unmenu &Buffers.Dummy
665   " figure out how many buffers there are
666   let buf = 1
667   while buf <= bufnr('$')
668     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
669       let s:bmenu_count = s:bmenu_count + 1
670     endif
671     let buf = buf + 1
672   endwhile
673   if s:bmenu_count <= &menuitems
674     let s:bmenu_short = 0
675   endif
677   " iterate through buffer list, adding each buffer to the menu:
678   let buf = 1
679   while buf <= bufnr('$')
680     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
681       call <SID>BMFilename(bufname(buf), buf)
682     endif
683     let buf = buf + 1
684   endwhile
685   let s:bmenu_wait = 0
686   aug buffer_list
687   au!
688   au BufCreate,BufFilePost * call <SID>BMAdd()
689   au BufDelete,BufFilePre * call <SID>BMRemove()
690   aug END
691 endfunc
693 func! s:BMHash(name)
694   " Make name all upper case, so that chars are between 32 and 96
695   let nm = substitute(a:name, ".*", '\U\0', "")
696   if has("ebcdic")
697     " HACK: Replace all non alphabetics with 'Z'
698     "       Just to make it work for now.
699     let nm = substitute(nm, "[^A-Z]", 'Z', "g")
700     let sp = char2nr('A') - 1
701   else
702     let sp = char2nr(' ')
703   endif
704   " convert first six chars into a number for sorting:
705   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)
706 endfunc
708 func! s:BMHash2(name)
709   let nm = substitute(a:name, ".", '\L\0', "")
710   " Not exactly right for EBCDIC...
711   if nm[0] < 'a' || nm[0] > 'z'
712     return '&others.'
713   elseif nm[0] <= 'd'
714     return '&abcd.'
715   elseif nm[0] <= 'h'
716     return '&efgh.'
717   elseif nm[0] <= 'l'
718     return '&ijkl.'
719   elseif nm[0] <= 'p'
720     return '&mnop.'
721   elseif nm[0] <= 't'
722     return '&qrst.'
723   else
724     return '&u-z.'
725   endif
726 endfunc
728 " insert a buffer name into the buffer menu:
729 func! s:BMFilename(name, num)
730   if isdirectory(a:name)
731     return
732   endif
733   let munge = <SID>BMMunge(a:name, a:num)
734   let hash = <SID>BMHash(munge)
735   if s:bmenu_short == 0
736     let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
737   else
738     let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
739   endif
740   " set 'cpo' to include the <CR>
741   let cpo_save = &cpo
742   set cpo&vim
743   exe name . ' :confirm b' . a:num . '<CR>'
744   let &cpo = cpo_save
745 endfunc
747 " Truncate a long path to fit it in a menu item.
748 if !exists("g:bmenu_max_pathlen")
749   let g:bmenu_max_pathlen = 35
750 endif
751 func! s:BMTruncName(fname)
752   let name = a:fname
753   if g:bmenu_max_pathlen < 5
754     let name = ""
755   else
756     let len = strlen(name)
757     if len > g:bmenu_max_pathlen
758       let amountl = (g:bmenu_max_pathlen / 2) - 2
759       let amountr = g:bmenu_max_pathlen - amountl - 3
760       let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
761       let left = substitute(name, pattern, '\1', '')
762       let right = substitute(name, pattern, '\2', '')
763       if strlen(left) + strlen(right) < len
764         let name = left . '...' . right
765       endif
766     endif
767   endif
768   return name
769 endfunc
771 func! s:BMMunge(fname, bnum)
772   let name = a:fname
773   if name == ''
774     if !exists("g:menutrans_no_file")
775       let g:menutrans_no_file = "[No file]"
776     endif
777     let name = g:menutrans_no_file
778   else
779     let name = fnamemodify(name, ':p:~')
780   endif
781   " detach file name and separate it out:
782   let name2 = fnamemodify(name, ':t')
783   if a:bnum >= 0
784     let name2 = name2 . ' (' . a:bnum . ')'
785   endif
786   let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
787   let name = escape(name, "\\. \t|")
788   let name = substitute(name, "&", "&&", "g")
789   let name = substitute(name, "\n", "^@", "g")
790   return name
791 endfunc
793 " When just starting Vim, load the buffer menu later
794 if has("vim_starting")
795   augroup LoadBufferMenu
796     au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
797     au  VimEnter * au! LoadBufferMenu
798   augroup END
799 else
800   call <SID>BMShow()
801 endif
803 endif " !exists("no_buffers_menu")
805 " Window menu
806 an 70.300 &Window.&New<Tab>^Wn                  <C-W>n
807 an 70.310 &Window.S&plit<Tab>^Ws                <C-W>s
808 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^        <C-W><C-^>
809 an 70.330 &Window.Split\ &Vertically<Tab>^Wv    <C-W>v
810 if has("vertsplit")
811   an <silent> 70.332 &Window.Split\ File\ E&xplorer     :call MenuExplOpen()<CR>
812   if !exists("*MenuExplOpen")
813     fun MenuExplOpen()
814       if @% == ""
815         20vsp .
816       else
817         exe "20vsp " . s:FnameEscape(expand("%:p:h"))
818       endif
819     endfun
820   endif
821 endif
822 an 70.335 &Window.-SEP1-                                <Nop>
823 an 70.340 &Window.&Close<Tab>^Wc                        :confirm close<CR>
824 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo              :confirm only<CR>
825 an 70.350 &Window.-SEP2-                                <Nop>
826 an 70.355 &Window.Move\ &To.&Top<Tab>^WK                <C-W>K
827 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ             <C-W>J
828 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH         <C-W>H
829 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL        <C-W>L
830 an 70.360 &Window.Rotate\ &Up<Tab>^WR                   <C-W>R
831 an 70.362 &Window.Rotate\ &Down<Tab>^Wr                 <C-W>r
832 an 70.365 &Window.-SEP3-                                <Nop>
833 an 70.370 &Window.&Equal\ Size<Tab>^W=                  <C-W>=
834 an 70.380 &Window.&Max\ Height<Tab>^W_                  <C-W>_
835 an 70.390 &Window.M&in\ Height<Tab>^W1_                 <C-W>1_
836 an 70.400 &Window.Max\ &Width<Tab>^W\|                  <C-W>\|
837 an 70.410 &Window.Min\ Widt&h<Tab>^W1\|                 <C-W>1\|
839 " The popup menu
840 an 1.10 PopUp.&Undo                     u
841 an 1.15 PopUp.-SEP1-                    <Nop>
842 vnoremenu 1.20 PopUp.Cu&t               "+x
843 vnoremenu 1.30 PopUp.&Copy              "+y
844 cnoremenu 1.30 PopUp.&Copy              <C-Y>
845 nnoremenu 1.40 PopUp.&Paste             "+gP
846 cnoremenu 1.40 PopUp.&Paste             <C-R>+
847 exe 'vnoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['v']
848 exe 'inoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['i']
849 vnoremenu 1.50 PopUp.&Delete            x
850 an 1.55 PopUp.-SEP2-                    <Nop>
851 vnoremenu 1.60 PopUp.Select\ Blockwise  <C-V>
853 nnoremenu 1.70 PopUp.Select\ &Word      vaw
854 onoremenu 1.70 PopUp.Select\ &Word      aw
855 vnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
856 inoremenu 1.70 PopUp.Select\ &Word      <C-O>vaw
857 cnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
859 nnoremenu 1.73 PopUp.Select\ &Sentence  vas
860 onoremenu 1.73 PopUp.Select\ &Sentence  as
861 vnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
862 inoremenu 1.73 PopUp.Select\ &Sentence  <C-O>vas
863 cnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
865 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
866 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
867 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
868 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
869 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
871 nnoremenu 1.80 PopUp.Select\ &Line      V
872 onoremenu 1.80 PopUp.Select\ &Line      <C-C>V
873 vnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
874 inoremenu 1.80 PopUp.Select\ &Line      <C-O>V
875 cnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
877 nnoremenu 1.90 PopUp.Select\ &Block     <C-V>
878 onoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
879 vnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
880 inoremenu 1.90 PopUp.Select\ &Block     <C-O><C-V>
881 cnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
883 noremenu  <script> <silent> 1.100 PopUp.Select\ &All    :<C-U>call <SID>SelectAll()<CR>
884 inoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-O>:call <SID>SelectAll()<CR>
885 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-U>call <SID>SelectAll()<CR>
887 if has("spell")
888   " Spell suggestions in the popup menu.  Note that this will slow down the
889   " appearance of the menu!
890   func! <SID>SpellPopup()
891     if exists("s:changeitem") && s:changeitem != ''
892       call <SID>SpellDel()
893     endif
895     " Return quickly if spell checking is not enabled.
896     if !&spell || &spelllang == ''
897       return
898     endif
900     let curcol = col('.')
901     let [w, a] = spellbadword()
902     if col('.') > curcol                " don't use word after the cursor
903       let w = ''
904       call cursor(0, curcol)    " put the cursor back where it was
905     endif
906     if w != ''
907       if a == 'caps'
908         let s:suglist = [substitute(w, '.*', '\u&', '')]
909       else
910         let s:suglist = spellsuggest(w, 10)
911       endif
912       if len(s:suglist) <= 0
913         call cursor(0, curcol)  " put the cursor back where it was
914       else
915         let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
916         let s:fromword = w
917         let pri = 1
918         for sug in s:suglist
919           exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
920                 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
921           let pri += 1
922         endfor
924         let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
925         exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
927         let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
928         exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
930         anoremenu 1.8 PopUp.-SpellSep- :
931       endif
932     endif
933   endfunc
935   func! <SID>SpellReplace(n)
936     let l = getline('.')
937     call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
938           \ . strpart(l, col('.') + len(s:fromword) - 1))
939   endfunc
941   func! <SID>SpellDel()
942     exe "aunmenu PopUp." . s:changeitem
943     exe "aunmenu PopUp." . s:additem
944     exe "aunmenu PopUp." . s:ignoreitem
945     aunmenu PopUp.-SpellSep-
946     let s:changeitem = ''
947   endfun
949   augroup SpellPopupMenu
950     au! MenuPopup * call <SID>SpellPopup()
951   augroup END
952 endif
954 " The GUI toolbar (for MS-Windows and GTK)
955 if has("toolbar")
956   an 1.10 ToolBar.Open                  :browse confirm e<CR>
957   an <silent> 1.20 ToolBar.Save         :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
958   an 1.30 ToolBar.SaveAll               :browse confirm wa<CR>
960   if has("printer")
961     an 1.40   ToolBar.Print             :hardcopy<CR>
962     vunmenu   ToolBar.Print
963     vnoremenu ToolBar.Print             :hardcopy<CR>
964   elseif has("unix")
965     an 1.40   ToolBar.Print             :w !lpr<CR>
966     vunmenu   ToolBar.Print
967     vnoremenu ToolBar.Print             :w !lpr<CR>
968   endif
970   an 1.45 ToolBar.-sep1-                <Nop>
971   an 1.50 ToolBar.Undo                  u
972   an 1.60 ToolBar.Redo                  <C-R>
974   an 1.65 ToolBar.-sep2-                <Nop>
975   vnoremenu 1.70 ToolBar.Cut            "+x
976   vnoremenu 1.80 ToolBar.Copy           "+y
977   cnoremenu 1.80 ToolBar.Copy           <C-Y>
978   nnoremenu 1.90 ToolBar.Paste          "+gP
979   cnoremenu      ToolBar.Paste          <C-R>+
980   exe 'vnoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['v']
981   exe 'inoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['i']
983   if !has("gui_athena")
984     an 1.95   ToolBar.-sep3-            <Nop>
985     an 1.100  ToolBar.Replace           :promptrepl<CR>
986     vunmenu   ToolBar.Replace
987     vnoremenu ToolBar.Replace           y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
988     an 1.110  ToolBar.FindNext          n
989     an 1.120  ToolBar.FindPrev          N
990   endif
992   an 1.215 ToolBar.-sep5-               <Nop>
993   an <silent> 1.220 ToolBar.LoadSesn    :call <SID>LoadVimSesn()<CR>
994   an <silent> 1.230 ToolBar.SaveSesn    :call <SID>SaveVimSesn()<CR>
995   an 1.240 ToolBar.RunScript            :browse so<CR>
997   an 1.245 ToolBar.-sep6-               <Nop>
998   an 1.250 ToolBar.Make                 :make<CR>
999   an 1.270 ToolBar.RunCtags             :exe "!" . g:ctags_command<CR>
1000   an 1.280 ToolBar.TagJump              g<C-]>
1002   an 1.295 ToolBar.-sep7-               <Nop>
1003   an 1.300 ToolBar.Help                 :help<CR>
1004   an <silent> 1.310 ToolBar.FindHelp    :call <SID>Helpfind()<CR>
1006 " Only set the tooltips here if not done in a language menu file
1007 if exists("*Do_toolbar_tmenu")
1008   call Do_toolbar_tmenu()
1009 else
1010   let did_toolbar_tmenu = 1
1011   tmenu ToolBar.Open            Open file
1012   tmenu ToolBar.Save            Save current file
1013   tmenu ToolBar.SaveAll         Save all files
1014   tmenu ToolBar.Print           Print
1015   tmenu ToolBar.Undo            Undo
1016   tmenu ToolBar.Redo            Redo
1017   tmenu ToolBar.Cut             Cut to clipboard
1018   tmenu ToolBar.Copy            Copy to clipboard
1019   tmenu ToolBar.Paste           Paste from Clipboard
1020   if !has("gui_athena")
1021     tmenu ToolBar.Replace       Find / Replace...
1022     tmenu ToolBar.FindNext      Find Next
1023     tmenu ToolBar.FindPrev      Find Previous
1024   endif
1025   tmenu ToolBar.LoadSesn        Choose a session to load
1026   tmenu ToolBar.SaveSesn        Save current session
1027   tmenu ToolBar.RunScript       Choose a Vim Script to run
1028   tmenu ToolBar.Make            Make current project (:make)
1029   tmenu ToolBar.RunCtags        Build tags in current directory tree (!ctags -R .)
1030   tmenu ToolBar.TagJump         Jump to tag under cursor
1031   tmenu ToolBar.Help            Vim Help
1032   tmenu ToolBar.FindHelp        Search Vim Help
1033 endif
1035 " Select a session to load; default to current session name if present
1036 fun! s:LoadVimSesn()
1037   if strlen(v:this_session) > 0
1038     let name = s:FnameEscape(v:this_session)
1039   else
1040     let name = "Session.vim"
1041   endif
1042   execute "browse so " . name
1043 endfun
1045 " Select a session to save; default to current session name if present
1046 fun! s:SaveVimSesn()
1047   if strlen(v:this_session) == 0
1048     let v:this_session = "Session.vim"
1049   endif
1050   execute "browse mksession! " . s:FnameEscape(v:this_session)
1051 endfun
1053 endif
1055 endif " !exists("did_install_default_menus")
1057 " Define these items always, so that syntax can be switched on when it wasn't.
1058 " But skip them when the Syntax menu was disabled by the user.
1059 if !exists("did_install_syntax_menu")
1060   an 50.212 &Syntax.&Manual             :syn manual<CR>
1061   an 50.214 &Syntax.A&utomatic          :syn on<CR>
1062   an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1063   if !exists("*s:SynOnOff")
1064     fun s:SynOnOff()
1065       if has("syntax_items")
1066         syn clear
1067       else
1068         if !exists("g:syntax_on")
1069           syn manual
1070         endif
1071         set syn=ON
1072       endif
1073     endfun
1074   endif
1075 endif
1078 " Install the Syntax menu only when filetype.vim has been loaded or when
1079 " manual syntax highlighting is enabled.
1080 " Avoid installing the Syntax menu twice.
1081 if (exists("did_load_filetypes") || exists("syntax_on"))
1082         \ && !exists("did_install_syntax_menu")
1083   let did_install_syntax_menu = 1
1085 " Skip setting up the individual syntax selection menus unless
1086 " do_syntax_sel_menu is defined (it takes quite a bit of time).
1087 if exists("do_syntax_sel_menu")
1088   runtime! synmenu.vim
1089 else
1090   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>
1091   an 50.195 &Syntax.-SEP1-              <Nop>
1092 endif
1094 an 50.210 &Syntax.&Off                  :syn off<CR>
1095 an 50.700 &Syntax.-SEP3-                <Nop>
1096 an 50.710 &Syntax.Co&lor\ test          :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1097 an 50.720 &Syntax.&Highlight\ test      :runtime syntax/hitest.vim<CR>
1098 an 50.730 &Syntax.&Convert\ to\ HTML    :runtime syntax/2html.vim<CR>
1100 endif " !exists("did_install_syntax_menu")
1102 " Restore the previous value of 'cpoptions'.
1103 let &cpo = s:cpo_save
1104 unlet s:cpo_save
1106 " vim: set sw=2 :