1 " Vim support file to define the default menus
2 " You can also use this as a start for your own set of menus.
4 " Maintainer: Bram Moolenaar <Bram@vim.org>
5 " Last Change: 2009 Feb 26
7 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
8 " in all modes and avoid side effects from mappings defined by the user.
10 " Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
11 " <CR> would not be recognized. See ":help 'cpoptions'".
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)
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.105 &Edit.F&ile\ Settings.Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! :set rnu! rnu?<CR>
280 an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
281 an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
282 an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
283 an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
284 an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
285 an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
288 an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
289 an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
290 an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
291 an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
292 an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
293 an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
294 an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
296 an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
297 an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
298 an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
299 an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
300 an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
301 an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
303 an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
304 an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
306 if !exists("g:menutrans_textwidth_dialog")
307 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
309 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
311 " remove leading zeros to avoid it being used as an octal number
312 let &tw = substitute(n, "^0*", "", "")
317 if !exists("g:menutrans_fileformat_dialog")
318 let g:menutrans_fileformat_dialog = "Select format for writing the file"
320 if !exists("g:menutrans_fileformat_choices")
321 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
330 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
340 " Setup the Edit.Color Scheme submenu
341 let s:n = globpath(&runtimepath, "colors/*.vim")
343 while strlen(s:n) > 0
344 let s:i = stridx(s:n, "\n")
349 let s:name = strpart(s:n, 0, s:i)
350 let s:n = strpart(s:n, s:i + 1, 19999)
352 " Ignore case for VMS and windows
353 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
354 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
357 let s:idx = s:idx + 10
362 " Setup the Edit.Keymap submenu
364 let s:n = globpath(&runtimepath, "keymap/*.vim")
367 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
368 while strlen(s:n) > 0
369 let s:i = stridx(s:n, "\n")
374 let s:name = strpart(s:n, 0, s:i)
375 let s:n = strpart(s:n, s:i + 1, 19999)
377 " Ignore case for VMS and windows
378 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
379 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
382 let s:idx = s:idx + 10
388 if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
389 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
393 if !exists("g:ctags_command")
395 let g:ctags_command = "mc vim:ctags *.*"
397 let g:ctags_command = "ctags -R ."
401 an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
402 vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
403 vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
404 an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
405 an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
407 if has("folding") || has("spell")
408 an 40.330 &Tools.-SEP1- <Nop>
411 " Tools.Spelling Menu
413 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
414 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
415 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
416 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
417 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
418 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
419 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
420 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
421 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
422 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
423 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
424 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
425 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
426 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
428 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
430 for cmd in s:undo_spellang
433 let s:undo_spellang = []
435 if &enc == "iso-8859-15"
442 let s = globpath(&rtp, "spell/*." . enc . ".spl")
445 for f in split(s, "\n")
446 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
447 if nm != "en" && nm !~ '/'
449 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
450 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
451 let s:undo_spellang += ['aun ' . menuname]
457 echomsg "Could not find other spell files"
459 echomsg "Found spell file " . nm
461 echomsg "Found " . found . " more spell files"
463 " Need to redo this when 'encoding' is changed.
465 au! EncodingChanged * call <SID>SpellLang()
474 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
475 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
476 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
477 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
478 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
479 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
480 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
482 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
483 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
484 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
485 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
486 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
487 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
488 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
489 " create and delete folds
490 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
491 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
492 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
493 " moving around in folds
494 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
495 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
496 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
497 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
498 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
499 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
500 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
501 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
502 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
506 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
507 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
508 vunmenu &Tools.&Diff.&Get\ Block
509 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
510 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
511 vunmenu &Tools.&Diff.&Put\ Block
512 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
515 an 40.358 &Tools.-SEP2- <Nop>
516 an 40.360 &Tools.&Make<Tab>:make :make<CR>
517 an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
518 an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
519 an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
520 an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
521 an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
522 an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
523 an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
524 an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
525 an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
527 an 40.520 &Tools.-SEP3- <Nop>
528 an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
529 \ :call <SID>XxdConv()<CR>
530 an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
531 \ :call <SID>XxdBack()<CR>
533 " Use a function to do the conversion, so that it also works with 'insertmode'
541 exe '%!"' . g:xxdprogram . '"'
543 if getline(1) =~ "^0000000:" " only if it worked
555 exe '%!"' . g:xxdprogram . '" -r'
558 doautocmd filetypedetect BufReadPost
563 if !exists("g:xxdprogram")
564 " On the PC xxd may not be in the path but in the install directory
565 if (has("win32") || has("dos32")) && !executable("xxd")
566 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
568 let g:xxdprogram = "xxd"
573 " Setup the Tools.Compiler submenu
574 let s:n = globpath(&runtimepath, "compiler/*.vim")
576 while strlen(s:n) > 0
577 let s:i = stridx(s:n, "\n")
582 let s:name = strpart(s:n, 0, s:i)
583 let s:n = strpart(s:n, s:i + 1, 19999)
585 " Ignore case for VMS and windows
586 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
587 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
590 let s:idx = s:idx + 10
595 if !exists("no_buffers_menu")
597 " Buffer list menu -- Setup functions & actions
599 " wait with building the menu until after loading 'session' files. Makes
603 if !exists("bmenu_priority")
604 let bmenu_priority = 60
609 " when adding too many buffers, redraw in short format
610 if s:bmenu_count == &menuitems && s:bmenu_short == 0
613 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
614 let s:bmenu_count = s:bmenu_count + 1
621 let name = expand("<afile>")
625 let munge = <SID>BMMunge(name, expand("<abuf>"))
627 if s:bmenu_short == 0
628 exe 'silent! aun &Buffers.' . munge
630 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
632 let s:bmenu_count = s:bmenu_count - 1
636 " Create the buffer menu (delete an existing one first).
639 let s:bmenu_short = 1
640 let s:bmenu_count = 0
642 " get new priority, if exists
644 let g:bmenu_priority = a:1
647 " remove old menu, if exists; keep one entry to avoid a torn off menu to
649 silent! unmenu &Buffers
650 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
651 silent! unmenu! &Buffers
653 " create new menu; set 'cpo' to include the <CR>
656 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
657 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
658 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
659 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
660 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
661 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
663 unmenu &Buffers.Dummy
665 " figure out how many buffers there are
667 while buf <= bufnr('$')
668 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
669 let s:bmenu_count = s:bmenu_count + 1
673 if s:bmenu_count <= &menuitems
674 let s:bmenu_short = 0
677 " iterate through buffer list, adding each buffer to the menu:
679 while buf <= bufnr('$')
680 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
681 call <SID>BMFilename(bufname(buf), buf)
688 au BufCreate,BufFilePost * call <SID>BMAdd()
689 au BufDelete,BufFilePre * call <SID>BMRemove()
694 " Make name all upper case, so that chars are between 32 and 96
695 let nm = substitute(a:name, ".*", '\U\0', "")
697 " HACK: Replace all non alphabetics with 'Z'
698 " Just to make it work for now.
699 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
700 let sp = char2nr('A') - 1
702 let sp = char2nr(' ')
704 " convert first six chars into a number for sorting:
705 return (char2nr(nm[0]) - sp) * 0x800000 + (char2nr(nm[1]) - sp) * 0x20000 + (char2nr(nm[2]) - sp) * 0x1000 + (char2nr(nm[3]) - sp) * 0x80 + (char2nr(nm[4]) - sp) * 0x20 + (char2nr(nm[5]) - sp)
708 func! s:BMHash2(name)
709 let nm = substitute(a:name, ".", '\L\0', "")
710 " Not exactly right for EBCDIC...
711 if nm[0] < 'a' || nm[0] > 'z'
728 " insert a buffer name into the buffer menu:
729 func! s:BMFilename(name, num)
730 if isdirectory(a:name)
733 let munge = <SID>BMMunge(a:name, a:num)
734 let hash = <SID>BMHash(munge)
735 if s:bmenu_short == 0
736 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
738 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
740 " set 'cpo' to include the <CR>
743 exe name . ' :confirm b' . a:num . '<CR>'
747 " Truncate a long path to fit it in a menu item.
748 if !exists("g:bmenu_max_pathlen")
749 let g:bmenu_max_pathlen = 35
751 func! s:BMTruncName(fname)
753 if g:bmenu_max_pathlen < 5
756 let len = strlen(name)
757 if len > g:bmenu_max_pathlen
758 let amountl = (g:bmenu_max_pathlen / 2) - 2
759 let amountr = g:bmenu_max_pathlen - amountl - 3
760 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
761 let left = substitute(name, pattern, '\1', '')
762 let right = substitute(name, pattern, '\2', '')
763 if strlen(left) + strlen(right) < len
764 let name = left . '...' . right
771 func! s:BMMunge(fname, bnum)
774 if !exists("g:menutrans_no_file")
775 let g:menutrans_no_file = "[No file]"
777 let name = g:menutrans_no_file
779 let name = fnamemodify(name, ':p:~')
781 " detach file name and separate it out:
782 let name2 = fnamemodify(name, ':t')
784 let name2 = name2 . ' (' . a:bnum . ')'
786 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
787 let name = escape(name, "\\. \t|")
788 let name = substitute(name, "&", "&&", "g")
789 let name = substitute(name, "\n", "^@", "g")
793 " When just starting Vim, load the buffer menu later
794 if has("vim_starting")
795 augroup LoadBufferMenu
796 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
797 au VimEnter * au! LoadBufferMenu
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