xref: /vim-8.2.3635/runtime/menu.vim (revision 19a09a18)
1" 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 <[email protected]>
5" Last Change:	2005 Feb 24
6
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, '\.[^.]*', "", "")
57      exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
58
59      if !exists("did_menu_trans") && strlen($LANG) > 1
60	" On windows locale names are complicated, try using $LANG, it might
61	" have been set by set_init_1().
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
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>
101an 10.325 &File.&New<Tab>:enew			:confirm enew<CR>
102an <silent> 10.330 &File.&Close<Tab>:close
103	\ :if winheight(2) < 0 <Bar>
104	\   confirm enew <Bar>
105	\ else <Bar>
106	\   confirm close <Bar>
107	\ endif<CR>
108an 10.335 &File.-SEP1-				<Nop>
109an <silent> 10.340 &File.&Save<Tab>:w		:if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
110an 10.350 &File.Save\ &As\.\.\.<Tab>:sav	:browse confirm saveas<CR>
111
112if has("diff")
113  an 10.400 &File.-SEP2-			<Nop>
114  an 10.410 &File.Split\ &Diff\ with\.\.\.	:browse vert diffsplit<CR>
115  an 10.420 &File.Split\ Patched\ &By\.\.\.	:browse vert diffpatch<CR>
116endif
117
118if has("printer")
119  an 10.500 &File.-SEP3-			<Nop>
120  an 10.510 &File.&Print			:hardcopy<CR>
121  vunmenu   &File.&Print
122  vnoremenu &File.&Print			:hardcopy<CR>
123elseif has("unix")
124  an 10.500 &File.-SEP3-			<Nop>
125  an 10.510 &File.&Print			:w !lpr<CR>
126  vunmenu   &File.&Print
127  vnoremenu &File.&Print			:w !lpr<CR>
128endif
129an 10.600 &File.-SEP4-				<Nop>
130an 10.610 &File.Sa&ve-Exit<Tab>:wqa		:confirm wqa<CR>
131an 10.620 &File.E&xit<Tab>:qa			:confirm qa<CR>
132
133" Pasting blockwise and linewise selections is not possible in Insert and
134" Visual mode without the +virtualedit feature.  They are pasted as if they
135" were characterwise instead.  Add to that some tricks to leave the cursor in
136" the right position, also for "gi".
137" Note: the same stuff appears in mswin.vim.
138if has("virtualedit")
139  let s:paste_cmd = ":call <SID>Paste()<CR>"
140  func! <SID>Paste()
141    let ove = &ve
142    set ve=all
143    normal `^
144    if @+ != ''
145      normal "+gP
146    endif
147    let c = col(".")
148    normal i
149    if col(".") < c	" compensate for i<ESC> moving the cursor left
150      normal l
151    endif
152    let &ve = ove
153  endfunc
154else
155  let s:paste_cmd = "\"=@+.'xy'<CR>gPFx\"_2x"
156endif
157
158" Define the string to use for items that are present both in Edit, Popup and
159" Toolbar menu.
160if has("virtualedit")
161  let s:paste_v_cmd = '"-c<Esc>' . s:paste_cmd
162  let s:paste_i_cmd = '<Esc>' . s:paste_cmd . 'gi'
163else
164  let s:paste_v_cmd = '"-c<Esc>gix<Esc>' . s:paste_cmd . '"_x'
165  let s:paste_i_cmd = 'x<Esc>' . s:paste_cmd . '"_s'
166endif
167
168func! <SID>SelectAll()
169  exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
170endfunc
171
172
173" Edit menu
174an 20.310 &Edit.&Undo<Tab>u			u
175an 20.320 &Edit.&Redo<Tab>^R			<C-R>
176an 20.330 &Edit.Rep&eat<Tab>\.			.
177
178an 20.335 &Edit.-SEP1-				<Nop>
179vnoremenu 20.340 &Edit.Cu&t<Tab>"+x		"+x
180vnoremenu 20.350 &Edit.&Copy<Tab>"+y		"+y
181cnoremenu 20.350 &Edit.&Copy<Tab>"+y		<C-Y>
182nnoremenu 20.360 &Edit.&Paste<Tab>"+gP		"+gP
183cnoremenu	 &Edit.&Paste<Tab>"+gP		<C-R>+
184exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP	' . s:paste_v_cmd
185exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP	' . s:paste_i_cmd
186nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p	[p
187inoremenu	 &Edit.Put\ &Before<Tab>[p	<C-O>[p
188nnoremenu 20.380 &Edit.Put\ &After<Tab>]p	]p
189inoremenu	 &Edit.Put\ &After<Tab>]p	<C-O>]p
190if has("win32") || has("win16")
191  vnoremenu 20.390 &Edit.&Delete<Tab>x		x
192endif
193noremenu  <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG	:<C-U>call <SID>SelectAll()<CR>
194inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG	<C-O>:call <SID>SelectAll()<CR>
195cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG	<C-U>call <SID>SelectAll()<CR>
196
197an 20.405	 &Edit.-SEP2-				<Nop>
198if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
199  an 20.410	 &Edit.&Find\.\.\.			:promptfind<CR>
200  vunmenu	 &Edit.&Find\.\.\.
201  vnoremenu	 &Edit.&Find\.\.\.			y:promptfind <C-R>"<CR>
202  an 20.420	 &Edit.Find\ and\ Rep&lace\.\.\.	:promptrepl<CR>
203  vunmenu	 &Edit.Find\ and\ Rep&lace\.\.\.
204  vnoremenu	 &Edit.Find\ and\ Rep&lace\.\.\.	y:promptrepl <C-R>"<CR>
205else
206  an 20.410	 &Edit.&Find<Tab>/			/
207  an 20.420	 &Edit.Find\ and\ Rep&lace<Tab>:%s	:%s/
208  vunmenu	 &Edit.Find\ and\ Rep&lace<Tab>:%s
209  vnoremenu	 &Edit.Find\ and\ Rep&lace<Tab>:s	:s/
210endif
211
212an 20.425	 &Edit.-SEP3-				<Nop>
213an 20.430	 &Edit.Settings\ &Window		:options<CR>
214
215" 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
387if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
388  an 20.470 &Edit.Select\ Fo&nt\.\.\.	:set guifont=*<CR>
389endif
390
391" Programming menu
392if !exists("g:ctags_command")
393  if has("vms")
394    let g:ctags_command = "mc vim:ctags ."
395  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
406" Tools.Fold Menu
407if has("folding")
408  an 40.330 &Tools.-SEP1-						<Nop>
409  " open close folds
410  an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi		zi
411  an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv		zv
412  an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx	zMzx
413  an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm		zm
414  an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM		zM
415  an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr		zr
416  an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR		zR
417  " fold method
418  an 40.340.200 &Tools.&Folding.-SEP1-			<Nop>
419  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual	:set fdm=manual<CR>
420  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent	:set fdm=indent<CR>
421  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
422  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax	:set fdm=syntax<CR>
423  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff	:set fdm=diff<CR>
424  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker	:set fdm=marker<CR>
425  " create and delete folds
426  vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf	zf
427  an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd		zd
428  an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD	zD
429  " moving around in folds
430  an 40.340.300 &Tools.&Folding.-SEP2-				<Nop>
431  an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ 	:set fdc=0<CR>
432  an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ 	:set fdc=2<CR>
433  an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ 	:set fdc=3<CR>
434  an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ 	:set fdc=4<CR>
435  an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ 	:set fdc=5<CR>
436  an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ 	:set fdc=6<CR>
437  an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ 	:set fdc=7<CR>
438  an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ 	:set fdc=8<CR>
439endif  " has folding
440
441if has("diff")
442  an 40.350.100 &Tools.&Diff.&Update		:diffupdate<CR>
443  an 40.350.110 &Tools.&Diff.&Get\ Block	:diffget<CR>
444  vunmenu &Tools.&Diff.&Get\ Block
445  vnoremenu &Tools.&Diff.&Get\ Block		:diffget<CR>
446  an 40.350.120 &Tools.&Diff.&Put\ Block	:diffput<CR>
447  vunmenu &Tools.&Diff.&Put\ Block
448  vnoremenu &Tools.&Diff.&Put\ Block		:diffput<CR>
449endif
450
451an 40.358 &Tools.-SEP2-					<Nop>
452an 40.360 &Tools.&Make<Tab>:make			:make<CR>
453an 40.370 &Tools.&List\ Errors<Tab>:cl			:cl<CR>
454an 40.380 &Tools.L&ist\ Messages<Tab>:cl!		:cl!<CR>
455an 40.390 &Tools.&Next\ Error<Tab>:cn			:cn<CR>
456an 40.400 &Tools.&Previous\ Error<Tab>:cp		:cp<CR>
457an 40.410 &Tools.&Older\ List<Tab>:cold			:colder<CR>
458an 40.420 &Tools.N&ewer\ List<Tab>:cnew			:cnewer<CR>
459an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin	:cwin<CR>
460an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen	:copen<CR>
461an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose	:cclose<CR>
462
463an 40.520 &Tools.-SEP3-					<Nop>
464an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
465	\ :call <SID>XxdConv()<CR>
466an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
467	\ :call <SID>XxdBack()<CR>
468
469" Use a function to do the conversion, so that it also works with 'insertmode'
470" set.
471func! s:XxdConv()
472  let mod = &mod
473  if has("vms")
474    %!mc vim:xxd
475  else
476    call s:XxdFind()
477    exe '%!"' . g:xxdprogram . '"'
478  endif
479  if getline(1) =~ "^0000000:"		" only if it worked
480    set ft=xxd
481  endif
482  let &mod = mod
483endfun
484
485func! s:XxdBack()
486  let mod = &mod
487  if has("vms")
488    %!mc vim:xxd -r
489  else
490    call s:XxdFind()
491    exe '%!"' . g:xxdprogram . '" -r'
492  endif
493  set ft=
494  doautocmd filetypedetect BufReadPost
495  let &mod = mod
496endfun
497
498func! s:XxdFind()
499  if !exists("g:xxdprogram")
500    " On the PC xxd may not be in the path but in the install directory
501    if (has("win32") || has("dos32")) && !executable("xxd")
502      let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
503    else
504      let g:xxdprogram = "xxd"
505    endif
506  endif
507endfun
508
509" Setup the Tools.Compiler submenu
510let s:n = globpath(&runtimepath, "compiler/*.vim")
511let s:idx = 100
512while strlen(s:n) > 0
513  let s:i = stridx(s:n, "\n")
514  if s:i < 0
515    let s:name = s:n
516    let s:n = ""
517  else
518    let s:name = strpart(s:n, 0, s:i)
519    let s:n = strpart(s:n, s:i + 1, 19999)
520  endif
521  " Ignore case for VMS and windows
522  let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
523  exe "an 30.440." . s:idx . ' &Tools.&Set\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
524  unlet s:name
525  unlet s:i
526  let s:idx = s:idx + 10
527endwhile
528unlet s:n
529unlet s:idx
530
531if !exists("no_buffers_menu")
532
533" Buffer list menu -- Setup functions & actions
534
535" wait with building the menu until after loading 'session' files. Makes
536" startup faster.
537let s:bmenu_wait = 1
538
539if !exists("bmenu_priority")
540  let bmenu_priority = 60
541endif
542
543func! s:BMAdd()
544  if s:bmenu_wait == 0
545    " when adding too many buffers, redraw in short format
546    if s:bmenu_count == &menuitems && s:bmenu_short == 0
547      call s:BMShow()
548    else
549      call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
550      let s:bmenu_count = s:bmenu_count + 1
551    endif
552  endif
553endfunc
554
555func! s:BMRemove()
556  if s:bmenu_wait == 0
557    let name = expand("<afile>")
558    if isdirectory(name)
559      return
560    endif
561    let munge = <SID>BMMunge(name, expand("<abuf>"))
562
563    if s:bmenu_short == 0
564      exe 'silent! aun &Buffers.' . munge
565    else
566      exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
567    endif
568    let s:bmenu_count = s:bmenu_count - 1
569  endif
570endfunc
571
572" Create the buffer menu (delete an existing one first).
573func! s:BMShow(...)
574  let s:bmenu_wait = 1
575  let s:bmenu_short = 1
576  let s:bmenu_count = 0
577  "
578  " get new priority, if exists
579  if a:0 == 1
580    let g:bmenu_priority = a:1
581  endif
582
583  " remove old menu, if exists; keep one entry to avoid a torn off menu to
584  " disappear.
585  silent! unmenu &Buffers
586  exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
587  silent! unmenu! &Buffers
588
589  " create new menu; set 'cpo' to include the <CR>
590  let cpo_save = &cpo
591  set cpo&vim
592  exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
593  exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
594  exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
595  exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
596  exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
597  exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
598  let &cpo = cpo_save
599  unmenu &Buffers.Dummy
600
601  " figure out how many buffers there are
602  let buf = 1
603  while buf <= bufnr('$')
604    if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
605					    \ && !getbufvar(buf, "&bufsecret")
606      let s:bmenu_count = s:bmenu_count + 1
607    endif
608    let buf = buf + 1
609  endwhile
610  if s:bmenu_count <= &menuitems
611    let s:bmenu_short = 0
612  endif
613
614  " iterate through buffer list, adding each buffer to the menu:
615  let buf = 1
616  while buf <= bufnr('$')
617    if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
618					    \ && !getbufvar(buf, "&bufsecret")
619      call <SID>BMFilename(bufname(buf), buf)
620    endif
621    let buf = buf + 1
622  endwhile
623  let s:bmenu_wait = 0
624  aug buffer_list
625  au!
626  au BufCreate,BufFilePost * call <SID>BMAdd()
627  au BufDelete,BufFilePre * call <SID>BMRemove()
628  aug END
629endfunc
630
631func! s:BMHash(name)
632  " Make name all upper case, so that chars are between 32 and 96
633  let nm = substitute(a:name, ".*", '\U\0', "")
634  if has("ebcdic")
635    " HACK: Replace all non alphabetics with 'Z'
636    "       Just to make it work for now.
637    let nm = substitute(nm, "[^A-Z]", 'Z', "g")
638    let sp = char2nr('A') - 1
639  else
640    let sp = char2nr(' ')
641  endif
642  " convert first six chars into a number for sorting:
643  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)
644endfunc
645
646func! s:BMHash2(name)
647  let nm = substitute(a:name, ".", '\L\0', "")
648  " Not exactly right for EBCDIC...
649  if nm[0] < 'a' || nm[0] > 'z'
650    return '&others.'
651  elseif nm[0] <= 'd'
652    return '&abcd.'
653  elseif nm[0] <= 'h'
654    return '&efgh.'
655  elseif nm[0] <= 'l'
656    return '&ijkl.'
657  elseif nm[0] <= 'p'
658    return '&mnop.'
659  elseif nm[0] <= 't'
660    return '&qrst.'
661  else
662    return '&u-z.'
663  endif
664endfunc
665
666" insert a buffer name into the buffer menu:
667func! s:BMFilename(name, num)
668  if isdirectory(a:name)
669    return
670  endif
671  let munge = <SID>BMMunge(a:name, a:num)
672  let hash = <SID>BMHash(munge)
673  if s:bmenu_short == 0
674    let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
675  else
676    let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
677  endif
678  " set 'cpo' to include the <CR>
679  let cpo_save = &cpo
680  set cpo&vim
681  exe name . ' :confirm b' . a:num . '<CR>'
682  let &cpo = cpo_save
683endfunc
684
685" Truncate a long path to fit it in a menu item.
686if !exists("g:bmenu_max_pathlen")
687  let g:bmenu_max_pathlen = 35
688endif
689func! s:BMTruncName(fname)
690  let name = a:fname
691  if g:bmenu_max_pathlen < 5
692    let name = ""
693  else
694    let len = strlen(name)
695    if len > g:bmenu_max_pathlen
696      let amountl = (g:bmenu_max_pathlen / 2) - 2
697      let amountr = g:bmenu_max_pathlen - amountl - 3
698      let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
699      let left = substitute(name, pattern, '\1', '')
700      let right = substitute(name, pattern, '\2', '')
701      if strlen(left) + strlen(right) < len
702	let name = left . '...' . right
703      endif
704    endif
705  endif
706  return name
707endfunc
708
709func! s:BMMunge(fname, bnum)
710  let name = a:fname
711  if name == ''
712    if !exists("g:menutrans_no_file")
713      let g:menutrans_no_file = "[No file]"
714    endif
715    let name = g:menutrans_no_file
716  else
717    let name = fnamemodify(name, ':p:~')
718  endif
719  " detach file name and separate it out:
720  let name2 = fnamemodify(name, ':t')
721  if a:bnum >= 0
722    let name2 = name2 . ' (' . a:bnum . ')'
723  endif
724  let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
725  let name = escape(name, "\\. \t|")
726  let name = substitute(name, "&", "&&", "g")
727  let name = substitute(name, "\n", "^@", "g")
728  return name
729endfunc
730
731" When just starting Vim, load the buffer menu later
732if has("vim_starting")
733  augroup LoadBufferMenu
734    au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
735    au  VimEnter * au! LoadBufferMenu
736  augroup END
737else
738  call <SID>BMShow()
739endif
740
741endif " !exists("no_buffers_menu")
742
743" Window menu
744an 70.300 &Window.&New<Tab>^Wn			<C-W>n
745an 70.310 &Window.S&plit<Tab>^Ws		<C-W>s
746an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^	<C-W><C-^>
747an 70.330 &Window.Split\ &Vertically<Tab>^Wv	<C-W>v
748if has("vertsplit")
749  an <silent> 70.332 &Window.Split\ File\ E&xplorer	:call MenuExplOpen()<CR>
750  if !exists("*MenuExplOpen")
751    fun MenuExplOpen()
752      if @% == ""
753	20vsp .
754      else
755	exe "20vsp " . expand("%:p:h")
756      endif
757    endfun
758  endif
759endif
760an 70.335 &Window.-SEP1-				<Nop>
761an 70.340 &Window.&Close<Tab>^Wc			:confirm close<CR>
762an 70.345 &Window.Close\ &Other(s)<Tab>^Wo		:confirm only<CR>
763an 70.350 &Window.-SEP2-				<Nop>
764an 70.355 &Window.Move\ &To.&Top<Tab>^WK		<C-W>K
765an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ		<C-W>J
766an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH		<C-W>H
767an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL	<C-W>L
768an 70.360 &Window.Rotate\ &Up<Tab>^WR			<C-W>R
769an 70.362 &Window.Rotate\ &Down<Tab>^Wr			<C-W>r
770an 70.365 &Window.-SEP3-				<Nop>
771an 70.370 &Window.&Equal\ Size<Tab>^W=			<C-W>=
772an 70.380 &Window.&Max\ Height<Tab>^W_			<C-W>_
773an 70.390 &Window.M&in\ Height<Tab>^W1_			<C-W>1_
774an 70.400 &Window.Max\ &Width<Tab>^W\|			<C-W>\|
775an 70.410 &Window.Min\ Widt&h<Tab>^W1\|			<C-W>1\|
776
777" The popup menu
778an 1.10 PopUp.&Undo			u
779an 1.15 PopUp.-SEP1-			<Nop>
780vnoremenu 1.20 PopUp.Cu&t		"+x
781vnoremenu 1.30 PopUp.&Copy		"+y
782cnoremenu 1.30 PopUp.&Copy		<C-Y>
783nnoremenu 1.40 PopUp.&Paste		"+gP
784cnoremenu 1.40 PopUp.&Paste		<C-R>+
785exe 'vnoremenu <script> 1.40 PopUp.&Paste	' . s:paste_v_cmd
786exe 'inoremenu <script> 1.40 PopUp.&Paste	' . s:paste_i_cmd
787vnoremenu 1.50 PopUp.&Delete		x
788an 1.55 PopUp.-SEP2-			<Nop>
789vnoremenu 1.60 PopUp.Select\ Blockwise	<C-V>
790
791nnoremenu 1.70 PopUp.Select\ &Word	vaw
792onoremenu 1.70 PopUp.Select\ &Word	aw
793vnoremenu 1.70 PopUp.Select\ &Word	<C-C>vaw
794inoremenu 1.70 PopUp.Select\ &Word	<C-O>vaw
795cnoremenu 1.70 PopUp.Select\ &Word	<C-C>vaw
796
797nnoremenu 1.73 PopUp.Select\ &Sentence	vas
798onoremenu 1.73 PopUp.Select\ &Sentence	as
799vnoremenu 1.73 PopUp.Select\ &Sentence	<C-C>vas
800inoremenu 1.73 PopUp.Select\ &Sentence	<C-O>vas
801cnoremenu 1.73 PopUp.Select\ &Sentence	<C-C>vas
802
803nnoremenu 1.77 PopUp.Select\ Pa&ragraph	vap
804onoremenu 1.77 PopUp.Select\ Pa&ragraph	ap
805vnoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-C>vap
806inoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-O>vap
807cnoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-C>vap
808
809nnoremenu 1.80 PopUp.Select\ &Line	V
810onoremenu 1.80 PopUp.Select\ &Line	<C-C>V
811vnoremenu 1.80 PopUp.Select\ &Line	<C-C>V
812inoremenu 1.80 PopUp.Select\ &Line	<C-O>V
813cnoremenu 1.80 PopUp.Select\ &Line	<C-C>V
814
815nnoremenu 1.90 PopUp.Select\ &Block	<C-V>
816onoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
817vnoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
818inoremenu 1.90 PopUp.Select\ &Block	<C-O><C-V>
819cnoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
820
821noremenu  <script> <silent> 1.100 PopUp.Select\ &All	:<C-U>call <SID>SelectAll()<CR>
822inoremenu <script> <silent> 1.100 PopUp.Select\ &All	<C-O>:call <SID>SelectAll()<CR>
823cnoremenu <script> <silent> 1.100 PopUp.Select\ &All	<C-U>call <SID>SelectAll()<CR>
824
825
826" The GUI toolbar (for MS-Windows and GTK)
827if has("toolbar")
828  an 1.10 ToolBar.Open			:browse confirm e<CR>
829  an <silent> 1.20 ToolBar.Save		:if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
830  an 1.30 ToolBar.SaveAll		:browse confirm wa<CR>
831
832  if has("printer")
833    an 1.40   ToolBar.Print		:hardcopy<CR>
834    vunmenu   ToolBar.Print
835    vnoremenu ToolBar.Print		:hardcopy<CR>
836  elseif has("unix")
837    an 1.40   ToolBar.Print		:w !lpr<CR>
838    vunmenu   ToolBar.Print
839    vnoremenu ToolBar.Print		:w !lpr<CR>
840  endif
841
842  an 1.45 ToolBar.-sep1-		<Nop>
843  an 1.50 ToolBar.Undo			u
844  an 1.60 ToolBar.Redo			<C-R>
845
846  an 1.65 ToolBar.-sep2-		<Nop>
847  vnoremenu 1.70 ToolBar.Cut		"+x
848  vnoremenu 1.80 ToolBar.Copy		"+y
849  cnoremenu 1.80 ToolBar.Copy		<C-Y>
850  nnoremenu 1.90 ToolBar.Paste		"+gP
851  cnoremenu	 ToolBar.Paste		<C-R>+
852  exe 'vnoremenu <script>	 ToolBar.Paste	' . s:paste_v_cmd
853  exe 'inoremenu <script>	 ToolBar.Paste	' . s:paste_i_cmd
854
855  if !has("gui_athena")
856    an 1.95   ToolBar.-sep3-		<Nop>
857    an 1.100  ToolBar.Find		:promptfind<CR>
858    vunmenu   ToolBar.Find
859    vnoremenu ToolBar.Find		y:promptfind <C-R>"<CR>
860    an 1.110  ToolBar.FindNext		n
861    an 1.120  ToolBar.FindPrev		N
862    an 1.130  ToolBar.Replace		:promptrepl<CR>
863    vunmenu   ToolBar.Replace
864    vnoremenu ToolBar.Replace		y:promptrepl <C-R>"<CR>
865  endif
866
867if 0	" disabled; These are in the Windows menu
868  an 1.135 ToolBar.-sep4-		<Nop>
869  an 1.140 ToolBar.New			<C-W>n
870  an 1.150 ToolBar.WinSplit		<C-W>s
871  an 1.160 ToolBar.WinMax		:resize 200<CR>
872  an 1.170 ToolBar.WinMin		:resize 1<CR>
873  an 1.180 ToolBar.WinVSplit		<C-W>v
874  an 1.190 ToolBar.WinMaxWidth		<C-W>500>
875  an 1.200 ToolBar.WinMinWidth		<C-W>1\|
876  an 1.210 ToolBar.WinClose		:close<CR>
877endif
878
879  an 1.215 ToolBar.-sep5-		<Nop>
880  an <silent> 1.220 ToolBar.LoadSesn	:call <SID>LoadVimSesn()<CR>
881  an <silent> 1.230 ToolBar.SaveSesn	:call <SID>SaveVimSesn()<CR>
882  an 1.240 ToolBar.RunScript		:browse so<CR>
883
884  an 1.245 ToolBar.-sep6-		<Nop>
885  an 1.250 ToolBar.Make			:make<CR>
886  an 1.270 ToolBar.RunCtags		:exe "!" . g:ctags_command<CR>
887  an 1.280 ToolBar.TagJump		g<C-]>
888
889  an 1.295 ToolBar.-sep7-		<Nop>
890  an 1.300 ToolBar.Help			:help<CR>
891  an <silent> 1.310 ToolBar.FindHelp	:call <SID>Helpfind()<CR>
892
893" Only set the tooltips here if not done in a language menu file
894if exists("*Do_toolbar_tmenu")
895  call Do_toolbar_tmenu()
896else
897  let did_toolbar_tmenu = 1
898  tmenu ToolBar.Open		Open file
899  tmenu ToolBar.Save		Save current file
900  tmenu ToolBar.SaveAll		Save all files
901  tmenu ToolBar.Print		Print
902  tmenu ToolBar.Undo		Undo
903  tmenu ToolBar.Redo		Redo
904  tmenu ToolBar.Cut		Cut to clipboard
905  tmenu ToolBar.Copy		Copy to clipboard
906  tmenu ToolBar.Paste		Paste from Clipboard
907  if !has("gui_athena")
908    tmenu ToolBar.Find		Find...
909    tmenu ToolBar.FindNext	Find Next
910    tmenu ToolBar.FindPrev	Find Previous
911    tmenu ToolBar.Replace		Find / Replace...
912  endif
913 if 0	" disabled; These are in the Windows menu
914  tmenu ToolBar.New		New Window
915  tmenu ToolBar.WinSplit	Split Window
916  tmenu ToolBar.WinMax		Maximise Window
917  tmenu ToolBar.WinMin		Minimise Window
918  tmenu ToolBar.WinVSplit	Split Window Vertically
919  tmenu ToolBar.WinMaxWidth	Maximise Window Width
920  tmenu ToolBar.WinMinWidth	Minimise Window Width
921  tmenu ToolBar.WinClose	Close Window
922 endif
923  tmenu ToolBar.LoadSesn	Load session
924  tmenu ToolBar.SaveSesn	Save current session
925  tmenu ToolBar.RunScript	Run a Vim Script
926  tmenu ToolBar.Make		Make current project
927  tmenu ToolBar.RunCtags	Build tags in current directory tree
928  tmenu ToolBar.TagJump		Jump to tag under cursor
929  tmenu ToolBar.Help		Vim Help
930  tmenu ToolBar.FindHelp	Search Vim Help
931endif
932
933" Select a session to load; default to current session name if present
934fun! s:LoadVimSesn()
935  if strlen(v:this_session) > 0
936    let name = v:this_session
937  else
938    let name = "Session.vim"
939  endif
940  execute "browse so " . name
941endfun
942
943" Select a session to save; default to current session name if present
944fun! s:SaveVimSesn()
945  if strlen(v:this_session) == 0
946    let v:this_session = "Session.vim"
947  endif
948  execute "browse mksession! " . v:this_session
949endfun
950
951endif
952
953endif " !exists("did_install_default_menus")
954
955" Define these items always, so that syntax can be switched on when it wasn't.
956" But skip them when the Syntax menu was disabled by the user.
957if !exists("did_install_syntax_menu")
958  an 50.212 &Syntax.&Manual		:syn manual<CR>
959  an 50.214 &Syntax.A&utomatic		:syn on<CR>
960  an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
961  if !exists("*s:SynOnOff")
962    fun s:SynOnOff()
963      if has("syntax_items")
964	syn clear
965      else
966	if !exists("g:syntax_on")
967	  syn manual
968	endif
969	set syn=ON
970      endif
971    endfun
972  endif
973endif
974
975
976" Install the Syntax menu only when filetype.vim has been loaded or when
977" manual syntax highlighting is enabled.
978" Avoid installing the Syntax menu twice.
979if (exists("did_load_filetypes") || exists("syntax_on"))
980	\ && !exists("did_install_syntax_menu")
981  let did_install_syntax_menu = 1
982
983" Skip setting up the individual syntax selection menus unless
984" do_syntax_sel_menu is defined (it takes quite a bit of time).
985if exists("do_syntax_sel_menu")
986  runtime! synmenu.vim
987else
988  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>
989  an 50.195 &Syntax.-SEP1-		<Nop>
990endif
991
992an 50.210 &Syntax.&Off			:syn off<CR>
993an 50.700 &Syntax.-SEP3-		<Nop>
994an 50.710 &Syntax.Co&lor\ test		:sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
995an 50.720 &Syntax.&Highlight\ test	:runtime syntax/hitest.vim<CR>
996an 50.730 &Syntax.&Convert\ to\ HTML	:runtime syntax/2html.vim<CR>
997
998endif " !exists("did_install_syntax_menu")
999
1000unlet! s:paste_i_cmd s:paste_v_cmd s:paste_cmd
1001
1002" Restore the previous value of 'cpoptions'.
1003let &cpo = s:cpo_save
1004unlet s:cpo_save
1005
1006" vim: set sw=2 :
1007