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