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 " 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)
143 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
147 an 20.310 &Edit.&Undo<Tab>u u
148 an 20.320 &Edit.&Redo<Tab>^R <C-R>
149 an 20.330 &Edit.Rep&eat<Tab>\. .
151 an 20.335 &Edit.-SEP1- <Nop>
152 vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
153 vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
154 cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
155 nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
156 cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
157 exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
158 exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
159 nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
160 inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
161 nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
162 inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
163 if has("win32") || has("win16")
164 vnoremenu 20.390 &Edit.&Delete<Tab>x x
166 noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
167 inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
168 cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
170 an 20.405 &Edit.-SEP2- <Nop>
171 if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
172 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
173 vunmenu &Edit.&Find\.\.\.
174 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
175 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
176 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
177 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
179 an 20.410 &Edit.&Find<Tab>/ /
180 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
181 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
182 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
185 an 20.425 &Edit.-SEP3- <Nop>
186 an 20.430 &Edit.Settings\ &Window :options<CR>
187 an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
192 elseif has("win32") || has("dos32") || has("dos16") || has("os2")
194 let fname = $HOME . "/_vimrc"
196 let fname = $VIM . "/_vimrc"
199 let fname = "s:.vimrc"
201 let fname = $HOME . "/.vimrc"
203 let fname = s:FnameEscape(fname)
212 " Fix text in nameless register to be used with :promptfind.
213 return substitute(@", "[\r\n]", '\\n', 'g')
216 " Edit/Global Settings
217 an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
218 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
219 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
221 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
222 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
223 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
224 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
225 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
226 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
227 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
228 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
230 an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
231 an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
232 an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
233 an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
234 an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
235 an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
236 an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
237 an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
238 an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
241 an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
242 an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
243 an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
244 an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
245 an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
248 if !exists("g:menutrans_path_dialog")
249 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
251 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
253 let &path = substitute(n, ' ', '\\ ', 'g')
258 if !exists("g:menutrans_tags_dialog")
259 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
261 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
263 let &tags = substitute(n, ' ', '\\ ', 'g')
267 fun! s:ToggleGuiOption(option)
268 " If a:option is already set in guioptions, then we want to remove it
269 if match(&guioptions, "\\C" . a:option) > -1
270 exec "set go-=" . a:option
272 exec "set go+=" . a:option
279 an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<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. Don't do this for MacVim
794 " because it makes the menu flicker each time a new editor window is opened.
795 if has("vim_starting") && !has("gui_macvim")
796 augroup LoadBufferMenu
797 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
798 au VimEnter * au! LoadBufferMenu
804 endif " !exists("no_buffers_menu")
807 an 70.300 &Window.&New<Tab>^Wn <C-W>n
808 an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
809 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
810 an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
812 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
813 if !exists("*MenuExplOpen")
818 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
823 an 70.335 &Window.-SEP1- <Nop>
824 an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
825 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
826 an 70.350 &Window.-SEP2- <Nop>
827 an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
828 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
829 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
830 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
831 an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
832 an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
833 an 70.365 &Window.-SEP3- <Nop>
834 an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
835 an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
836 an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
837 an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
838 an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
841 an 1.10 PopUp.&Undo u
842 an 1.15 PopUp.-SEP1- <Nop>
843 vnoremenu 1.20 PopUp.Cu&t "+x
844 vnoremenu 1.30 PopUp.&Copy "+y
845 cnoremenu 1.30 PopUp.&Copy <C-Y>
846 nnoremenu 1.40 PopUp.&Paste "+gP
847 cnoremenu 1.40 PopUp.&Paste <C-R>+
848 exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
849 exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
850 vnoremenu 1.50 PopUp.&Delete x
851 an 1.55 PopUp.-SEP2- <Nop>
852 vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
854 nnoremenu 1.70 PopUp.Select\ &Word vaw
855 onoremenu 1.70 PopUp.Select\ &Word aw
856 vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
857 inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
858 cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
860 nnoremenu 1.73 PopUp.Select\ &Sentence vas
861 onoremenu 1.73 PopUp.Select\ &Sentence as
862 vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
863 inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
864 cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
866 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
867 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
868 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
869 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
870 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
872 nnoremenu 1.80 PopUp.Select\ &Line V
873 onoremenu 1.80 PopUp.Select\ &Line <C-C>V
874 vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
875 inoremenu 1.80 PopUp.Select\ &Line <C-O>V
876 cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
878 nnoremenu 1.90 PopUp.Select\ &Block <C-V>
879 onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
880 vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
881 inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
882 cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
884 noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
885 inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
886 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
889 " Spell suggestions in the popup menu. Note that this will slow down the
890 " appearance of the menu!
891 func! <SID>SpellPopup()
892 if exists("s:changeitem") && s:changeitem != ''
896 " Return quickly if spell checking is not enabled.
897 if !&spell || &spelllang == ''
901 let curcol = col('.')
902 let [w, a] = spellbadword()
903 if col('.') > curcol " don't use word after the cursor
905 call cursor(0, curcol) " put the cursor back where it was
909 let s:suglist = [substitute(w, '.*', '\u&', '')]
911 let s:suglist = spellsuggest(w, 10)
913 if len(s:suglist) <= 0
914 call cursor(0, curcol) " put the cursor back where it was
916 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
920 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
921 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
925 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
926 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
928 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
929 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
931 anoremenu 1.8 PopUp.-SpellSep- :
936 func! <SID>SpellReplace(n)
938 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
939 \ . strpart(l, col('.') + len(s:fromword) - 1))
942 func! <SID>SpellDel()
943 exe "aunmenu PopUp." . s:changeitem
944 exe "aunmenu PopUp." . s:additem
945 exe "aunmenu PopUp." . s:ignoreitem
946 aunmenu PopUp.-SpellSep-
947 let s:changeitem = ''
950 augroup SpellPopupMenu
951 au! MenuPopup * call <SID>SpellPopup()
955 " The GUI toolbar (for MS-Windows and GTK)
957 an 1.10 ToolBar.Open :browse confirm e<CR>
958 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
959 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
962 an 1.40 ToolBar.Print :hardcopy<CR>
963 vunmenu ToolBar.Print
964 vnoremenu ToolBar.Print :hardcopy<CR>
966 an 1.40 ToolBar.Print :w !lpr<CR>
967 vunmenu ToolBar.Print
968 vnoremenu ToolBar.Print :w !lpr<CR>
971 an 1.45 ToolBar.-sep1- <Nop>
972 an 1.50 ToolBar.Undo u
973 an 1.60 ToolBar.Redo <C-R>
975 an 1.65 ToolBar.-sep2- <Nop>
976 vnoremenu 1.70 ToolBar.Cut "+x
977 vnoremenu 1.80 ToolBar.Copy "+y
978 cnoremenu 1.80 ToolBar.Copy <C-Y>
979 nnoremenu 1.90 ToolBar.Paste "+gP
980 cnoremenu ToolBar.Paste <C-R>+
981 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
982 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
984 if !has("gui_athena")
985 an 1.95 ToolBar.-sep3- <Nop>
986 an 1.100 ToolBar.Replace :promptrepl<CR>
987 vunmenu ToolBar.Replace
988 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
989 an 1.110 ToolBar.FindNext n
990 an 1.120 ToolBar.FindPrev N
993 an 1.215 ToolBar.-sep5- <Nop>
994 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
995 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
996 an 1.240 ToolBar.RunScript :browse so<CR>
998 an 1.245 ToolBar.-sep6- <Nop>
999 an 1.250 ToolBar.Make :make<CR>
1000 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1001 an 1.280 ToolBar.TagJump g<C-]>
1003 an 1.295 ToolBar.-sep7- <Nop>
1004 an 1.300 ToolBar.Help :help<CR>
1005 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1007 " Only set the tooltips here if not done in a language menu file
1008 if exists("*Do_toolbar_tmenu")
1009 call Do_toolbar_tmenu()
1011 let did_toolbar_tmenu = 1
1012 tmenu ToolBar.Open Open file
1013 tmenu ToolBar.Save Save current file
1014 tmenu ToolBar.SaveAll Save all files
1015 tmenu ToolBar.Print Print
1016 tmenu ToolBar.Undo Undo
1017 tmenu ToolBar.Redo Redo
1018 tmenu ToolBar.Cut Cut to clipboard
1019 tmenu ToolBar.Copy Copy to clipboard
1020 tmenu ToolBar.Paste Paste from Clipboard
1021 if !has("gui_athena")
1022 tmenu ToolBar.Replace Find / Replace...
1023 tmenu ToolBar.FindNext Find Next
1024 tmenu ToolBar.FindPrev Find Previous
1026 tmenu ToolBar.LoadSesn Choose a session to load
1027 tmenu ToolBar.SaveSesn Save current session
1028 tmenu ToolBar.RunScript Choose a Vim Script to run
1029 tmenu ToolBar.Make Make current project (:make)
1030 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
1031 tmenu ToolBar.TagJump Jump to tag under cursor
1032 tmenu ToolBar.Help Vim Help
1033 tmenu ToolBar.FindHelp Search Vim Help
1036 " Select a session to load; default to current session name if present
1037 fun! s:LoadVimSesn()
1038 if strlen(v:this_session) > 0
1039 let name = s:FnameEscape(v:this_session)
1041 let name = "Session.vim"
1043 execute "browse so " . name
1046 " Select a session to save; default to current session name if present
1047 fun! s:SaveVimSesn()
1048 if strlen(v:this_session) == 0
1049 let v:this_session = "Session.vim"
1051 execute "browse mksession! " . s:FnameEscape(v:this_session)
1056 endif " !exists("did_install_default_menus")
1058 " Define these items always, so that syntax can be switched on when it wasn't.
1059 " But skip them when the Syntax menu was disabled by the user.
1060 if !exists("did_install_syntax_menu")
1061 an 50.212 &Syntax.&Manual :syn manual<CR>
1062 an 50.214 &Syntax.A&utomatic :syn on<CR>
1063 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1064 if !exists("*s:SynOnOff")
1066 if has("syntax_items")
1069 if !exists("g:syntax_on")
1079 " Install the Syntax menu only when filetype.vim has been loaded or when
1080 " manual syntax highlighting is enabled.
1081 " Avoid installing the Syntax menu twice.
1082 if (exists("did_load_filetypes") || exists("syntax_on"))
1083 \ && !exists("did_install_syntax_menu")
1084 let did_install_syntax_menu = 1
1086 " Skip setting up the individual syntax selection menus unless
1087 " do_syntax_sel_menu is defined (it takes quite a bit of time).
1088 if exists("do_syntax_sel_menu")
1089 runtime! synmenu.vim
1091 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>
1092 an 50.195 &Syntax.-SEP1- <Nop>
1095 an 50.210 &Syntax.&Off :syn off<CR>
1096 an 50.700 &Syntax.-SEP3- <Nop>
1097 an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1098 an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1099 an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1101 endif " !exists("did_install_syntax_menu")
1103 " Restore the previous value of 'cpoptions'.
1104 let &cpo = s:cpo_save