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 Aug 22
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 " Localized menus currently not supported in MacVim
21 if !has("gui_macvim") && (exists("v:lang") || &langmenu != "")
22 " Try to find a menu translation file for the current language.
24 if &langmenu =~ "none"
27 let s:lang = &langmenu
32 " A language name must be at least two characters, don't accept "C"
34 " When the language does not include the charset add 'encoding'
35 if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
36 let s:lang = s:lang . '.' . &enc
39 " We always use a lowercase name.
40 " Change "iso-8859" to "iso_8859" and "iso8859" to "iso_8859", some
41 " systems appear to use this.
42 " Change spaces to underscores.
43 let s:lang = substitute(tolower(s:lang), '\.iso-', ".iso_", "")
44 let s:lang = substitute(s:lang, '\.iso8859', ".iso_8859", "")
45 let s:lang = substitute(s:lang, " ", "_", "g")
46 " Remove "@euro", otherwise "LC_ALL=de_DE@euro gvim" will show English menus
47 let s:lang = substitute(s:lang, "@euro", "", "")
48 " Change "iso_8859-1" and "iso_8859-15" to "latin1", we always use the
49 " same menu file for them.
50 let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "")
52 exe "runtime! lang/menu_" . s:lang . ".vim"
54 if !exists("did_menu_trans")
55 " There is no exact match, try matching with a wildcard added
56 " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE).
57 let s:lang = substitute(s:lang, '\.[^.]*', "", "")
58 exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
60 if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
61 " On windows locale names are complicated, try using $LANG, it might
62 " have been set by set_init_1(). But don't do this for "en" or "en_us".
63 " But don't match "slovak" when $LANG is "sl".
64 exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
72 an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
73 an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
74 an 9999.30 &Help.&How-to\ links :help how-to<CR>
75 an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
76 an 9999.45 &Help.-sep1- <Nop>
77 an 9999.50 &Help.&Credits :help credits<CR>
78 an 9999.60 &Help.Co&pying :help copying<CR>
79 an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
80 an 9999.70 &Help.O&rphans :help kcc<CR>
81 an 9999.75 &Help.-sep2- <Nop>
82 an 9999.80 &Help.&Version :version<CR>
83 an 9999.90 &Help.&About :intro<CR>
86 if !exists("g:menutrans_help_dialog")
87 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')"
89 let h = inputdialog(g:menutrans_help_dialog)
92 silent! exe "help " . h
100 an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
101 an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
102 an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew :browse tabnew<CR>
103 an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
104 an <silent> 10.330 &File.&Close<Tab>:close
105 \ :if winheight(2) < 0 <Bar>
108 \ confirm close <Bar>
110 an 10.335 &File.-SEP1- <Nop>
111 an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
112 an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
115 an 10.400 &File.-SEP2- <Nop>
116 an 10.410 &File.Split\ &Diff\ with\.\.\. :browse vert diffsplit<CR>
117 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
121 an 10.500 &File.-SEP3- <Nop>
122 an 10.510 &File.&Print :hardcopy<CR>
124 vnoremenu &File.&Print :hardcopy<CR>
126 an 10.500 &File.-SEP3- <Nop>
127 an 10.510 &File.&Print :w !lpr<CR>
129 vnoremenu &File.&Print :w !lpr<CR>
131 an 10.600 &File.-SEP4- <Nop>
132 an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
133 an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
135 func! <SID>SelectAll()
136 exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
139 func! s:FnameEscape(fname)
140 if exists('*fnameescape')
141 return fnameescape(a:fname)
142 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
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
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>
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/
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>
191 elseif has("win32") || has("dos32") || has("dos16") || has("os2")
193 let fname = $HOME . "/_vimrc"
195 let fname = $VIM . "/_vimrc"
198 let fname = "s:.vimrc"
200 let fname = $HOME . "/.vimrc"
202 let fname = s:FnameEscape(fname)
211 " Fix text in nameless register to be used with :promptfind.
212 return substitute(@", "[\r\n]", '\\n', 'g')
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>
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>
247 if !exists("g:menutrans_path_dialog")
248 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
250 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
252 let &path = substitute(n, ' ', '\\ ', 'g')
257 if !exists("g:menutrans_tags_dialog")
258 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
260 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
262 let &tags = substitute(n, ' ', '\\ ', 'g')
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
271 exec "set go+=" . a:option
278 an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<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. Don't do this for MacVim
793 " because it makes the menu flicker each time a new editor window is opened.
794 if has("vim_starting") && !has("gui_macvim")
795 augroup LoadBufferMenu
796 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
797 au VimEnter * au! LoadBufferMenu
803 endif " !exists("no_buffers_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
811 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
812 if !exists("*MenuExplOpen")
817 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
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\|
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>
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 != ''
895 " Return quickly if spell checking is not enabled.
896 if !&spell || &spelllang == ''
900 let curcol = col('.')
901 let [w, a] = spellbadword()
902 if col('.') > curcol " don't use word after the cursor
904 call cursor(0, curcol) " put the cursor back where it was
908 let s:suglist = [substitute(w, '.*', '\u&', '')]
910 let s:suglist = spellsuggest(w, 10)
912 if len(s:suglist) <= 0
913 call cursor(0, curcol) " put the cursor back where it was
915 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
919 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
920 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
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- :
935 func! <SID>SpellReplace(n)
937 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
938 \ . strpart(l, col('.') + len(s:fromword) - 1))
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 = ''
949 augroup SpellPopupMenu
950 au! MenuPopup * call <SID>SpellPopup()
954 " The GUI toolbar (for MS-Windows and GTK)
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>
961 an 1.40 ToolBar.Print :hardcopy<CR>
962 vunmenu ToolBar.Print
963 vnoremenu ToolBar.Print :hardcopy<CR>
965 an 1.40 ToolBar.Print :w !lpr<CR>
966 vunmenu ToolBar.Print
967 vnoremenu ToolBar.Print :w !lpr<CR>
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
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()
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
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