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")
341 " Setup the Edit.Color Scheme submenu
343 " get NL separated string with file names
344 let s:n = globpath(&runtimepath, "colors/*.vim")
346 " split at NL, Ignore case for VMS and windows, sort on name
347 let s:names = sort(map(split(s:n, "\n"), 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
349 " define all the submenu entries
351 for s:name in s:names
352 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
353 let s:idx = s:idx + 10
355 unlet s:name s:names s:n s:idx
358 " Setup the Edit.Keymap submenu
360 let s:n = globpath(&runtimepath, "keymap/*.vim")
363 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
364 while strlen(s:n) > 0
365 let s:i = stridx(s:n, "\n")
370 let s:name = strpart(s:n, 0, s:i)
371 let s:n = strpart(s:n, s:i + 1, 19999)
373 " Ignore case for VMS and windows
374 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
375 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
378 let s:idx = s:idx + 10
384 if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
385 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
389 if !exists("g:ctags_command")
391 let g:ctags_command = "mc vim:ctags *.*"
393 let g:ctags_command = "ctags -R ."
397 an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
398 vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
399 vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
400 an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
401 an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
403 if has("folding") || has("spell")
404 an 40.330 &Tools.-SEP1- <Nop>
407 " Tools.Spelling Menu
409 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
410 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
411 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
412 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
413 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
414 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
415 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
416 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
417 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
418 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
419 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
420 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
421 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
422 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
424 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
426 for cmd in s:undo_spellang
429 let s:undo_spellang = []
431 if &enc == "iso-8859-15"
438 let s = globpath(&rtp, "spell/*." . enc . ".spl")
441 for f in split(s, "\n")
442 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
443 if nm != "en" && nm !~ '/'
445 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
446 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
447 let s:undo_spellang += ['aun ' . menuname]
453 echomsg "Could not find other spell files"
455 echomsg "Found spell file " . nm
457 echomsg "Found " . found . " more spell files"
459 " Need to redo this when 'encoding' is changed.
461 au! EncodingChanged * call <SID>SpellLang()
470 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
471 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
472 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
473 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
474 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
475 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
476 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
478 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
479 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
480 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
481 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
482 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
483 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
484 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
485 " create and delete folds
486 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
487 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
488 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
489 " moving around in folds
490 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
491 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
492 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
493 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
494 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
495 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
496 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
497 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
498 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
502 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
503 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
504 vunmenu &Tools.&Diff.&Get\ Block
505 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
506 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
507 vunmenu &Tools.&Diff.&Put\ Block
508 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
511 an 40.358 &Tools.-SEP2- <Nop>
512 an 40.360 &Tools.&Make<Tab>:make :make<CR>
513 an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
514 an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
515 an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
516 an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
517 an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
518 an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
519 an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
520 an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
521 an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
523 an 40.520 &Tools.-SEP3- <Nop>
524 an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
525 \ :call <SID>XxdConv()<CR>
526 an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
527 \ :call <SID>XxdBack()<CR>
529 " Use a function to do the conversion, so that it also works with 'insertmode'
537 exe '%!"' . g:xxdprogram . '"'
539 if getline(1) =~ "^0000000:" " only if it worked
551 exe '%!"' . g:xxdprogram . '" -r'
554 doautocmd filetypedetect BufReadPost
559 if !exists("g:xxdprogram")
560 " On the PC xxd may not be in the path but in the install directory
561 if (has("win32") || has("dos32")) && !executable("xxd")
562 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
564 let g:xxdprogram = "xxd"
569 " Setup the Tools.Compiler submenu
570 let s:n = globpath(&runtimepath, "compiler/*.vim")
572 while strlen(s:n) > 0
573 let s:i = stridx(s:n, "\n")
578 let s:name = strpart(s:n, 0, s:i)
579 let s:n = strpart(s:n, s:i + 1, 19999)
581 " Ignore case for VMS and windows
582 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
583 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
586 let s:idx = s:idx + 10
591 if !exists("no_buffers_menu")
593 " Buffer list menu -- Setup functions & actions
595 " wait with building the menu until after loading 'session' files. Makes
599 if !exists("bmenu_priority")
600 let bmenu_priority = 60
605 " when adding too many buffers, redraw in short format
606 if s:bmenu_count == &menuitems && s:bmenu_short == 0
609 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
610 let s:bmenu_count = s:bmenu_count + 1
617 let name = expand("<afile>")
621 let munge = <SID>BMMunge(name, expand("<abuf>"))
623 if s:bmenu_short == 0
624 exe 'silent! aun &Buffers.' . munge
626 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
628 let s:bmenu_count = s:bmenu_count - 1
632 " Create the buffer menu (delete an existing one first).
635 let s:bmenu_short = 1
636 let s:bmenu_count = 0
638 " get new priority, if exists
640 let g:bmenu_priority = a:1
643 " remove old menu, if exists; keep one entry to avoid a torn off menu to
645 silent! unmenu &Buffers
646 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
647 silent! unmenu! &Buffers
649 " create new menu; set 'cpo' to include the <CR>
652 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
653 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
654 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
655 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
656 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
657 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
659 unmenu &Buffers.Dummy
661 " figure out how many buffers there are
663 while buf <= bufnr('$')
664 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
665 let s:bmenu_count = s:bmenu_count + 1
669 if s:bmenu_count <= &menuitems
670 let s:bmenu_short = 0
673 " iterate through buffer list, adding each buffer to the menu:
675 while buf <= bufnr('$')
676 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
677 call <SID>BMFilename(bufname(buf), buf)
684 au BufCreate,BufFilePost * call <SID>BMAdd()
685 au BufDelete,BufFilePre * call <SID>BMRemove()
690 " Make name all upper case, so that chars are between 32 and 96
691 let nm = substitute(a:name, ".*", '\U\0', "")
693 " HACK: Replace all non alphabetics with 'Z'
694 " Just to make it work for now.
695 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
696 let sp = char2nr('A') - 1
698 let sp = char2nr(' ')
700 " convert first six chars into a number for sorting:
701 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)
704 func! s:BMHash2(name)
705 let nm = substitute(a:name, ".", '\L\0', "")
706 " Not exactly right for EBCDIC...
707 if nm[0] < 'a' || nm[0] > 'z'
724 " insert a buffer name into the buffer menu:
725 func! s:BMFilename(name, num)
726 if isdirectory(a:name)
729 let munge = <SID>BMMunge(a:name, a:num)
730 let hash = <SID>BMHash(munge)
731 if s:bmenu_short == 0
732 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
734 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
736 " set 'cpo' to include the <CR>
739 exe name . ' :confirm b' . a:num . '<CR>'
743 " Truncate a long path to fit it in a menu item.
744 if !exists("g:bmenu_max_pathlen")
745 let g:bmenu_max_pathlen = 35
747 func! s:BMTruncName(fname)
749 if g:bmenu_max_pathlen < 5
752 let len = strlen(name)
753 if len > g:bmenu_max_pathlen
754 let amountl = (g:bmenu_max_pathlen / 2) - 2
755 let amountr = g:bmenu_max_pathlen - amountl - 3
756 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
757 let left = substitute(name, pattern, '\1', '')
758 let right = substitute(name, pattern, '\2', '')
759 if strlen(left) + strlen(right) < len
760 let name = left . '...' . right
767 func! s:BMMunge(fname, bnum)
770 if !exists("g:menutrans_no_file")
771 let g:menutrans_no_file = "[No file]"
773 let name = g:menutrans_no_file
775 let name = fnamemodify(name, ':p:~')
777 " detach file name and separate it out:
778 let name2 = fnamemodify(name, ':t')
780 let name2 = name2 . ' (' . a:bnum . ')'
782 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
783 let name = escape(name, "\\. \t|")
784 let name = substitute(name, "&", "&&", "g")
785 let name = substitute(name, "\n", "^@", "g")
789 " When just starting Vim, load the buffer menu later
790 if has("vim_starting")
791 augroup LoadBufferMenu
792 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
793 au VimEnter * au! LoadBufferMenu
799 endif " !exists("no_buffers_menu")
802 an 70.300 &Window.&New<Tab>^Wn <C-W>n
803 an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
804 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
805 an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
807 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
808 if !exists("*MenuExplOpen")
813 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
818 an 70.335 &Window.-SEP1- <Nop>
819 an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
820 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
821 an 70.350 &Window.-SEP2- <Nop>
822 an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
823 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
824 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
825 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
826 an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
827 an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
828 an 70.365 &Window.-SEP3- <Nop>
829 an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
830 an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
831 an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
832 an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
833 an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
836 an 1.10 PopUp.&Undo u
837 an 1.15 PopUp.-SEP1- <Nop>
838 vnoremenu 1.20 PopUp.Cu&t "+x
839 vnoremenu 1.30 PopUp.&Copy "+y
840 cnoremenu 1.30 PopUp.&Copy <C-Y>
841 nnoremenu 1.40 PopUp.&Paste "+gP
842 cnoremenu 1.40 PopUp.&Paste <C-R>+
843 exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
844 exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
845 vnoremenu 1.50 PopUp.&Delete x
846 an 1.55 PopUp.-SEP2- <Nop>
847 vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
849 nnoremenu 1.70 PopUp.Select\ &Word vaw
850 onoremenu 1.70 PopUp.Select\ &Word aw
851 vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
852 inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
853 cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
855 nnoremenu 1.73 PopUp.Select\ &Sentence vas
856 onoremenu 1.73 PopUp.Select\ &Sentence as
857 vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
858 inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
859 cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
861 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
862 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
863 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
864 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
865 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
867 nnoremenu 1.80 PopUp.Select\ &Line V
868 onoremenu 1.80 PopUp.Select\ &Line <C-C>V
869 vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
870 inoremenu 1.80 PopUp.Select\ &Line <C-O>V
871 cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
873 nnoremenu 1.90 PopUp.Select\ &Block <C-V>
874 onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
875 vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
876 inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
877 cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
879 noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
880 inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
881 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
884 " Spell suggestions in the popup menu. Note that this will slow down the
885 " appearance of the menu!
886 func! <SID>SpellPopup()
887 if exists("s:changeitem") && s:changeitem != ''
891 " Return quickly if spell checking is not enabled.
892 if !&spell || &spelllang == ''
896 let curcol = col('.')
897 let [w, a] = spellbadword()
898 if col('.') > curcol " don't use word after the cursor
903 let s:suglist = [substitute(w, '.*', '\u&', '')]
905 let s:suglist = spellsuggest(w, 10)
907 if len(s:suglist) > 0
908 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
911 " set 'cpo' to include the <CR>
915 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
916 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
920 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
921 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
923 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
924 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
926 anoremenu 1.8 PopUp.-SpellSep- :
930 call cursor(0, curcol) " put the cursor back where it was
933 func! <SID>SpellReplace(n)
935 " Move the cursor to the start of the word.
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