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: 2008 Jun 30
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'".
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.
23 if &langmenu =~ "none"
26 let s:lang = &langmenu
31 " A language name must be at least two characters, don't accept "C"
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
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", "")
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"
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>
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')"
88 let h = inputdialog(g:menutrans_help_dialog)
91 silent! exe "help " . h
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>
107 \ confirm close <Bar>
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>
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>
120 an 10.500 &File.-SEP3- <Nop>
121 an 10.510 &File.&Print :hardcopy<CR>
123 vnoremenu &File.&Print :hardcopy<CR>
125 an 10.500 &File.-SEP3- <Nop>
126 an 10.510 &File.&Print :w !lpr<CR>
128 vnoremenu &File.&Print :w !lpr<CR>
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")
138 func! s:FnameEscape(fname)
139 if exists('*fnameescape')
140 return fnameescape(a:fname)
141 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
145 an 20.310 &Edit.&Undo<Tab>u u
146 an 20.320 &Edit.&Redo<Tab>^R <C-R>
147 an 20.330 &Edit.Rep&eat<Tab>\. .
149 an 20.335 &Edit.-SEP1- <Nop>
150 vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
151 vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
152 cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
153 nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
154 cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
155 exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
156 exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
157 nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
158 inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
159 nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
160 inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
161 if has("win32") || has("win16")
162 vnoremenu 20.390 &Edit.&Delete<Tab>x x
164 noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
165 inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
166 cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
168 an 20.405 &Edit.-SEP2- <Nop>
169 if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
170 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
171 vunmenu &Edit.&Find\.\.\.
172 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
173 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
174 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
175 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
177 an 20.410 &Edit.&Find<Tab>/ /
178 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
179 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
180 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
183 an 20.425 &Edit.-SEP3- <Nop>
184 an 20.430 &Edit.Settings\ &Window :options<CR>
185 an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
190 elseif has("win32") || has("dos32") || has("dos16") || has("os2")
192 let fname = $HOME . "/_vimrc"
194 let fname = $VIM . "/_vimrc"
197 let fname = "s:.vimrc"
199 let fname = $HOME . "/.vimrc"
201 let fname = s:FnameEscape(fname)
210 " Fix text in nameless register to be used with :promptfind.
211 return substitute(@", "[\r\n]", '\\n', 'g')
214 " Edit/Global Settings
215 an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
216 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
217 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
219 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
220 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
221 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
222 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
223 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
224 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
225 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
226 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
228 an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
229 an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
230 an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
231 an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
232 an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
233 an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
234 an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
235 an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
236 an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
239 an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
240 an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
241 an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
242 an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
243 an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
246 if !exists("g:menutrans_path_dialog")
247 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
249 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
251 let &path = substitute(n, ' ', '\\ ', 'g')
256 if !exists("g:menutrans_tags_dialog")
257 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
259 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
261 let &tags = substitute(n, ' ', '\\ ', 'g')
265 fun! s:ToggleGuiOption(option)
266 " If a:option is already set in guioptions, then we want to remove it
267 if match(&guioptions, "\\C" . a:option) > -1
268 exec "set go-=" . a:option
270 exec "set go+=" . a:option
277 an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
278 an 20.440.105 &Edit.F&ile\ Settings.Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! :set rnu! rnu?<CR>
279 an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
280 an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
281 an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
282 an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
283 an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
284 an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
287 an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
288 an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
289 an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
290 an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
291 an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
292 an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
293 an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
295 an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
296 an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
297 an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
298 an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
299 an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
300 an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
302 an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
303 an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
305 if !exists("g:menutrans_textwidth_dialog")
306 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
308 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
310 " remove leading zeros to avoid it being used as an octal number
311 let &tw = substitute(n, "^0*", "", "")
316 if !exists("g:menutrans_fileformat_dialog")
317 let g:menutrans_fileformat_dialog = "Select format for writing the file"
319 if !exists("g:menutrans_fileformat_choices")
320 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
329 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
339 " Setup the Edit.Color Scheme submenu
340 let s:n = globpath(&runtimepath, "colors/*.vim")
342 while strlen(s:n) > 0
343 let s:i = stridx(s:n, "\n")
348 let s:name = strpart(s:n, 0, s:i)
349 let s:n = strpart(s:n, s:i + 1, 19999)
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>"
356 let s:idx = s:idx + 10
361 " Setup the Edit.Keymap submenu
363 let s:n = globpath(&runtimepath, "keymap/*.vim")
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")
373 let s:name = strpart(s:n, 0, s:i)
374 let s:n = strpart(s:n, s:i + 1, 19999)
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>"
381 let s:idx = s:idx + 10
387 if 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>
392 if !exists("g:ctags_command")
394 let g:ctags_command = "mc vim:ctags *.*"
396 let g:ctags_command = "ctags -R ."
400 an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
401 vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
402 vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
403 an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
404 an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
406 if has("folding") || has("spell")
407 an 40.330 &Tools.-SEP1- <Nop>
410 " Tools.Spelling Menu
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
415 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
416 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
417 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
418 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>
427 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
429 for cmd in s:undo_spellang
432 let s:undo_spellang = []
434 if &enc == "iso-8859-15"
441 let s = globpath(&rtp, "spell/*." . enc . ".spl")
444 for f in split(s, "\n")
445 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
446 if nm != "en" && nm !~ '/'
448 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]
456 echomsg "Could not find other spell files"
458 echomsg "Found spell file " . nm
460 echomsg "Found " . found . " more spell files"
462 " Need to redo this when 'encoding' is changed.
464 au! EncodingChanged * call <SID>SpellLang()
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
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>
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>
514 an 40.358 &Tools.-SEP2- <Nop>
515 an 40.360 &Tools.&Make<Tab>:make :make<CR>
516 an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
517 an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
518 an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
519 an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
520 an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
521 an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
522 an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
523 an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
524 an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
526 an 40.520 &Tools.-SEP3- <Nop>
527 an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
528 \ :call <SID>XxdConv()<CR>
529 an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
530 \ :call <SID>XxdBack()<CR>
532 " Use a function to do the conversion, so that it also works with 'insertmode'
540 exe '%!"' . g:xxdprogram . '"'
542 if getline(1) =~ "^0000000:" " only if it worked
554 exe '%!"' . g:xxdprogram . '" -r'
557 doautocmd filetypedetect BufReadPost
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"
567 let g:xxdprogram = "xxd"
572 " Setup the Tools.Compiler submenu
573 let s:n = globpath(&runtimepath, "compiler/*.vim")
575 while strlen(s:n) > 0
576 let s:i = stridx(s:n, "\n")
581 let s:name = strpart(s:n, 0, s:i)
582 let s:n = strpart(s:n, s:i + 1, 19999)
584 " Ignore case for VMS and windows
585 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
586 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
589 let s:idx = s:idx + 10
594 if !exists("no_buffers_menu")
596 " Buffer list menu -- Setup functions & actions
598 " wait with building the menu until after loading 'session' files. Makes
602 if !exists("bmenu_priority")
603 let bmenu_priority = 60
608 " when adding too many buffers, redraw in short format
609 if s:bmenu_count == &menuitems && s:bmenu_short == 0
612 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
613 let s:bmenu_count = s:bmenu_count + 1
620 let name = expand("<afile>")
624 let munge = <SID>BMMunge(name, expand("<abuf>"))
626 if s:bmenu_short == 0
627 exe 'silent! aun &Buffers.' . munge
629 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
631 let s:bmenu_count = s:bmenu_count - 1
635 " Create the buffer menu (delete an existing one first).
638 let s:bmenu_short = 1
639 let s:bmenu_count = 0
641 " get new priority, if exists
643 let g:bmenu_priority = a:1
646 " remove old menu, if exists; keep one entry to avoid a torn off menu to
648 silent! unmenu &Buffers
649 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
650 silent! unmenu! &Buffers
652 " create new menu; set 'cpo' to include the <CR>
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- :"
662 unmenu &Buffers.Dummy
664 " figure out how many buffers there are
666 while buf <= bufnr('$')
667 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
668 let s:bmenu_count = s:bmenu_count + 1
672 if s:bmenu_count <= &menuitems
673 let s:bmenu_short = 0
676 " iterate through buffer list, adding each buffer to the menu:
678 while buf <= bufnr('$')
679 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
680 call <SID>BMFilename(bufname(buf), buf)
687 au BufCreate,BufFilePost * call <SID>BMAdd()
688 au BufDelete,BufFilePre * call <SID>BMRemove()
693 " Make name all upper case, so that chars are between 32 and 96
694 let nm = substitute(a:name, ".*", '\U\0', "")
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
701 let sp = char2nr(' ')
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)
707 func! 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'
727 " insert a buffer name into the buffer menu:
728 func! s:BMFilename(name, num)
729 if isdirectory(a:name)
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
737 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
739 " set 'cpo' to include the <CR>
742 exe name . ' :confirm b' . a:num . '<CR>'
746 " Truncate a long path to fit it in a menu item.
747 if !exists("g:bmenu_max_pathlen")
748 let g:bmenu_max_pathlen = 35
750 func! s:BMTruncName(fname)
752 if g:bmenu_max_pathlen < 5
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
770 func! s:BMMunge(fname, bnum)
773 if !exists("g:menutrans_no_file")
774 let g:menutrans_no_file = "[No file]"
776 let name = g:menutrans_no_file
778 let name = fnamemodify(name, ':p:~')
780 " detach file name and separate it out:
781 let name2 = fnamemodify(name, ':t')
783 let name2 = name2 . ' (' . a:bnum . ')'
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")
792 " When just starting Vim, load the buffer menu later
793 if has("vim_starting")
794 augroup LoadBufferMenu
795 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
796 au VimEnter * au! LoadBufferMenu
802 endif " !exists("no_buffers_menu")
805 an 70.300 &Window.&New<Tab>^Wn <C-W>n
806 an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
807 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
808 an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
810 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
811 if !exists("*MenuExplOpen")
816 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
821 an 70.335 &Window.-SEP1- <Nop>
822 an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
823 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
824 an 70.350 &Window.-SEP2- <Nop>
825 an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
826 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
827 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
828 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
829 an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
830 an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
831 an 70.365 &Window.-SEP3- <Nop>
832 an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
833 an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
834 an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
835 an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
836 an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
839 an 1.10 PopUp.&Undo u
840 an 1.15 PopUp.-SEP1- <Nop>
841 vnoremenu 1.20 PopUp.Cu&t "+x
842 vnoremenu 1.30 PopUp.&Copy "+y
843 cnoremenu 1.30 PopUp.&Copy <C-Y>
844 nnoremenu 1.40 PopUp.&Paste "+gP
845 cnoremenu 1.40 PopUp.&Paste <C-R>+
846 exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
847 exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
848 vnoremenu 1.50 PopUp.&Delete x
849 an 1.55 PopUp.-SEP2- <Nop>
850 vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
852 nnoremenu 1.70 PopUp.Select\ &Word vaw
853 onoremenu 1.70 PopUp.Select\ &Word aw
854 vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
855 inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
856 cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
858 nnoremenu 1.73 PopUp.Select\ &Sentence vas
859 onoremenu 1.73 PopUp.Select\ &Sentence as
860 vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
861 inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
862 cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
864 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
865 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
866 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
867 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
868 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
870 nnoremenu 1.80 PopUp.Select\ &Line V
871 onoremenu 1.80 PopUp.Select\ &Line <C-C>V
872 vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
873 inoremenu 1.80 PopUp.Select\ &Line <C-O>V
874 cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
876 nnoremenu 1.90 PopUp.Select\ &Block <C-V>
877 onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
878 vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
879 inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
880 cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
882 noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
883 inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
884 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
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 != ''
894 " Return quickly if spell checking is not enabled.
895 if !&spell || &spelllang == ''
899 let curcol = col('.')
900 let [w, a] = spellbadword()
901 if col('.') > curcol " don't use word after the cursor
903 call cursor(0, curcol) " put the cursor back where it was
907 let s:suglist = [substitute(w, '.*', '\u&', '')]
909 let s:suglist = spellsuggest(w, 10)
911 if len(s:suglist) <= 0
912 call cursor(0, curcol) " put the cursor back where it was
914 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
918 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
919 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
923 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
924 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
926 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
927 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
929 anoremenu 1.8 PopUp.-SpellSep- :
934 func! <SID>SpellReplace(n)
936 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
937 \ . strpart(l, col('.') + len(s:fromword) - 1))
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 = ''
948 augroup SpellPopupMenu
949 au! MenuPopup * call <SID>SpellPopup()
953 " The GUI toolbar (for MS-Windows and GTK)
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>
960 an 1.40 ToolBar.Print :hardcopy<CR>
961 vunmenu ToolBar.Print
962 vnoremenu ToolBar.Print :hardcopy<CR>
964 an 1.40 ToolBar.Print :w !lpr<CR>
965 vunmenu ToolBar.Print
966 vnoremenu ToolBar.Print :w !lpr<CR>
969 an 1.45 ToolBar.-sep1- <Nop>
970 an 1.50 ToolBar.Undo u
971 an 1.60 ToolBar.Redo <C-R>
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>+
979 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
980 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
982 if !has("gui_athena")
983 an 1.95 ToolBar.-sep3- <Nop>
984 an 1.100 ToolBar.Replace :promptrepl<CR>
985 vunmenu ToolBar.Replace
986 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
987 an 1.110 ToolBar.FindNext n
988 an 1.120 ToolBar.FindPrev N
991 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>
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-]>
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>
1005 " Only set the tooltips here if not done in a language menu file
1006 if exists("*Do_toolbar_tmenu")
1007 call Do_toolbar_tmenu()
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")
1020 tmenu ToolBar.Find Find...
1021 tmenu ToolBar.FindNext Find Next
1022 tmenu ToolBar.FindPrev Find Previous
1023 tmenu ToolBar.Replace Find / Replace...
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
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)
1040 let name = "Session.vim"
1042 execute "browse so " . name
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"
1050 execute "browse mksession! " . s:FnameEscape(v:this_session)
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")
1065 if has("syntax_items")
1068 if !exists("g:syntax_on")
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
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>
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