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: 2004 May 26 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 . "*.vim" 58 59 if !exists("did_menu_trans") && strlen($LANG) > 1 60 " On windows locale names are complicated, try using $LANG, it might 61 " have been set by set_init_1(). 62 exe "runtime! lang/menu_" . tolower($LANG) . "*.vim" 63 endif 64 endif 65 endif 66endif 67 68 69" Help menu 70an 9999.10 &Help.&Overview<Tab><F1> :help<CR> 71an 9999.20 &Help.&User\ Manual :help usr_toc<CR> 72an 9999.30 &Help.&How-to\ links :help how-to<CR> 73an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR> 74an 9999.45 &Help.-sep1- <Nop> 75an 9999.50 &Help.&Credits :help credits<CR> 76an 9999.60 &Help.Co&pying :help copying<CR> 77an 9999.70 &Help.&Sponsor/Register :help sponsor<CR> 78an 9999.70 &Help.O&rphans :help kcc<CR> 79an 9999.75 &Help.-sep2- <Nop> 80an 9999.80 &Help.&Version :version<CR> 81an 9999.90 &Help.&About :intro<CR> 82 83fun! s:Helpfind() 84 if !exists("g:menutrans_help_dialog") 85 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')" 86 endif 87 let h = inputdialog(g:menutrans_help_dialog) 88 if h != "" 89 let v:errmsg = "" 90 silent! exe "help " . h 91 if v:errmsg != "" 92 echo v:errmsg 93 endif 94 endif 95endfun 96 97" File menu 98an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR> 99an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR> 100an 10.325 &File.&New<Tab>:enew :confirm enew<CR> 101an <silent> 10.330 &File.&Close<Tab>:close 102 \ :if winheight(2) < 0 <Bar> 103 \ confirm enew <Bar> 104 \ else <Bar> 105 \ confirm close <Bar> 106 \ endif<CR> 107an 10.335 &File.-SEP1- <Nop> 108an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR> 109an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR> 110 111if has("diff") 112 an 10.400 &File.-SEP2- <Nop> 113 an 10.410 &File.Split\ &Diff\ with\.\.\. :browse vert diffsplit<CR> 114 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR> 115endif 116 117if has("printer") 118 an 10.500 &File.-SEP3- <Nop> 119 an 10.510 &File.&Print :hardcopy<CR> 120 vunmenu &File.&Print 121 vnoremenu &File.&Print :hardcopy<CR> 122elseif has("unix") 123 an 10.500 &File.-SEP3- <Nop> 124 an 10.510 &File.&Print :w !lpr<CR> 125 vunmenu &File.&Print 126 vnoremenu &File.&Print :w !lpr<CR> 127endif 128an 10.600 &File.-SEP4- <Nop> 129an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR> 130an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR> 131 132" Pasting blockwise and linewise selections is not possible in Insert and 133" Visual mode without the +virtualedit feature. They are pasted as if they 134" were characterwise instead. Add to that some tricks to leave the cursor in 135" the right position, also for "gi". 136" Note: the same stuff appears in mswin.vim. 137if has("virtualedit") 138 nnoremap <silent> <script> <SID>Paste :call <SID>Paste()<CR> 139 func! <SID>Paste() 140 let ove = &ve 141 set ve=all 142 normal `^ 143 if @+ != '' 144 normal "+gP 145 endif 146 let c = col(".") 147 normal i 148 if col(".") < c " compensate for i<ESC> moving the cursor left 149 normal l 150 endif 151 let &ve = ove 152 endfunc 153else 154 nnoremap <silent> <script> <SID>Paste "=@+.'xy'<CR>gPFx"_2x 155endif 156 157" Use maps for items that are present both in Edit, Popup and Toolbar menu. 158if has("virtualedit") 159 vnoremap <script> <SID>vPaste "-c<Esc><SID>Paste 160 inoremap <script> <SID>iPaste <Esc><SID>Pastegi 161else 162 vnoremap <script> <SID>vPaste "-c<Esc>gix<Esc><SID>Paste"_x 163 inoremap <script> <SID>iPaste x<Esc><SID>Paste"_s 164endif 165 166func! <SID>SelectAll() 167 exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G") 168endfunc 169 170 171" Edit menu 172an 20.310 &Edit.&Undo<Tab>u u 173an 20.320 &Edit.&Redo<Tab>^R <C-R> 174an 20.330 &Edit.Rep&eat<Tab>\. . 175 176an 20.335 &Edit.-SEP1- <Nop> 177vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x 178vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y 179cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y> 180nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP 181cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+ 182vnoremenu <script> &Edit.&Paste<Tab>"+gP <SID>vPaste 183inoremenu <script> &Edit.&Paste<Tab>"+gP <SID>iPaste 184nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p 185inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p 186nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p 187inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p 188if has("win32") || has("win16") 189 vnoremenu 20.390 &Edit.&Delete<Tab>x x 190endif 191noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR> 192inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR> 193cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR> 194 195an 20.405 &Edit.-SEP2- <Nop> 196if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif") 197 an 20.410 &Edit.&Find\.\.\. :promptfind<CR> 198 vunmenu &Edit.&Find\.\.\. 199 vnoremenu &Edit.&Find\.\.\. y:promptfind <C-R>"<CR> 200 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR> 201 vunmenu &Edit.Find\ and\ Rep&lace\.\.\. 202 vnoremenu &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>"<CR> 203else 204 an 20.410 &Edit.&Find<Tab>/ / 205 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/ 206 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s 207 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/ 208endif 209 210an 20.425 &Edit.-SEP3- <Nop> 211an 20.430 &Edit.Settings\ &Window :options<CR> 212 213" Edit/Global Settings 214an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR> 215an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR> 216an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR> 217 218an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR> 219an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR> 220an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR> 221an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR> 222an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR> 223an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR> 224an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR> 225an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR> 226 227an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR> 228an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR> 229an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR> 230an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR> 231an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR> 232an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR> 233an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR> 234an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR> 235an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR> 236" 237" GUI options 238an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop> 239an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR> 240an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR> 241an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR> 242an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR> 243 244fun! s:SearchP() 245 if !exists("g:menutrans_path_dialog") 246 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma." 247 endif 248 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g')) 249 if n != "" 250 let &path = substitute(n, ' ', '\\ ', 'g') 251 endif 252endfun 253 254fun! s:TagFiles() 255 if !exists("g:menutrans_tags_dialog") 256 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma." 257 endif 258 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g')) 259 if n != "" 260 let &tags = substitute(n, ' ', '\\ ', 'g') 261 endif 262endfun 263 264fun! s:ToggleGuiOption(option) 265 " If a:option is already set in guioptions, then we want to remove it 266 if match(&guioptions, "\\C" . a:option) > -1 267 exec "set go-=" . a:option 268 else 269 exec "set go+=" . a:option 270 endif 271endfun 272 273" Edit/File Settings 274 275" Boolean options 276an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR> 277an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR> 278an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR> 279an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR> 280an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR> 281an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR> 282an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR> 283 284" other options 285an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop> 286an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR> 287an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR> 288an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR> 289an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR> 290an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR> 291an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR> 292 293an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR> 294an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR> 295an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR> 296an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR> 297an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR> 298an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR> 299 300an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR> 301an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR> 302fun! s:TextWidth() 303 if !exists("g:menutrans_textwidth_dialog") 304 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): " 305 endif 306 let n = inputdialog(g:menutrans_textwidth_dialog, &tw) 307 if n != "" 308 " remove leading zeros to avoid it being used as an octal number 309 let &tw = substitute(n, "^0*", "", "") 310 endif 311endfun 312 313fun! s:FileFormat() 314 if !exists("g:menutrans_fileformat_dialog") 315 let g:menutrans_fileformat_dialog = "Select format for writing the file" 316 endif 317 if !exists("g:menutrans_fileformat_choices") 318 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel" 319 endif 320 if &ff == "dos" 321 let def = 2 322 elseif &ff == "mac" 323 let def = 3 324 else 325 let def = 1 326 endif 327 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question") 328 if n == 1 329 set ff=unix 330 elseif n == 2 331 set ff=dos 332 elseif n == 3 333 set ff=mac 334 endif 335endfun 336 337" Setup the Edit.Color Scheme submenu 338let s:n = globpath(&runtimepath, "colors/*.vim") 339let s:idx = 100 340while strlen(s:n) > 0 341 let s:i = stridx(s:n, "\n") 342 if s:i < 0 343 let s:name = s:n 344 let s:n = "" 345 else 346 let s:name = strpart(s:n, 0, s:i) 347 let s:n = strpart(s:n, s:i + 1, 19999) 348 endif 349 " Ignore case for VMS and windows 350 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '') 351 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>" 352 unlet s:name 353 unlet s:i 354 let s:idx = s:idx + 10 355endwhile 356unlet s:n 357unlet s:idx 358 359" Setup the Edit.Keymap submenu 360if has("keymap") 361 let s:n = globpath(&runtimepath, "keymap/*.vim") 362 if s:n != "" 363 let s:idx = 100 364 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR> 365 while strlen(s:n) > 0 366 let s:i = stridx(s:n, "\n") 367 if s:i < 0 368 let s:name = s:n 369 let s:n = "" 370 else 371 let s:name = strpart(s:n, 0, s:i) 372 let s:n = strpart(s:n, s:i + 1, 19999) 373 endif 374 " Ignore case for VMS and windows 375 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '') 376 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>" 377 unlet s:name 378 unlet s:i 379 let s:idx = s:idx + 10 380 endwhile 381 unlet s:idx 382 endif 383 unlet s:n 384endif 385if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_photon") 386 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR> 387endif 388 389" Programming menu 390if !exists("g:ctags_command") 391 if has("vms") 392 let g:ctags_command = "mc vim:ctags ." 393 else 394 let g:ctags_command = "ctags -R ." 395 endif 396endif 397 398an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]> 399vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^] 400vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]> 401an 40.310 &Tools.Jump\ &back<Tab>^T <C-T> 402an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR> 403 404" Tools.Fold Menu 405if has("folding") 406 an 40.330 &Tools.-SEP1- <Nop> 407 " open close folds 408 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi 409 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv 410 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx 411 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm 412 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM 413 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr 414 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR 415 " fold method 416 an 40.340.200 &Tools.&Folding.-SEP1- <Nop> 417 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR> 418 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR> 419 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR> 420 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR> 421 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR> 422 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR> 423 " create and delete folds 424 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf 425 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd 426 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD 427 " moving around in folds 428 an 40.340.300 &Tools.&Folding.-SEP2- <Nop> 429 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR> 430 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR> 431 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR> 432 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR> 433 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR> 434 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR> 435 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR> 436 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR> 437endif " has folding 438 439if has("diff") 440 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR> 441 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR> 442 vunmenu &Tools.&Diff.&Get\ Block 443 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR> 444 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR> 445 vunmenu &Tools.&Diff.&Put\ Block 446 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR> 447endif 448 449an 40.358 &Tools.-SEP2- <Nop> 450an 40.360 &Tools.&Make<Tab>:make :make<CR> 451an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR> 452an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR> 453an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR> 454an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR> 455an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR> 456an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR> 457an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR> 458an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR> 459an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR> 460 461an 40.520 &Tools.-SEP3- <Nop> 462an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd 463 \ :call <SID>XxdConv()<CR> 464an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r 465 \ :call <SID>XxdBack()<CR> 466 467" Use a function to do the conversion, so that it also works with 'insertmode' 468" set. 469func! s:XxdConv() 470 let mod = &mod 471 if has("vms") 472 %!mc vim:xxd 473 else 474 call s:XxdFind() 475 exe '%!"' . g:xxdprogram . '"' 476 endif 477 if getline(1) =~ "^0000000:" " only if it worked 478 set ft=xxd 479 endif 480 let &mod = mod 481endfun 482 483func! s:XxdBack() 484 let mod = &mod 485 if has("vms") 486 %!mc vim:xxd -r 487 else 488 call s:XxdFind() 489 exe '%!"' . g:xxdprogram . '" -r' 490 endif 491 set ft= 492 doautocmd filetypedetect BufReadPost 493 let &mod = mod 494endfun 495 496func! s:XxdFind() 497 if !exists("g:xxdprogram") 498 " On the PC xxd may not be in the path but in the install directory 499 if (has("win32") || has("dos32")) && !executable("xxd") 500 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe" 501 else 502 let g:xxdprogram = "xxd" 503 endif 504 endif 505endfun 506 507" Setup the Tools.Compiler submenu 508let s:n = globpath(&runtimepath, "compiler/*.vim") 509let s:idx = 100 510while strlen(s:n) > 0 511 let s:i = stridx(s:n, "\n") 512 if s:i < 0 513 let s:name = s:n 514 let s:n = "" 515 else 516 let s:name = strpart(s:n, 0, s:i) 517 let s:n = strpart(s:n, s:i + 1, 19999) 518 endif 519 " Ignore case for VMS and windows 520 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '') 521 exe "an 30.440." . s:idx . ' &Tools.&Set\ Compiler.' . s:name . " :compiler " . s:name . "<CR>" 522 unlet s:name 523 unlet s:i 524 let s:idx = s:idx + 10 525endwhile 526unlet s:n 527unlet s:idx 528 529if !exists("no_buffers_menu") 530 531" Buffer list menu -- Setup functions & actions 532 533" wait with building the menu until after loading 'session' files. Makes 534" startup faster. 535let s:bmenu_wait = 1 536 537if !exists("bmenu_priority") 538 let bmenu_priority = 60 539endif 540 541func! s:BMAdd() 542 if s:bmenu_wait == 0 543 " when adding too many buffers, redraw in short format 544 if s:bmenu_count == &menuitems && s:bmenu_short == 0 545 call s:BMShow() 546 else 547 call <SID>BMFilename(expand("<afile>"), expand("<abuf>")) 548 let s:bmenu_count = s:bmenu_count + 1 549 endif 550 endif 551endfunc 552 553func! s:BMRemove() 554 if s:bmenu_wait == 0 555 let name = expand("<afile>") 556 if isdirectory(name) 557 return 558 endif 559 let munge = <SID>BMMunge(name, expand("<abuf>")) 560 561 if s:bmenu_short == 0 562 exe 'silent! aun &Buffers.' . munge 563 else 564 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge 565 endif 566 let s:bmenu_count = s:bmenu_count - 1 567 endif 568endfunc 569 570" Create the buffer menu (delete an existing one first). 571func! s:BMShow(...) 572 let s:bmenu_wait = 1 573 let s:bmenu_short = 1 574 let s:bmenu_count = 0 575 " 576 " get new priority, if exists 577 if a:0 == 1 578 let g:bmenu_priority = a:1 579 endif 580 581 " remove old menu, if exists; keep one entry to avoid a torn off menu to 582 " disappear. 583 silent! unmenu &Buffers 584 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l" 585 silent! unmenu! &Buffers 586 587 " create new menu; set 'cpo' to include the <CR> 588 let cpo_save = &cpo 589 set cpo&vim 590 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>" 591 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>" 592 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>" 593 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>" 594 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>" 595 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :" 596 let &cpo = cpo_save 597 unmenu &Buffers.Dummy 598 599 " figure out how many buffers there are 600 let buf = 1 601 while buf <= bufnr('$') 602 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf) 603 \ && !getbufvar(buf, "&bufsecret") 604 let s:bmenu_count = s:bmenu_count + 1 605 endif 606 let buf = buf + 1 607 endwhile 608 if s:bmenu_count <= &menuitems 609 let s:bmenu_short = 0 610 endif 611 612 " iterate through buffer list, adding each buffer to the menu: 613 let buf = 1 614 while buf <= bufnr('$') 615 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf) 616 \ && !getbufvar(buf, "&bufsecret") 617 call <SID>BMFilename(bufname(buf), buf) 618 endif 619 let buf = buf + 1 620 endwhile 621 let s:bmenu_wait = 0 622 aug buffer_list 623 au! 624 au BufCreate,BufFilePost * call <SID>BMAdd() 625 au BufDelete,BufFilePre * call <SID>BMRemove() 626 aug END 627endfunc 628 629func! s:BMHash(name) 630 " Make name all upper case, so that chars are between 32 and 96 631 let nm = substitute(a:name, ".*", '\U\0', "") 632 if has("ebcdic") 633 " HACK: Replace all non alphabetics with 'Z' 634 " Just to make it work for now. 635 let nm = substitute(nm, "[^A-Z]", 'Z', "g") 636 let sp = char2nr('A') - 1 637 else 638 let sp = char2nr(' ') 639 endif 640 " convert first six chars into a number for sorting: 641 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) 642endfunc 643 644func! s:BMHash2(name) 645 let nm = substitute(a:name, ".", '\L\0', "") 646 " Not exactly right for EBCDIC... 647 if nm[0] < 'a' || nm[0] > 'z' 648 return '&others.' 649 elseif nm[0] <= 'd' 650 return '&abcd.' 651 elseif nm[0] <= 'h' 652 return '&efgh.' 653 elseif nm[0] <= 'l' 654 return '&ijkl.' 655 elseif nm[0] <= 'p' 656 return '&mnop.' 657 elseif nm[0] <= 't' 658 return '&qrst.' 659 else 660 return '&u-z.' 661 endif 662endfunc 663 664" insert a buffer name into the buffer menu: 665func! s:BMFilename(name, num) 666 if isdirectory(a:name) 667 return 668 endif 669 let munge = <SID>BMMunge(a:name, a:num) 670 let hash = <SID>BMHash(munge) 671 if s:bmenu_short == 0 672 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge 673 else 674 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge 675 endif 676 " set 'cpo' to include the <CR> 677 let cpo_save = &cpo 678 set cpo&vim 679 exe name . ' :confirm b' . a:num . '<CR>' 680 let &cpo = cpo_save 681endfunc 682 683" Truncate a long path to fit it in a menu item. 684if !exists("g:bmenu_max_pathlen") 685 let g:bmenu_max_pathlen = 35 686endif 687func! s:BMTruncName(fname) 688 let name = a:fname 689 if g:bmenu_max_pathlen < 5 690 let name = "" 691 else 692 let len = strlen(name) 693 if len > g:bmenu_max_pathlen 694 let amountl = (g:bmenu_max_pathlen / 2) - 2 695 let amountr = g:bmenu_max_pathlen - amountl - 3 696 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$' 697 let left = substitute(name, pattern, '\1', '') 698 let right = substitute(name, pattern, '\2', '') 699 if strlen(left) + strlen(right) < len 700 let name = left . '...' . right 701 endif 702 endif 703 endif 704 return name 705endfunc 706 707func! s:BMMunge(fname, bnum) 708 let name = a:fname 709 if name == '' 710 if !exists("g:menutrans_no_file") 711 let g:menutrans_no_file = "[No file]" 712 endif 713 let name = g:menutrans_no_file 714 else 715 let name = fnamemodify(name, ':p:~') 716 endif 717 " detach file name and separate it out: 718 let name2 = fnamemodify(name, ':t') 719 if a:bnum >= 0 720 let name2 = name2 . ' (' . a:bnum . ')' 721 endif 722 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h')) 723 let name = escape(name, "\\. \t|") 724 let name = substitute(name, "&", "&&", "g") 725 let name = substitute(name, "\n", "^@", "g") 726 return name 727endfunc 728 729" When just starting Vim, load the buffer menu later 730if has("vim_starting") 731 augroup LoadBufferMenu 732 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif 733 au VimEnter * au! LoadBufferMenu 734 augroup END 735else 736 call <SID>BMShow() 737endif 738 739endif " !exists("no_buffers_menu") 740 741" Window menu 742an 70.300 &Window.&New<Tab>^Wn <C-W>n 743an 70.310 &Window.S&plit<Tab>^Ws <C-W>s 744an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^> 745an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v 746if has("vertsplit") 747 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR> 748 if !exists("*MenuExplOpen") 749 fun MenuExplOpen() 750 if @% == "" 751 20vsp . 752 else 753 exe "20vsp " . expand("%:p:h") 754 endif 755 endfun 756 endif 757endif 758an 70.335 &Window.-SEP1- <Nop> 759an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR> 760an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR> 761an 70.350 &Window.-SEP2- <Nop> 762an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K 763an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J 764an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H 765an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L 766an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R 767an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r 768an 70.365 &Window.-SEP3- <Nop> 769an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>= 770an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_ 771an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_ 772an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\| 773an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\| 774 775" The popup menu 776an 1.10 PopUp.&Undo u 777an 1.15 PopUp.-SEP1- <Nop> 778vnoremenu 1.20 PopUp.Cu&t "+x 779vnoremenu 1.30 PopUp.&Copy "+y 780cnoremenu 1.30 PopUp.&Copy <C-Y> 781nnoremenu 1.40 PopUp.&Paste "+gP 782cnoremenu 1.40 PopUp.&Paste <C-R>+ 783vnoremenu <script> 1.40 PopUp.&Paste <SID>vPaste 784inoremenu <script> 1.40 PopUp.&Paste <SID>iPaste 785vnoremenu 1.50 PopUp.&Delete x 786an 1.55 PopUp.-SEP2- <Nop> 787vnoremenu 1.60 PopUp.Select\ Blockwise <C-V> 788an 1.70 PopUp.Select\ &Word vaw 789an 1.80 PopUp.Select\ &Line V 790an 1.90 PopUp.Select\ &Block <C-V> 791noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR> 792inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR> 793cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR> 794 795 796" The GUI toolbar (for MS-Windows and GTK) 797if has("toolbar") 798 an 1.10 ToolBar.Open :browse confirm e<CR> 799 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR> 800 an 1.30 ToolBar.SaveAll :browse confirm wa<CR> 801 802 if has("printer") 803 an 1.40 ToolBar.Print :hardcopy<CR> 804 vunmenu ToolBar.Print 805 vnoremenu ToolBar.Print :hardcopy<CR> 806 elseif has("unix") 807 an 1.40 ToolBar.Print :w !lpr<CR> 808 vunmenu ToolBar.Print 809 vnoremenu ToolBar.Print :w !lpr<CR> 810 endif 811 812 an 1.45 ToolBar.-sep1- <Nop> 813 an 1.50 ToolBar.Undo u 814 an 1.60 ToolBar.Redo <C-R> 815 816 an 1.65 ToolBar.-sep2- <Nop> 817 vnoremenu 1.70 ToolBar.Cut "+x 818 vnoremenu 1.80 ToolBar.Copy "+y 819 cnoremenu 1.80 ToolBar.Copy <C-Y> 820 nnoremenu 1.90 ToolBar.Paste "+gP 821 cnoremenu ToolBar.Paste <C-R>+ 822 vnoremenu <script> ToolBar.Paste <SID>vPaste 823 inoremenu <script> ToolBar.Paste <SID>iPaste 824 825 if !has("gui_athena") 826 an 1.95 ToolBar.-sep3- <Nop> 827 an 1.100 ToolBar.Find :promptfind<CR> 828 vunmenu ToolBar.Find 829 vnoremenu ToolBar.Find y:promptfind <C-R>"<CR> 830 an 1.110 ToolBar.FindNext n 831 an 1.120 ToolBar.FindPrev N 832 an 1.130 ToolBar.Replace :promptrepl<CR> 833 vunmenu ToolBar.Replace 834 vnoremenu ToolBar.Replace y:promptrepl <C-R>"<CR> 835 endif 836 837if 0 " disabled; These are in the Windows menu 838 an 1.135 ToolBar.-sep4- <Nop> 839 an 1.140 ToolBar.New <C-W>n 840 an 1.150 ToolBar.WinSplit <C-W>s 841 an 1.160 ToolBar.WinMax :resize 200<CR> 842 an 1.170 ToolBar.WinMin :resize 1<CR> 843 an 1.180 ToolBar.WinVSplit <C-W>v 844 an 1.190 ToolBar.WinMaxWidth <C-W>500> 845 an 1.200 ToolBar.WinMinWidth <C-W>1\| 846 an 1.210 ToolBar.WinClose :close<CR> 847endif 848 849 an 1.215 ToolBar.-sep5- <Nop> 850 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR> 851 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR> 852 an 1.240 ToolBar.RunScript :browse so<CR> 853 854 an 1.245 ToolBar.-sep6- <Nop> 855 an 1.250 ToolBar.Make :make<CR> 856 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR> 857 an 1.280 ToolBar.TagJump g<C-]> 858 859 an 1.295 ToolBar.-sep7- <Nop> 860 an 1.300 ToolBar.Help :help<CR> 861 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR> 862 863" Only set the tooltips here if not done in a language menu file 864if exists("*Do_toolbar_tmenu") 865 call Do_toolbar_tmenu() 866else 867 let did_toolbar_tmenu = 1 868 tmenu ToolBar.Open Open file 869 tmenu ToolBar.Save Save current file 870 tmenu ToolBar.SaveAll Save all files 871 tmenu ToolBar.Print Print 872 tmenu ToolBar.Undo Undo 873 tmenu ToolBar.Redo Redo 874 tmenu ToolBar.Cut Cut to clipboard 875 tmenu ToolBar.Copy Copy to clipboard 876 tmenu ToolBar.Paste Paste from Clipboard 877 if !has("gui_athena") 878 tmenu ToolBar.Find Find... 879 tmenu ToolBar.FindNext Find Next 880 tmenu ToolBar.FindPrev Find Previous 881 tmenu ToolBar.Replace Find / Replace... 882 endif 883 if 0 " disabled; These are in the Windows menu 884 tmenu ToolBar.New New Window 885 tmenu ToolBar.WinSplit Split Window 886 tmenu ToolBar.WinMax Maximise Window 887 tmenu ToolBar.WinMin Minimise Window 888 tmenu ToolBar.WinVSplit Split Window Vertically 889 tmenu ToolBar.WinMaxWidth Maximise Window Width 890 tmenu ToolBar.WinMinWidth Minimise Window Width 891 tmenu ToolBar.WinClose Close Window 892 endif 893 tmenu ToolBar.LoadSesn Load session 894 tmenu ToolBar.SaveSesn Save current session 895 tmenu ToolBar.RunScript Run a Vim Script 896 tmenu ToolBar.Make Make current project 897 tmenu ToolBar.RunCtags Build tags in current directory tree 898 tmenu ToolBar.TagJump Jump to tag under cursor 899 tmenu ToolBar.Help Vim Help 900 tmenu ToolBar.FindHelp Search Vim Help 901endif 902 903" Select a session to load; default to current session name if present 904fun! s:LoadVimSesn() 905 if strlen(v:this_session) > 0 906 let name = v:this_session 907 else 908 let name = "Session.vim" 909 endif 910 execute "browse so " . name 911endfun 912 913" Select a session to save; default to current session name if present 914fun! s:SaveVimSesn() 915 if strlen(v:this_session) == 0 916 let v:this_session = "Session.vim" 917 endif 918 execute "browse mksession! " . v:this_session 919endfun 920 921endif 922 923endif " !exists("did_install_default_menus") 924 925" Define these items always, so that syntax can be switched on when it wasn't. 926" But skip them when the Syntax menu was disabled by the user. 927if !exists("did_install_syntax_menu") 928 an 50.212 &Syntax.&Manual :syn manual<CR> 929 an 50.214 &Syntax.A&utomatic :syn on<CR> 930 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR> 931 if !exists("*s:SynOnOff") 932 fun s:SynOnOff() 933 if has("syntax_items") 934 syn clear 935 else 936 if !exists("g:syntax_on") 937 syn manual 938 endif 939 set syn=ON 940 endif 941 endfun 942 endif 943endif 944 945 946" Install the Syntax menu only when filetype.vim has been loaded or when 947" manual syntax highlighting is enabled. 948" Avoid installing the Syntax menu twice. 949if (exists("did_load_filetypes") || exists("syntax_on")) 950 \ && !exists("did_install_syntax_menu") 951 let did_install_syntax_menu = 1 952 953" Skip setting up the individual syntax selection menus unless 954" do_syntax_sel_menu is defined (it takes quite a bit of time). 955if exists("do_syntax_sel_menu") 956 runtime! synmenu.vim 957else 958 an 50.10 &Syntax.&Show\ filetypes\ in\ menu :let do_syntax_sel_menu = 1<Bar>runtime! synmenu.vim<Bar>aunmenu &Syntax.&Show\ filetypes\ in\ menu<CR> 959 an 50.195 &Syntax.-SEP1- <Nop> 960endif 961 962an 50.210 &Syntax.&Off :syn off<CR> 963an 50.700 &Syntax.-SEP3- <Nop> 964an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR> 965an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR> 966an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR> 967 968endif " !exists("did_install_syntax_menu") 969 970" Restore the previous value of 'cpoptions'. 971let &cpo = s:cpo_save 972unlet s:cpo_save 973 974" vim: set sw=2 : 975