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: 2007 Nov 19
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")
140 an 20.310 &Edit.&Undo<Tab>u u
141 an 20.320 &Edit.&Redo<Tab>^R <C-R>
142 an 20.330 &Edit.Rep&eat<Tab>\. .
144 an 20.335 &Edit.-SEP1- <Nop>
145 vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
146 vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
147 cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
148 nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
149 cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
150 exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
151 exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
152 nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
153 inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
154 nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
155 inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
156 if has("win32") || has("win16")
157 vnoremenu 20.390 &Edit.&Delete<Tab>x x
159 noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
160 inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
161 cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
163 an 20.405 &Edit.-SEP2- <Nop>
164 if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
165 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
166 vunmenu &Edit.&Find\.\.\.
167 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
168 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
169 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
170 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
172 an 20.410 &Edit.&Find<Tab>/ /
173 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
174 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
175 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
178 an 20.425 &Edit.-SEP3- <Nop>
179 an 20.430 &Edit.Settings\ &Window :options<CR>
180 an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
184 let fname = "$MYVIMRC"
185 elseif has("win32") || has("dos32") || has("dos16") || has("os2")
187 let fname = "$HOME/_vimrc"
189 let fname = "$VIM/_vimrc"
192 let fname = "s:.vimrc"
194 let fname = "$HOME/.vimrc"
204 " Fix text in nameless register to be used with :promptfind.
205 return substitute(@", "[\r\n]", '\\n', 'g')
208 " Edit/Global Settings
209 an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
210 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
211 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
213 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
214 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
215 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
216 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
217 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
218 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
219 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
220 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
222 an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
223 an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
224 an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
225 an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
226 an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
227 an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
228 an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
229 an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
230 an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
233 an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
234 an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
235 an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
236 an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
237 an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
240 if !exists("g:menutrans_path_dialog")
241 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
243 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
245 let &path = substitute(n, ' ', '\\ ', 'g')
250 if !exists("g:menutrans_tags_dialog")
251 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
253 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
255 let &tags = substitute(n, ' ', '\\ ', 'g')
259 fun! s:ToggleGuiOption(option)
260 " If a:option is already set in guioptions, then we want to remove it
261 if match(&guioptions, "\\C" . a:option) > -1
262 exec "set go-=" . a:option
264 exec "set go+=" . a:option
271 an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
272 an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
273 an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
274 an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
275 an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
276 an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
277 an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
280 an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
281 an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
282 an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
283 an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
284 an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
285 an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
286 an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
288 an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
289 an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
290 an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
291 an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
292 an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
293 an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
295 an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
296 an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
298 if !exists("g:menutrans_textwidth_dialog")
299 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
301 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
303 " remove leading zeros to avoid it being used as an octal number
304 let &tw = substitute(n, "^0*", "", "")
309 if !exists("g:menutrans_fileformat_dialog")
310 let g:menutrans_fileformat_dialog = "Select format for writing the file"
312 if !exists("g:menutrans_fileformat_choices")
313 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
322 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
332 " Setup the Edit.Color Scheme submenu
333 let s:n = globpath(&runtimepath, "colors/*.vim")
335 while strlen(s:n) > 0
336 let s:i = stridx(s:n, "\n")
341 let s:name = strpart(s:n, 0, s:i)
342 let s:n = strpart(s:n, s:i + 1, 19999)
344 " Ignore case for VMS and windows
345 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
346 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
349 let s:idx = s:idx + 10
354 " Setup the Edit.Keymap submenu
356 let s:n = globpath(&runtimepath, "keymap/*.vim")
359 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
360 while strlen(s:n) > 0
361 let s:i = stridx(s:n, "\n")
366 let s:name = strpart(s:n, 0, s:i)
367 let s:n = strpart(s:n, s:i + 1, 19999)
369 " Ignore case for VMS and windows
370 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
371 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
374 let s:idx = s:idx + 10
380 if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
381 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
385 if !exists("g:ctags_command")
387 let g:ctags_command = "mc vim:ctags *.*"
389 let g:ctags_command = "ctags -R ."
393 an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
394 vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
395 vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
396 an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
397 an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
399 if has("folding") || has("spell")
400 an 40.330 &Tools.-SEP1- <Nop>
403 " Tools.Spelling Menu
405 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
406 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
407 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
408 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
409 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
410 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
411 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
412 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
413 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
414 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
415 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
416 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
417 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
418 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
420 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
422 for cmd in s:undo_spellang
425 let s:undo_spellang = []
427 if &enc == "iso-8859-15"
434 let s = globpath(&rtp, "spell/*." . enc . ".spl")
437 for f in split(s, "\n")
438 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
439 if nm != "en" && nm !~ '/'
441 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
442 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
443 let s:undo_spellang += ['aun ' . menuname]
449 echomsg "Could not find other spell files"
451 echomsg "Found spell file " . nm
453 echomsg "Found " . found . " more spell files"
455 " Need to redo this when 'encoding' is changed.
457 au! EncodingChanged * call <SID>SpellLang()
466 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
467 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
468 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
469 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
470 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
471 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
472 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
474 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
475 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
476 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
477 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
478 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
479 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
480 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
481 " create and delete folds
482 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
483 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
484 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
485 " moving around in folds
486 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
487 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
488 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
489 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
490 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
491 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
492 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
493 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
494 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
498 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
499 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
500 vunmenu &Tools.&Diff.&Get\ Block
501 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
502 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
503 vunmenu &Tools.&Diff.&Put\ Block
504 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
507 an 40.358 &Tools.-SEP2- <Nop>
508 an 40.360 &Tools.&Make<Tab>:make :make<CR>
509 an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
510 an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
511 an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
512 an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
513 an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
514 an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
515 an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
516 an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
517 an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
519 an 40.520 &Tools.-SEP3- <Nop>
520 an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
521 \ :call <SID>XxdConv()<CR>
522 an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
523 \ :call <SID>XxdBack()<CR>
525 " Use a function to do the conversion, so that it also works with 'insertmode'
533 exe '%!"' . g:xxdprogram . '"'
535 if getline(1) =~ "^0000000:" " only if it worked
547 exe '%!"' . g:xxdprogram . '" -r'
550 doautocmd filetypedetect BufReadPost
555 if !exists("g:xxdprogram")
556 " On the PC xxd may not be in the path but in the install directory
557 if (has("win32") || has("dos32")) && !executable("xxd")
558 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
560 let g:xxdprogram = "xxd"
565 " Setup the Tools.Compiler submenu
566 let s:n = globpath(&runtimepath, "compiler/*.vim")
568 while strlen(s:n) > 0
569 let s:i = stridx(s:n, "\n")
574 let s:name = strpart(s:n, 0, s:i)
575 let s:n = strpart(s:n, s:i + 1, 19999)
577 " Ignore case for VMS and windows
578 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
579 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
582 let s:idx = s:idx + 10
587 if !exists("no_buffers_menu")
589 " Buffer list menu -- Setup functions & actions
591 " wait with building the menu until after loading 'session' files. Makes
595 if !exists("bmenu_priority")
596 let bmenu_priority = 60
601 " when adding too many buffers, redraw in short format
602 if s:bmenu_count == &menuitems && s:bmenu_short == 0
605 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
606 let s:bmenu_count = s:bmenu_count + 1
613 let name = expand("<afile>")
617 let munge = <SID>BMMunge(name, expand("<abuf>"))
619 if s:bmenu_short == 0
620 exe 'silent! aun &Buffers.' . munge
622 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
624 let s:bmenu_count = s:bmenu_count - 1
628 " Create the buffer menu (delete an existing one first).
631 let s:bmenu_short = 1
632 let s:bmenu_count = 0
634 " get new priority, if exists
636 let g:bmenu_priority = a:1
639 " remove old menu, if exists; keep one entry to avoid a torn off menu to
641 silent! unmenu &Buffers
642 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
643 silent! unmenu! &Buffers
645 " create new menu; set 'cpo' to include the <CR>
648 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
649 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
650 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
651 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
652 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
653 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
655 unmenu &Buffers.Dummy
657 " figure out how many buffers there are
659 while buf <= bufnr('$')
660 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
661 let s:bmenu_count = s:bmenu_count + 1
665 if s:bmenu_count <= &menuitems
666 let s:bmenu_short = 0
669 " iterate through buffer list, adding each buffer to the menu:
671 while buf <= bufnr('$')
672 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
673 call <SID>BMFilename(bufname(buf), buf)
680 au BufCreate,BufFilePost * call <SID>BMAdd()
681 au BufDelete,BufFilePre * call <SID>BMRemove()
686 " Make name all upper case, so that chars are between 32 and 96
687 let nm = substitute(a:name, ".*", '\U\0', "")
689 " HACK: Replace all non alphabetics with 'Z'
690 " Just to make it work for now.
691 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
692 let sp = char2nr('A') - 1
694 let sp = char2nr(' ')
696 " convert first six chars into a number for sorting:
697 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)
700 func! s:BMHash2(name)
701 let nm = substitute(a:name, ".", '\L\0', "")
702 " Not exactly right for EBCDIC...
703 if nm[0] < 'a' || nm[0] > 'z'
720 " insert a buffer name into the buffer menu:
721 func! s:BMFilename(name, num)
722 if isdirectory(a:name)
725 let munge = <SID>BMMunge(a:name, a:num)
726 let hash = <SID>BMHash(munge)
727 if s:bmenu_short == 0
728 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
730 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
732 " set 'cpo' to include the <CR>
735 exe name . ' :confirm b' . a:num . '<CR>'
739 " Truncate a long path to fit it in a menu item.
740 if !exists("g:bmenu_max_pathlen")
741 let g:bmenu_max_pathlen = 35
743 func! s:BMTruncName(fname)
745 if g:bmenu_max_pathlen < 5
748 let len = strlen(name)
749 if len > g:bmenu_max_pathlen
750 let amountl = (g:bmenu_max_pathlen / 2) - 2
751 let amountr = g:bmenu_max_pathlen - amountl - 3
752 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
753 let left = substitute(name, pattern, '\1', '')
754 let right = substitute(name, pattern, '\2', '')
755 if strlen(left) + strlen(right) < len
756 let name = left . '...' . right
763 func! s:BMMunge(fname, bnum)
766 if !exists("g:menutrans_no_file")
767 let g:menutrans_no_file = "[No file]"
769 let name = g:menutrans_no_file
771 let name = fnamemodify(name, ':p:~')
773 " detach file name and separate it out:
774 let name2 = fnamemodify(name, ':t')
776 let name2 = name2 . ' (' . a:bnum . ')'
778 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
779 let name = escape(name, "\\. \t|")
780 let name = substitute(name, "&", "&&", "g")
781 let name = substitute(name, "\n", "^@", "g")
785 " When just starting Vim, load the buffer menu later
786 if has("vim_starting")
787 augroup LoadBufferMenu
788 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
789 au VimEnter * au! LoadBufferMenu
795 endif " !exists("no_buffers_menu")
798 an 70.300 &Window.&New<Tab>^Wn <C-W>n
799 an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
800 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
801 an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
803 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
804 if !exists("*MenuExplOpen")
809 exe "20vsp " . expand("%:p:h")
814 an 70.335 &Window.-SEP1- <Nop>
815 an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
816 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
817 an 70.350 &Window.-SEP2- <Nop>
818 an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
819 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
820 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
821 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
822 an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
823 an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
824 an 70.365 &Window.-SEP3- <Nop>
825 an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
826 an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
827 an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
828 an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
829 an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
832 an 1.10 PopUp.&Undo u
833 an 1.15 PopUp.-SEP1- <Nop>
834 vnoremenu 1.20 PopUp.Cu&t "+x
835 vnoremenu 1.30 PopUp.&Copy "+y
836 cnoremenu 1.30 PopUp.&Copy <C-Y>
837 nnoremenu 1.40 PopUp.&Paste "+gP
838 cnoremenu 1.40 PopUp.&Paste <C-R>+
839 exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
840 exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
841 vnoremenu 1.50 PopUp.&Delete x
842 an 1.55 PopUp.-SEP2- <Nop>
843 vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
845 nnoremenu 1.70 PopUp.Select\ &Word vaw
846 onoremenu 1.70 PopUp.Select\ &Word aw
847 vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
848 inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
849 cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
851 nnoremenu 1.73 PopUp.Select\ &Sentence vas
852 onoremenu 1.73 PopUp.Select\ &Sentence as
853 vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
854 inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
855 cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
857 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
858 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
859 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
860 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
861 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
863 nnoremenu 1.80 PopUp.Select\ &Line V
864 onoremenu 1.80 PopUp.Select\ &Line <C-C>V
865 vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
866 inoremenu 1.80 PopUp.Select\ &Line <C-O>V
867 cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
869 nnoremenu 1.90 PopUp.Select\ &Block <C-V>
870 onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
871 vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
872 inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
873 cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
875 noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
876 inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
877 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
880 " Spell suggestions in the popup menu. Note that this will slow down the
881 " appearance of the menu!
882 func! <SID>SpellPopup()
883 if exists("s:changeitem") && s:changeitem != ''
887 " Return quickly if spell checking is not enabled.
888 if !&spell || &spelllang == ''
892 let curcol = col('.')
893 let [w, a] = spellbadword()
894 if col('.') > curcol " don't use word after the cursor
896 call cursor(0, curcol) " put the cursor back where it was
900 let s:suglist = [substitute(w, '.*', '\u&', '')]
902 let s:suglist = spellsuggest(w, 10)
904 if len(s:suglist) <= 0
905 call cursor(0, curcol) " put the cursor back where it was
907 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
911 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
912 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
916 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
917 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
919 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
920 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
922 anoremenu 1.8 PopUp.-SpellSep- :
927 func! <SID>SpellReplace(n)
929 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
930 \ . strpart(l, col('.') + len(s:fromword) - 1))
933 func! <SID>SpellDel()
934 exe "aunmenu PopUp." . s:changeitem
935 exe "aunmenu PopUp." . s:additem
936 exe "aunmenu PopUp." . s:ignoreitem
937 aunmenu PopUp.-SpellSep-
938 let s:changeitem = ''
941 augroup SpellPopupMenu
942 au! MenuPopup * call <SID>SpellPopup()
946 " The GUI toolbar (for MS-Windows and GTK)
948 an 1.10 ToolBar.Open :browse confirm e<CR>
949 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
950 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
953 an 1.40 ToolBar.Print :hardcopy<CR>
954 vunmenu ToolBar.Print
955 vnoremenu ToolBar.Print :hardcopy<CR>
957 an 1.40 ToolBar.Print :w !lpr<CR>
958 vunmenu ToolBar.Print
959 vnoremenu ToolBar.Print :w !lpr<CR>
962 an 1.45 ToolBar.-sep1- <Nop>
963 an 1.50 ToolBar.Undo u
964 an 1.60 ToolBar.Redo <C-R>
966 an 1.65 ToolBar.-sep2- <Nop>
967 vnoremenu 1.70 ToolBar.Cut "+x
968 vnoremenu 1.80 ToolBar.Copy "+y
969 cnoremenu 1.80 ToolBar.Copy <C-Y>
970 nnoremenu 1.90 ToolBar.Paste "+gP
971 cnoremenu ToolBar.Paste <C-R>+
972 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
973 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
975 if !has("gui_athena")
976 an 1.95 ToolBar.-sep3- <Nop>
977 an 1.100 ToolBar.Replace :promptrepl<CR>
978 vunmenu ToolBar.Replace
979 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
980 an 1.110 ToolBar.FindNext n
981 an 1.120 ToolBar.FindPrev N
984 an 1.215 ToolBar.-sep5- <Nop>
985 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
986 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
987 an 1.240 ToolBar.RunScript :browse so<CR>
989 an 1.245 ToolBar.-sep6- <Nop>
990 an 1.250 ToolBar.Make :make<CR>
991 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
992 an 1.280 ToolBar.TagJump g<C-]>
994 an 1.295 ToolBar.-sep7- <Nop>
995 an 1.300 ToolBar.Help :help<CR>
996 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
998 " Only set the tooltips here if not done in a language menu file
999 if exists("*Do_toolbar_tmenu")
1000 call Do_toolbar_tmenu()
1002 let did_toolbar_tmenu = 1
1003 tmenu ToolBar.Open Open file
1004 tmenu ToolBar.Save Save current file
1005 tmenu ToolBar.SaveAll Save all files
1006 tmenu ToolBar.Print Print
1007 tmenu ToolBar.Undo Undo
1008 tmenu ToolBar.Redo Redo
1009 tmenu ToolBar.Cut Cut to clipboard
1010 tmenu ToolBar.Copy Copy to clipboard
1011 tmenu ToolBar.Paste Paste from Clipboard
1012 if !has("gui_athena")
1013 tmenu ToolBar.Find Find...
1014 tmenu ToolBar.FindNext Find Next
1015 tmenu ToolBar.FindPrev Find Previous
1016 tmenu ToolBar.Replace Find / Replace...
1018 tmenu ToolBar.LoadSesn Choose a session to load
1019 tmenu ToolBar.SaveSesn Save current session
1020 tmenu ToolBar.RunScript Choose a Vim Script to run
1021 tmenu ToolBar.Make Make current project (:make)
1022 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
1023 tmenu ToolBar.TagJump Jump to tag under cursor
1024 tmenu ToolBar.Help Vim Help
1025 tmenu ToolBar.FindHelp Search Vim Help
1028 " Select a session to load; default to current session name if present
1029 fun! s:LoadVimSesn()
1030 if strlen(v:this_session) > 0
1031 let name = escape(v:this_session, ' \t#%$|<>"*?[{`')
1033 let name = "Session.vim"
1035 execute "browse so " . name
1038 " Select a session to save; default to current session name if present
1039 fun! s:SaveVimSesn()
1040 if strlen(v:this_session) == 0
1041 let v:this_session = "Session.vim"
1043 execute "browse mksession! " . escape(v:this_session, ' \t#%$|<>"*?[{`')
1048 endif " !exists("did_install_default_menus")
1050 " Define these items always, so that syntax can be switched on when it wasn't.
1051 " But skip them when the Syntax menu was disabled by the user.
1052 if !exists("did_install_syntax_menu")
1053 an 50.212 &Syntax.&Manual :syn manual<CR>
1054 an 50.214 &Syntax.A&utomatic :syn on<CR>
1055 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1056 if !exists("*s:SynOnOff")
1058 if has("syntax_items")
1061 if !exists("g:syntax_on")
1071 " Install the Syntax menu only when filetype.vim has been loaded or when
1072 " manual syntax highlighting is enabled.
1073 " Avoid installing the Syntax menu twice.
1074 if (exists("did_load_filetypes") || exists("syntax_on"))
1075 \ && !exists("did_install_syntax_menu")
1076 let did_install_syntax_menu = 1
1078 " Skip setting up the individual syntax selection menus unless
1079 " do_syntax_sel_menu is defined (it takes quite a bit of time).
1080 if exists("do_syntax_sel_menu")
1081 runtime! synmenu.vim
1083 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>
1084 an 50.195 &Syntax.-SEP1- <Nop>
1087 an 50.210 &Syntax.&Off :syn off<CR>
1088 an 50.700 &Syntax.-SEP3- <Nop>
1089 an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1090 an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1091 an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1093 endif " !exists("did_install_syntax_menu")
1095 " Restore the previous value of 'cpoptions'.
1096 let &cpo = s:cpo_save