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: 2017 Nov 09 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 file]" 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 let s:changeitem = 'Change\ "' . escape(w, ' .'). '"\ to' 950 let s:fromword = w 951 let pri = 1 952 " set 'cpo' to include the <CR> 953 let cpo_save = &cpo 954 set cpo&vim 955 for sug in s:suglist 956 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .') 957 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>' 958 let pri += 1 959 endfor 960 961 let s:additem = 'Add\ "' . escape(w, ' .') . '"\ to\ Word\ List' 962 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>' 963 964 let s:ignoreitem = 'Ignore\ "' . escape(w, ' .') . '"' 965 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>' 966 967 anoremenu 1.8 PopUp.-SpellSep- : 968 let &cpo = cpo_save 969 endif 970 endif 971 call cursor(0, curcol) " put the cursor back where it was 972 endfunc 973 974 func! <SID>SpellReplace(n) 975 let l = getline('.') 976 " Move the cursor to the start of the word. 977 call spellbadword() 978 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1] 979 \ . strpart(l, col('.') + len(s:fromword) - 1)) 980 endfunc 981 982 func! <SID>SpellDel() 983 exe "aunmenu PopUp." . s:changeitem 984 exe "aunmenu PopUp." . s:additem 985 exe "aunmenu PopUp." . s:ignoreitem 986 aunmenu PopUp.-SpellSep- 987 let s:changeitem = '' 988 endfun 989 990 augroup SpellPopupMenu 991 au! MenuPopup * call <SID>SpellPopup() 992 augroup END 993endif 994 995" The GUI toolbar (for MS-Windows and GTK) 996if has("toolbar") 997 an 1.10 ToolBar.Open :browse confirm e<CR> 998 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR> 999 an 1.30 ToolBar.SaveAll :browse confirm wa<CR> 1000 1001 if has("printer") 1002 an 1.40 ToolBar.Print :hardcopy<CR> 1003 vunmenu ToolBar.Print 1004 vnoremenu ToolBar.Print :hardcopy<CR> 1005 elseif has("unix") 1006 an 1.40 ToolBar.Print :w !lpr<CR> 1007 vunmenu ToolBar.Print 1008 vnoremenu ToolBar.Print :w !lpr<CR> 1009 endif 1010 1011 an 1.45 ToolBar.-sep1- <Nop> 1012 an 1.50 ToolBar.Undo u 1013 an 1.60 ToolBar.Redo <C-R> 1014 1015 an 1.65 ToolBar.-sep2- <Nop> 1016 vnoremenu 1.70 ToolBar.Cut "+x 1017 vnoremenu 1.80 ToolBar.Copy "+y 1018 cnoremenu 1.80 ToolBar.Copy <C-Y> 1019 nnoremenu 1.90 ToolBar.Paste "+gP 1020 cnoremenu ToolBar.Paste <C-R>+ 1021 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v'] 1022 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i'] 1023 1024 if !has("gui_athena") 1025 an 1.95 ToolBar.-sep3- <Nop> 1026 an 1.100 ToolBar.Replace :promptrepl<CR> 1027 vunmenu ToolBar.Replace 1028 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR> 1029 an 1.110 ToolBar.FindNext n 1030 an 1.120 ToolBar.FindPrev N 1031 endif 1032 1033 an 1.215 ToolBar.-sep5- <Nop> 1034 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR> 1035 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR> 1036 an 1.240 ToolBar.RunScript :browse so<CR> 1037 1038 an 1.245 ToolBar.-sep6- <Nop> 1039 an 1.250 ToolBar.Make :make<CR> 1040 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR> 1041 an 1.280 ToolBar.TagJump g<C-]> 1042 1043 an 1.295 ToolBar.-sep7- <Nop> 1044 an 1.300 ToolBar.Help :help<CR> 1045 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR> 1046 1047" Only set the tooltips here if not done in a language menu file 1048if exists("*Do_toolbar_tmenu") 1049 call Do_toolbar_tmenu() 1050else 1051 let did_toolbar_tmenu = 1 1052 tmenu ToolBar.Open Open file 1053 tmenu ToolBar.Save Save current file 1054 tmenu ToolBar.SaveAll Save all files 1055 tmenu ToolBar.Print Print 1056 tmenu ToolBar.Undo Undo 1057 tmenu ToolBar.Redo Redo 1058 tmenu ToolBar.Cut Cut to clipboard 1059 tmenu ToolBar.Copy Copy to clipboard 1060 tmenu ToolBar.Paste Paste from Clipboard 1061 if !has("gui_athena") 1062 tmenu ToolBar.Replace Find / Replace... 1063 tmenu ToolBar.FindNext Find Next 1064 tmenu ToolBar.FindPrev Find Previous 1065 endif 1066 tmenu ToolBar.LoadSesn Choose a session to load 1067 tmenu ToolBar.SaveSesn Save current session 1068 tmenu ToolBar.RunScript Choose a Vim Script to run 1069 tmenu ToolBar.Make Make current project (:make) 1070 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .) 1071 tmenu ToolBar.TagJump Jump to tag under cursor 1072 tmenu ToolBar.Help Vim Help 1073 tmenu ToolBar.FindHelp Search Vim Help 1074endif 1075 1076" Select a session to load; default to current session name if present 1077fun! s:LoadVimSesn() 1078 if strlen(v:this_session) > 0 1079 let name = s:FnameEscape(v:this_session) 1080 else 1081 let name = "Session.vim" 1082 endif 1083 execute "browse so " . name 1084endfun 1085 1086" Select a session to save; default to current session name if present 1087fun! s:SaveVimSesn() 1088 if strlen(v:this_session) == 0 1089 let v:this_session = "Session.vim" 1090 endif 1091 execute "browse mksession! " . s:FnameEscape(v:this_session) 1092endfun 1093 1094endif 1095 1096endif " !exists("did_install_default_menus") 1097 1098" Define these items always, so that syntax can be switched on when it wasn't. 1099" But skip them when the Syntax menu was disabled by the user. 1100if !exists("did_install_syntax_menu") 1101 an 50.212 &Syntax.&Manual :syn manual<CR> 1102 an 50.214 &Syntax.A&utomatic :syn on<CR> 1103 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR> 1104 if !exists("*s:SynOnOff") 1105 fun s:SynOnOff() 1106 if has("syntax_items") 1107 syn clear 1108 else 1109 if !exists("g:syntax_on") 1110 syn manual 1111 endif 1112 set syn=ON 1113 endif 1114 endfun 1115 endif 1116endif 1117 1118 1119" Install the Syntax menu only when filetype.vim has been loaded or when 1120" manual syntax highlighting is enabled. 1121" Avoid installing the Syntax menu twice. 1122if (exists("did_load_filetypes") || exists("syntax_on")) 1123 \ && !exists("did_install_syntax_menu") 1124 let did_install_syntax_menu = 1 1125 1126" Skip setting up the individual syntax selection menus unless 1127" do_syntax_sel_menu is defined (it takes quite a bit of time). 1128if exists("do_syntax_sel_menu") 1129 runtime! synmenu.vim 1130else 1131 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> 1132 an 50.195 &Syntax.-SEP1- <Nop> 1133endif 1134 1135an 50.210 &Syntax.&Off :syn off<CR> 1136an 50.700 &Syntax.-SEP3- <Nop> 1137an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR> 1138an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR> 1139an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR> 1140 1141endif " !exists("did_install_syntax_menu") 1142 1143" Restore the previous value of 'cpoptions'. 1144let &cpo = s:cpo_save 1145unlet s:cpo_save 1146 1147" vim: set sw=2 : 1148