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