1" Vim support file to define the default menus 2" You can also use this as a start for your own set of menus. 3" 4" Maintainer: Bram Moolenaar <[email protected]> 5" Last Change: 2018 May 17 6 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. 9 10" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise 11" <CR> would not be recognized. See ":help 'cpoptions'". 12let s:cpo_save = &cpo 13set cpo&vim 14 15" Avoid installing the menus twice 16if !exists("did_install_default_menus") 17let did_install_default_menus = 1 18 19 20if exists("v:lang") || &langmenu != "" 21 " Try to find a menu translation file for the current language. 22 if &langmenu != "" 23 if &langmenu =~ "none" 24 let s:lang = "" 25 else 26 let s:lang = &langmenu 27 endif 28 else 29 let s:lang = v:lang 30 endif 31 " A language name must be at least two characters, don't accept "C" 32 if strlen(s:lang) > 1 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 36 endif 37 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", "") 50 menutrans clear 51 exe "runtime! lang/menu_" . s:lang . ".vim" 52 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" 58 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" 64 endif 65 endif 66 endif 67endif 68 69 70" Help menu 71an 9999.10 &Help.&Overview<Tab><F1> :help<CR> 72an 9999.20 &Help.&User\ Manual :help usr_toc<CR> 73an 9999.30 &Help.&How-To\ Links :help how-to<CR> 74an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR> 75an 9999.45 &Help.-sep1- <Nop> 76an 9999.50 &Help.&Credits :help credits<CR> 77an 9999.60 &Help.Co&pying :help copying<CR> 78an 9999.70 &Help.&Sponsor/Register :help sponsor<CR> 79an 9999.70 &Help.O&rphans :help kcc<CR> 80an 9999.75 &Help.-sep2- <Nop> 81an 9999.80 &Help.&Version :version<CR> 82an 9999.90 &Help.&About :intro<CR> 83 84fun! s:Helpfind() 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')" 87 endif 88 let h = inputdialog(g:menutrans_help_dialog) 89 if h != "" 90 let v:errmsg = "" 91 silent! exe "help " . h 92 if v:errmsg != "" 93 echo v:errmsg 94 endif 95 endif 96endfun 97 98" File menu 99an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR> 100an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR> 101an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew :browse tabnew<CR> 102an 10.325 &File.&New<Tab>:enew :confirm enew<CR> 103an <silent> 10.330 &File.&Close<Tab>:close 104 \ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar> 105 \ confirm enew <Bar> 106 \ else <Bar> 107 \ confirm close <Bar> 108 \ endif<CR> 109an 10.335 &File.-SEP1- <Nop> 110an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR> 111an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR> 112 113if has("diff") 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> 117endif 118 119if has("printer") 120 an 10.500 &File.-SEP3- <Nop> 121 an 10.510 &File.&Print :hardcopy<CR> 122 vunmenu &File.&Print 123 vnoremenu &File.&Print :hardcopy<CR> 124elseif has("unix") 125 an 10.500 &File.-SEP3- <Nop> 126 an 10.510 &File.&Print :w !lpr<CR> 127 vunmenu &File.&Print 128 vnoremenu &File.&Print :w !lpr<CR> 129endif 130an 10.600 &File.-SEP4- <Nop> 131an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR> 132an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR> 133 134func! <SID>SelectAll() 135 exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G") 136endfunc 137 138func! s:FnameEscape(fname) 139 if exists('*fnameescape') 140 return fnameescape(a:fname) 141 endif 142 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<") 143endfunc 144 145" Edit menu 146an 20.310 &Edit.&Undo<Tab>u u 147an 20.320 &Edit.&Redo<Tab>^R <C-R> 148an 20.330 &Edit.Rep&eat<Tab>\. . 149 150an 20.335 &Edit.-SEP1- <Nop> 151vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x 152vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y 153cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y> 154nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP 155cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+ 156exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v'] 157exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i'] 158nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p 159inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p 160nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p 161inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p 162if has("win32") 163 vnoremenu 20.390 &Edit.&Delete<Tab>x x 164endif 165noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR> 166inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR> 167cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR> 168 169an 20.405 &Edit.-SEP2- <Nop> 170if has("win32") || 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> 177else 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/ 182endif 183 184an 20.425 &Edit.-SEP3- <Nop> 185an 20.430 &Edit.Settings\ &Window :options<CR> 186an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR> 187 188fun! s:EditVimrc() 189 if $MYVIMRC != '' 190 let fname = $MYVIMRC 191 elseif has("win32") 192 if $HOME != '' 193 let fname = $HOME . "/_vimrc" 194 else 195 let fname = $VIM . "/_vimrc" 196 endif 197 elseif has("amiga") 198 let fname = "s:.vimrc" 199 else 200 let fname = $HOME . "/.vimrc" 201 endif 202 let fname = s:FnameEscape(fname) 203 if &mod 204 exe "split " . fname 205 else 206 exe "edit " . fname 207 endif 208endfun 209 210fun! s:FixFText() 211 " Fix text in nameless register to be used with :promptfind. 212 return substitute(@", "[\r\n]", '\\n', 'g') 213endfun 214 215" Edit/Global Settings 216an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR> 217an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignoring\ Case<Tab>:set\ ic! :set ic! ic?<CR> 218an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! :set sm! sm?<CR> 219 220an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 1\ :set so=1<CR> 221an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 2\ :set so=2<CR> 222an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 3\ :set so=3<CR> 223an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 4\ :set so=4<CR> 224an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 5\ :set so=5<CR> 225an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 7\ :set so=7<CR> 226an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 10\ :set so=10<CR> 227an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 100\ :set so=100<CR> 228 229an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR> 230an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR> 231an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ Mode :set ve=insert<CR> 232an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR> 233an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR> 234an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR> 235an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! :set cp!<CR> 236an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR> 237an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR> 238" 239" GUI options 240an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop> 241an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR> 242an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR> 243an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR> 244an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR> 245 246fun! s:SearchP() 247 if !exists("g:menutrans_path_dialog") 248 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma." 249 endif 250 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g')) 251 if n != "" 252 let &path = substitute(n, ' ', '\\ ', 'g') 253 endif 254endfun 255 256fun! s:TagFiles() 257 if !exists("g:menutrans_tags_dialog") 258 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma." 259 endif 260 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g')) 261 if n != "" 262 let &tags = substitute(n, ' ', '\\ ', 'g') 263 endif 264endfun 265 266fun! 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 270 else 271 exec "set go+=" . a:option 272 endif 273endfun 274 275" Edit/File Settings 276 277" Boolean options 278an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR> 279an 20.440.105 &Edit.F&ile\ Settings.Toggle\ Relati&ve\ Line\ Numbering<Tab>:set\ rnu! :set rnu! rnu?<CR> 280an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR> 281an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrapping<Tab>:set\ wrap! :set wrap! wrap?<CR> 282an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! :set lbr! lbr?<CR> 283an 20.440.160 &Edit.F&ile\ Settings.Toggle\ Tab\ &Expanding<Tab>:set\ et! :set et! et?<CR> 284an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &Auto\ Indenting<Tab>:set\ ai! :set ai! ai?<CR> 285an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-Style\ Indenting<Tab>:set\ cin! :set cin! cin?<CR> 286 287" other options 288an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop> 289an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR> 290an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR> 291an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR> 292an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR> 293an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR> 294an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR> 295 296an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR> 297an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR> 298an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR> 299an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR> 300an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR> 301an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR> 302 303an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR> 304an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR> 305fun! s:TextWidth() 306 if !exists("g:menutrans_textwidth_dialog") 307 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): " 308 endif 309 let n = inputdialog(g:menutrans_textwidth_dialog, &tw) 310 if n != "" 311 " Remove leading zeros to avoid it being used as an octal number. 312 " But keep a zero by itself. 313 let tw = substitute(n, "^0*", "", "") 314 let &tw = tw == '' ? 0 : tw 315 endif 316endfun 317 318fun! s:FileFormat() 319 if !exists("g:menutrans_fileformat_dialog") 320 let g:menutrans_fileformat_dialog = "Select format for writing the file" 321 endif 322 if !exists("g:menutrans_fileformat_choices") 323 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel" 324 endif 325 if &ff == "dos" 326 let def = 2 327 elseif &ff == "mac" 328 let def = 3 329 else 330 let def = 1 331 endif 332 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question") 333 if n == 1 334 set ff=unix 335 elseif n == 2 336 set ff=dos 337 elseif n == 3 338 set ff=mac 339 endif 340endfun 341 342let s:did_setup_color_schemes = 0 343 344" Setup the Edit.Color Scheme submenu 345func! s:SetupColorSchemes() abort 346 if s:did_setup_color_schemes 347 return 348 endif 349 let s:did_setup_color_schemes = 1 350 351 let n = globpath(&runtimepath, "colors/*.vim", 1, 1) 352 353 " Ignore case for VMS and windows, sort on name 354 let names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1) 355 356 " define all the submenu entries 357 let idx = 100 358 for name in names 359 exe "an 20.450." . idx . ' &Edit.C&olor\ Scheme.' . name . " :colors " . name . "<CR>" 360 let idx = idx + 10 361 endfor 362 silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu 363endfun 364if exists("do_no_lazyload_menus") 365 call s:SetupColorSchemes() 366else 367 an <silent> 20.450 &Edit.Show\ C&olor\ Schemes\ in\ Menu :call <SID>SetupColorSchemes()<CR> 368endif 369 370 371" Setup the Edit.Keymap submenu 372if has("keymap") 373 let s:did_setup_keymaps = 0 374 375 func! s:SetupKeymaps() abort 376 if s:did_setup_keymaps 377 return 378 endif 379 let s:did_setup_keymaps = 1 380 381 let n = globpath(&runtimepath, "keymap/*.vim", 1, 1) 382 if !empty(n) 383 let idx = 100 384 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR> 385 for name in n 386 " Ignore case for VMS and windows 387 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '') 388 exe "an 20.460." . idx . ' &Edit.&Keymap.' . name . " :set keymap=" . name . "<CR>" 389 let idx = idx + 10 390 endfor 391 endif 392 silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu 393 endfun 394 if exists("do_no_lazyload_menus") 395 call s:SetupKeymaps() 396 else 397 an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR> 398 endif 399endif 400if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac") 401 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR> 402endif 403 404" Programming menu 405if !exists("g:ctags_command") 406 if has("vms") 407 let g:ctags_command = "mc vim:ctags *.*" 408 else 409 let g:ctags_command = "ctags -R ." 410 endif 411endif 412 413an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]> 414vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] 415vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]> 416an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T> 417an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR> 418 419if has("folding") || has("spell") 420 an 40.330 &Tools.-SEP1- <Nop> 421endif 422 423" Tools.Spelling Menu 424if has("spell") 425 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR> 426 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR> 427 an 40.335.130 &Tools.&Spelling.To\ &Next\ Error<Tab>]s ]s 428 an 40.335.130 &Tools.&Spelling.To\ &Previous\ Error<Tab>[s [s 429 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z= 430 an 40.335.150 &Tools.&Spelling.&Repeat\ Correction<Tab>:spellrepall :spellrepall<CR> 431 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop> 432 an 40.335.210 &Tools.&Spelling.Set\ Language\ to\ "en" :set spl=en spell<CR> 433 an 40.335.220 &Tools.&Spelling.Set\ Language\ to\ "en_au" :set spl=en_au spell<CR> 434 an 40.335.230 &Tools.&Spelling.Set\ Language\ to\ "en_ca" :set spl=en_ca spell<CR> 435 an 40.335.240 &Tools.&Spelling.Set\ Language\ to\ "en_gb" :set spl=en_gb spell<CR> 436 an 40.335.250 &Tools.&Spelling.Set\ Language\ to\ "en_nz" :set spl=en_nz spell<CR> 437 an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR> 438 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR> 439 440 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages'] 441 func! s:SpellLang() 442 for cmd in s:undo_spellang 443 exe "silent! " . cmd 444 endfor 445 let s:undo_spellang = [] 446 447 if &enc == "iso-8859-15" 448 let enc = "latin1" 449 else 450 let enc = &enc 451 endif 452 453 if !exists("g:menutrans_set_lang_to") 454 let g:menutrans_set_lang_to = 'Set Language to' 455 endif 456 457 let found = 0 458 let s = globpath(&runtimepath, "spell/*." . enc . ".spl", 1, 1) 459 if !empty(s) 460 let n = 300 461 for f in s 462 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "") 463 if nm != "en" && nm !~ '/' 464 let _nm = nm 465 let found += 1 466 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"' 467 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>' 468 let s:undo_spellang += ['aun ' . menuname] 469 endif 470 let n += 10 471 endfor 472 endif 473 if found == 0 474 echomsg "Could not find other spell files" 475 elseif found == 1 476 echomsg "Found spell file " . _nm 477 else 478 echomsg "Found " . found . " more spell files" 479 endif 480 " Need to redo this when 'encoding' is changed. 481 augroup spellmenu 482 au! EncodingChanged * call <SID>SpellLang() 483 augroup END 484 endfun 485 486endif 487 488" Tools.Fold Menu 489if has("folding") 490 " open close folds 491 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi 492 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv 493 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx 494 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx 495 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm 496 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM 497 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr 498 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR 499 " fold method 500 an 40.340.200 &Tools.&Folding.-SEP1- <Nop> 501 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR> 502 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR> 503 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR> 504 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR> 505 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR> 506 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR> 507 " create and delete folds 508 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf 509 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd 510 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD 511 " moving around in folds 512 an 40.340.300 &Tools.&Folding.-SEP2- <Nop> 513 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR> 514 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR> 515 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR> 516 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR> 517 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR> 518 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR> 519 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR> 520 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR> 521endif " has folding 522 523if has("diff") 524 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR> 525 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR> 526 vunmenu &Tools.&Diff.&Get\ Block 527 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR> 528 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR> 529 vunmenu &Tools.&Diff.&Put\ Block 530 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR> 531endif 532 533an 40.358 &Tools.-SEP2- <Nop> 534an 40.360 &Tools.&Make<Tab>:make :make<CR> 535an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR> 536an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR> 537an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR> 538an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR> 539an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR> 540an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR> 541an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR> 542an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR> 543an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR> 544 545an 40.520 &Tools.-SEP3- <Nop> 546an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd 547 \ :call <SID>XxdConv()<CR> 548an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r 549 \ :call <SID>XxdBack()<CR> 550 551" Use a function to do the conversion, so that it also works with 'insertmode' 552" set. 553func! s:XxdConv() 554 let mod = &mod 555 if has("vms") 556 %!mc vim:xxd 557 else 558 call s:XxdFind() 559 exe '%!"' . g:xxdprogram . '"' 560 endif 561 if getline(1) =~ "^0000000:" " only if it worked 562 set ft=xxd 563 endif 564 let &mod = mod 565endfun 566 567func! s:XxdBack() 568 let mod = &mod 569 if has("vms") 570 %!mc vim:xxd -r 571 else 572 call s:XxdFind() 573 exe '%!"' . g:xxdprogram . '" -r' 574 endif 575 set ft= 576 doautocmd filetypedetect BufReadPost 577 let &mod = mod 578endfun 579 580func! s:XxdFind() 581 if !exists("g:xxdprogram") 582 " On the PC xxd may not be in the path but in the install directory 583 if has("win32") && !executable("xxd") 584 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe" 585 else 586 let g:xxdprogram = "xxd" 587 endif 588 endif 589endfun 590 591let s:did_setup_compilers = 0 592 593" Setup the Tools.Compiler submenu 594func! s:SetupCompilers() abort 595 if s:did_setup_compilers 596 return 597 endif 598 let s:did_setup_compilers = 1 599 600 let n = globpath(&runtimepath, "compiler/*.vim", 1, 1) 601 let idx = 100 602 for name in n 603 " Ignore case for VMS and windows 604 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '') 605 exe "an 30.440." . idx . ' &Tools.Se&t\ Compiler.' . name . " :compiler " . name . "<CR>" 606 let idx = idx + 10 607 endfor 608 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu 609endfun 610if exists("do_no_lazyload_menus") 611 call s:SetupCompilers() 612else 613 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR> 614endif 615 616" Load ColorScheme, Compiler Setting and Keymap menus when idle. 617if !exists("do_no_lazyload_menus") 618 func! s:SetupLazyloadMenus() 619 call s:SetupColorSchemes() 620 call s:SetupCompilers() 621 if has("keymap") 622 call s:SetupKeymaps() 623 endif 624 endfunc 625 augroup SetupLazyloadMenus 626 au! 627 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus 628 augroup END 629endif 630 631 632if !exists("no_buffers_menu") 633 634" Buffer list menu -- Setup functions & actions 635 636" wait with building the menu until after loading 'session' files. Makes 637" startup faster. 638let s:bmenu_wait = 1 639 640if !exists("bmenu_priority") 641 let bmenu_priority = 60 642endif 643 644func! s:BMAdd() 645 if s:bmenu_wait == 0 646 " when adding too many buffers, redraw in short format 647 if s:bmenu_count == &menuitems && s:bmenu_short == 0 648 call s:BMShow() 649 else 650 call <SID>BMFilename(expand("<afile>"), expand("<abuf>")) 651 let s:bmenu_count = s:bmenu_count + 1 652 endif 653 endif 654endfunc 655 656func! s:BMRemove() 657 if s:bmenu_wait == 0 658 let name = expand("<afile>") 659 if isdirectory(name) 660 return 661 endif 662 let munge = <SID>BMMunge(name, expand("<abuf>")) 663 664 if s:bmenu_short == 0 665 exe 'silent! aun &Buffers.' . munge 666 else 667 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge 668 endif 669 let s:bmenu_count = s:bmenu_count - 1 670 endif 671endfunc 672 673" Create the buffer menu (delete an existing one first). 674func! s:BMShow(...) 675 let s:bmenu_wait = 1 676 let s:bmenu_short = 1 677 let s:bmenu_count = 0 678 " 679 " get new priority, if exists 680 if a:0 == 1 681 let g:bmenu_priority = a:1 682 endif 683 684 " remove old menu, if exists; keep one entry to avoid a torn off menu to 685 " disappear. 686 silent! unmenu &Buffers 687 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l" 688 silent! unmenu! &Buffers 689 690 " create new menu; set 'cpo' to include the <CR> 691 let cpo_save = &cpo 692 set cpo&vim 693 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>" 694 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>" 695 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>" 696 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>" 697 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>" 698 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :" 699 let &cpo = cpo_save 700 unmenu &Buffers.Dummy 701 702 " figure out how many buffers there are 703 let buf = 1 704 while buf <= bufnr('$') 705 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf) 706 let s:bmenu_count = s:bmenu_count + 1 707 endif 708 let buf = buf + 1 709 endwhile 710 if s:bmenu_count <= &menuitems 711 let s:bmenu_short = 0 712 endif 713 714 " iterate through buffer list, adding each buffer to the menu: 715 let buf = 1 716 while buf <= bufnr('$') 717 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf) 718 call <SID>BMFilename(bufname(buf), buf) 719 endif 720 let buf = buf + 1 721 endwhile 722 let s:bmenu_wait = 0 723 aug buffer_list 724 au! 725 au BufCreate,BufFilePost * call <SID>BMAdd() 726 au BufDelete,BufFilePre * call <SID>BMRemove() 727 aug END 728endfunc 729 730func! s:BMHash(name) 731 " Make name all upper case, so that chars are between 32 and 96 732 let nm = substitute(a:name, ".*", '\U\0', "") 733 if has("ebcdic") 734 " HACK: Replace all non alphabetics with 'Z' 735 " Just to make it work for now. 736 let nm = substitute(nm, "[^A-Z]", 'Z', "g") 737 let sp = char2nr('A') - 1 738 else 739 let sp = char2nr(' ') 740 endif 741 " convert first six chars into a number for sorting: 742 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) 743endfunc 744 745func! s:BMHash2(name) 746 let nm = substitute(a:name, ".", '\L\0', "") 747 " Not exactly right for EBCDIC... 748 if nm[0] < 'a' || nm[0] > 'z' 749 return '&others.' 750 elseif nm[0] <= 'd' 751 return '&abcd.' 752 elseif nm[0] <= 'h' 753 return '&efgh.' 754 elseif nm[0] <= 'l' 755 return '&ijkl.' 756 elseif nm[0] <= 'p' 757 return '&mnop.' 758 elseif nm[0] <= 't' 759 return '&qrst.' 760 else 761 return '&u-z.' 762 endif 763endfunc 764 765" insert a buffer name into the buffer menu: 766func! s:BMFilename(name, num) 767 if isdirectory(a:name) 768 return 769 endif 770 let munge = <SID>BMMunge(a:name, a:num) 771 let hash = <SID>BMHash(munge) 772 if s:bmenu_short == 0 773 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge 774 else 775 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge 776 endif 777 " set 'cpo' to include the <CR> 778 let cpo_save = &cpo 779 set cpo&vim 780 exe name . ' :confirm b' . a:num . '<CR>' 781 let &cpo = cpo_save 782endfunc 783 784" Truncate a long path to fit it in a menu item. 785if !exists("g:bmenu_max_pathlen") 786 let g:bmenu_max_pathlen = 35 787endif 788func! s:BMTruncName(fname) 789 let name = a:fname 790 if g:bmenu_max_pathlen < 5 791 let name = "" 792 else 793 let len = strlen(name) 794 if len > g:bmenu_max_pathlen 795 let amountl = (g:bmenu_max_pathlen / 2) - 2 796 let amountr = g:bmenu_max_pathlen - amountl - 3 797 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$' 798 let left = substitute(name, pattern, '\1', '') 799 let right = substitute(name, pattern, '\2', '') 800 if strlen(left) + strlen(right) < len 801 let name = left . '...' . right 802 endif 803 endif 804 endif 805 return name 806endfunc 807 808func! s:BMMunge(fname, bnum) 809 let name = a:fname 810 if name == '' 811 if !exists("g:menutrans_no_file") 812 let g:menutrans_no_file = "[No Name]" 813 endif 814 let name = g:menutrans_no_file 815 else 816 let name = fnamemodify(name, ':p:~') 817 endif 818 " detach file name and separate it out: 819 let name2 = fnamemodify(name, ':t') 820 if a:bnum >= 0 821 let name2 = name2 . ' (' . a:bnum . ')' 822 endif 823 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h')) 824 let name = escape(name, "\\. \t|") 825 let name = substitute(name, "&", "&&", "g") 826 let name = substitute(name, "\n", "^@", "g") 827 return name 828endfunc 829 830" When just starting Vim, load the buffer menu later 831if has("vim_starting") 832 augroup LoadBufferMenu 833 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif 834 au VimEnter * au! LoadBufferMenu 835 augroup END 836else 837 call <SID>BMShow() 838endif 839 840endif " !exists("no_buffers_menu") 841 842" Window menu 843an 70.300 &Window.&New<Tab>^Wn <C-W>n 844an 70.310 &Window.S&plit<Tab>^Ws <C-W>s 845an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^> 846an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v 847if has("vertsplit") 848 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR> 849 if !exists("*MenuExplOpen") 850 fun MenuExplOpen() 851 if @% == "" 852 20vsp . 853 else 854 exe "20vsp " . s:FnameEscape(expand("%:p:h")) 855 endif 856 endfun 857 endif 858endif 859an 70.335 &Window.-SEP1- <Nop> 860an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR> 861an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR> 862an 70.350 &Window.-SEP2- <Nop> 863an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K 864an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J 865an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H 866an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L 867an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R 868an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r 869an 70.365 &Window.-SEP3- <Nop> 870an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>= 871an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_ 872an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_ 873an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\| 874an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\| 875 876" The popup menu 877an 1.10 PopUp.&Undo u 878an 1.15 PopUp.-SEP1- <Nop> 879vnoremenu 1.20 PopUp.Cu&t "+x 880vnoremenu 1.30 PopUp.&Copy "+y 881cnoremenu 1.30 PopUp.&Copy <C-Y> 882nnoremenu 1.40 PopUp.&Paste "+gP 883cnoremenu 1.40 PopUp.&Paste <C-R>+ 884exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v'] 885exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i'] 886vnoremenu 1.50 PopUp.&Delete x 887an 1.55 PopUp.-SEP2- <Nop> 888vnoremenu 1.60 PopUp.Select\ Blockwise <C-V> 889 890nnoremenu 1.70 PopUp.Select\ &Word vaw 891onoremenu 1.70 PopUp.Select\ &Word aw 892vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw 893inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw 894cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw 895 896nnoremenu 1.73 PopUp.Select\ &Sentence vas 897onoremenu 1.73 PopUp.Select\ &Sentence as 898vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas 899inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas 900cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas 901 902nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap 903onoremenu 1.77 PopUp.Select\ Pa&ragraph ap 904vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap 905inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap 906cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap 907 908nnoremenu 1.80 PopUp.Select\ &Line V 909onoremenu 1.80 PopUp.Select\ &Line <C-C>V 910vnoremenu 1.80 PopUp.Select\ &Line <C-C>V 911inoremenu 1.80 PopUp.Select\ &Line <C-O>V 912cnoremenu 1.80 PopUp.Select\ &Line <C-C>V 913 914nnoremenu 1.90 PopUp.Select\ &Block <C-V> 915onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V> 916vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V> 917inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V> 918cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V> 919 920noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR> 921inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR> 922cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR> 923 924if has("spell") 925 " Spell suggestions in the popup menu. Note that this will slow down the 926 " appearance of the menu! 927 func! <SID>SpellPopup() 928 if exists("s:changeitem") && s:changeitem != '' 929 call <SID>SpellDel() 930 endif 931 932 " Return quickly if spell checking is not enabled. 933 if !&spell || &spelllang == '' 934 return 935 endif 936 937 let curcol = col('.') 938 let [w, a] = spellbadword() 939 if col('.') > curcol " don't use word after the cursor 940 let w = '' 941 endif 942 if w != '' 943 if a == 'caps' 944 let s:suglist = [substitute(w, '.*', '\u&', '')] 945 else 946 let s:suglist = spellsuggest(w, 10) 947 endif 948 if len(s:suglist) > 0 949 if !exists("g:menutrans_spell_change_ARG_to") 950 let g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to' 951 endif 952 let s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .')) 953 let s:fromword = w 954 let pri = 1 955 " set 'cpo' to include the <CR> 956 let cpo_save = &cpo 957 set cpo&vim 958 for sug in s:suglist 959 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .') 960 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>' 961 let pri += 1 962 endfor 963 964 if !exists("g:menutrans_spell_add_ARG_to_word_list") 965 let g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List' 966 endif 967 let s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .')) 968 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>' 969 970 if !exists("g:menutrans_spell_ignore_ARG") 971 let g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"' 972 endif 973 let s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .')) 974 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>' 975 976 anoremenu 1.8 PopUp.-SpellSep- : 977 let &cpo = cpo_save 978 endif 979 endif 980 call cursor(0, curcol) " put the cursor back where it was 981 endfunc 982 983 func! <SID>SpellReplace(n) 984 let l = getline('.') 985 " Move the cursor to the start of the word. 986 call spellbadword() 987 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1] 988 \ . strpart(l, col('.') + len(s:fromword) - 1)) 989 endfunc 990 991 func! <SID>SpellDel() 992 exe "aunmenu PopUp." . s:changeitem 993 exe "aunmenu PopUp." . s:additem 994 exe "aunmenu PopUp." . s:ignoreitem 995 aunmenu PopUp.-SpellSep- 996 let s:changeitem = '' 997 endfun 998 999 augroup SpellPopupMenu 1000 au! MenuPopup * call <SID>SpellPopup() 1001 augroup END 1002endif 1003 1004" The GUI toolbar (for MS-Windows and GTK) 1005if has("toolbar") 1006 an 1.10 ToolBar.Open :browse confirm e<CR> 1007 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR> 1008 an 1.30 ToolBar.SaveAll :browse confirm wa<CR> 1009 1010 if has("printer") 1011 an 1.40 ToolBar.Print :hardcopy<CR> 1012 vunmenu ToolBar.Print 1013 vnoremenu ToolBar.Print :hardcopy<CR> 1014 elseif has("unix") 1015 an 1.40 ToolBar.Print :w !lpr<CR> 1016 vunmenu ToolBar.Print 1017 vnoremenu ToolBar.Print :w !lpr<CR> 1018 endif 1019 1020 an 1.45 ToolBar.-sep1- <Nop> 1021 an 1.50 ToolBar.Undo u 1022 an 1.60 ToolBar.Redo <C-R> 1023 1024 an 1.65 ToolBar.-sep2- <Nop> 1025 vnoremenu 1.70 ToolBar.Cut "+x 1026 vnoremenu 1.80 ToolBar.Copy "+y 1027 cnoremenu 1.80 ToolBar.Copy <C-Y> 1028 nnoremenu 1.90 ToolBar.Paste "+gP 1029 cnoremenu ToolBar.Paste <C-R>+ 1030 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v'] 1031 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i'] 1032 1033 if !has("gui_athena") 1034 an 1.95 ToolBar.-sep3- <Nop> 1035 an 1.100 ToolBar.Replace :promptrepl<CR> 1036 vunmenu ToolBar.Replace 1037 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR> 1038 an 1.110 ToolBar.FindNext n 1039 an 1.120 ToolBar.FindPrev N 1040 endif 1041 1042 an 1.215 ToolBar.-sep5- <Nop> 1043 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR> 1044 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR> 1045 an 1.240 ToolBar.RunScript :browse so<CR> 1046 1047 an 1.245 ToolBar.-sep6- <Nop> 1048 an 1.250 ToolBar.Make :make<CR> 1049 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR> 1050 an 1.280 ToolBar.TagJump g<C-]> 1051 1052 an 1.295 ToolBar.-sep7- <Nop> 1053 an 1.300 ToolBar.Help :help<CR> 1054 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR> 1055 1056" Only set the tooltips here if not done in a language menu file 1057if exists("*Do_toolbar_tmenu") 1058 call Do_toolbar_tmenu() 1059else 1060 let did_toolbar_tmenu = 1 1061 tmenu ToolBar.Open Open file 1062 tmenu ToolBar.Save Save current file 1063 tmenu ToolBar.SaveAll Save all files 1064 tmenu ToolBar.Print Print 1065 tmenu ToolBar.Undo Undo 1066 tmenu ToolBar.Redo Redo 1067 tmenu ToolBar.Cut Cut to clipboard 1068 tmenu ToolBar.Copy Copy to clipboard 1069 tmenu ToolBar.Paste Paste from Clipboard 1070 if !has("gui_athena") 1071 tmenu ToolBar.Replace Find / Replace... 1072 tmenu ToolBar.FindNext Find Next 1073 tmenu ToolBar.FindPrev Find Previous 1074 endif 1075 tmenu ToolBar.LoadSesn Choose a session to load 1076 tmenu ToolBar.SaveSesn Save current session 1077 tmenu ToolBar.RunScript Choose a Vim Script to run 1078 tmenu ToolBar.Make Make current project (:make) 1079 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .) 1080 tmenu ToolBar.TagJump Jump to tag under cursor 1081 tmenu ToolBar.Help Vim Help 1082 tmenu ToolBar.FindHelp Search Vim Help 1083endif 1084 1085" Select a session to load; default to current session name if present 1086fun! s:LoadVimSesn() 1087 if strlen(v:this_session) > 0 1088 let name = s:FnameEscape(v:this_session) 1089 else 1090 let name = "Session.vim" 1091 endif 1092 execute "browse so " . name 1093endfun 1094 1095" Select a session to save; default to current session name if present 1096fun! s:SaveVimSesn() 1097 if strlen(v:this_session) == 0 1098 let v:this_session = "Session.vim" 1099 endif 1100 execute "browse mksession! " . s:FnameEscape(v:this_session) 1101endfun 1102 1103endif 1104 1105endif " !exists("did_install_default_menus") 1106 1107" Define these items always, so that syntax can be switched on when it wasn't. 1108" But skip them when the Syntax menu was disabled by the user. 1109if !exists("did_install_syntax_menu") 1110 an 50.212 &Syntax.&Manual :syn manual<CR> 1111 an 50.214 &Syntax.A&utomatic :syn on<CR> 1112 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR> 1113 if !exists("*s:SynOnOff") 1114 fun s:SynOnOff() 1115 if has("syntax_items") 1116 syn clear 1117 else 1118 if !exists("g:syntax_on") 1119 syn manual 1120 endif 1121 set syn=ON 1122 endif 1123 endfun 1124 endif 1125endif 1126 1127 1128" Install the Syntax menu only when filetype.vim has been loaded or when 1129" manual syntax highlighting is enabled. 1130" Avoid installing the Syntax menu twice. 1131if (exists("did_load_filetypes") || exists("syntax_on")) 1132 \ && !exists("did_install_syntax_menu") 1133 let did_install_syntax_menu = 1 1134 1135" Skip setting up the individual syntax selection menus unless 1136" do_syntax_sel_menu is defined (it takes quite a bit of time). 1137if exists("do_syntax_sel_menu") 1138 runtime! synmenu.vim 1139else 1140 an <silent> 50.10 &Syntax.&Show\ File\ Types\ in\ Menu :let do_syntax_sel_menu = 1<Bar>runtime! synmenu.vim<Bar>aunmenu &Syntax.&Show\ File\ Types\ in\ Menu<CR> 1141 an 50.195 &Syntax.-SEP1- <Nop> 1142endif 1143 1144an 50.210 &Syntax.&Off :syn off<CR> 1145an 50.700 &Syntax.-SEP3- <Nop> 1146an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR> 1147an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR> 1148an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR> 1149 1150endif " !exists("did_install_syntax_menu") 1151 1152" Restore the previous value of 'cpoptions'. 1153let &cpo = s:cpo_save 1154unlet s:cpo_save 1155 1156" vim: set sw=2 : 1157