diff options
Diffstat (limited to '')
-rw-r--r-- | extras/filetype.vim | 3 | ||||
-rw-r--r-- | extras/menu.vim | 675 |
2 files changed, 340 insertions, 338 deletions
diff --git a/extras/filetype.vim b/extras/filetype.vim index f9f1ae75..f6cb13a1 100644 --- a/extras/filetype.vim +++ b/extras/filetype.vim @@ -1547,9 +1547,6 @@ au BufNewFile,BufRead *.r,*.R call polyglot#ft#FTr() " Remind au BufNewFile,BufRead .reminders,*.remind,*.rem setf remind -" ReScript -au BufNewFile,BufRead *.res,*.resi setf rescript - " Resolv.conf au BufNewFile,BufRead resolv.conf setf resolv diff --git a/extras/menu.vim b/extras/menu.vim index 12924af6..5f4e395e 100644 --- a/extras/menu.vim +++ b/extras/menu.vim @@ -2,7 +2,7 @@ " You can also use this as a start for your own set of menus. " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2022 Feb 04 +" Last Change: 2021 Dec 22 " Note that ":an" (short for ":anoremenu") is often used to make a menu work " in all modes and avoid side effects from mappings defined by the user. @@ -33,7 +33,7 @@ if exists("v:lang") || &langmenu != "" if strlen(s:lang) > 1 && s:lang !~? '^en_us' " When the language does not include the charset add 'encoding' if s:lang =~ '^\a\a$\|^\a\a_\a\a$' - let s:lang = s:lang .. '.' .. &enc + let s:lang = s:lang . '.' . &enc endif " We always use a lowercase name. @@ -49,26 +49,26 @@ if exists("v:lang") || &langmenu != "" " same menu file for them. let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "") menutrans clear - exe "runtime! lang/menu_" .. s:lang .. ".vim" + exe "runtime! lang/menu_" . s:lang . ".vim" if !exists("did_menu_trans") " There is no exact match, try matching with a wildcard added " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE). let s:lang = substitute(s:lang, '\.[^.]*', "", "") - exe "runtime! lang/menu_" .. s:lang .. "[^a-z]*vim" + exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim" if !exists("did_menu_trans") && s:lang =~ '_' " If the language includes a region try matching without that region. " (e.g. find menu_de.vim if s:lang == de_DE). let langonly = substitute(s:lang, '_.*', "", "") - exe "runtime! lang/menu_" .. langonly .. "[^a-z]*vim" + exe "runtime! lang/menu_" . langonly . "[^a-z]*vim" endif if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us' " On windows locale names are complicated, try using $LANG, it might " have been set by set_init_1(). But don't do this for "en" or "en_us". " But don't match "slovak" when $LANG is "sl". - exe "runtime! lang/menu_" .. tolower($LANG) .. "[^a-z]*vim" + exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim" endif endif endif @@ -104,19 +104,19 @@ if exists(':tlmenu') tlnoremenu 9999.90 &Help.&About <C-W>:intro<CR> endif -def s:Helpfind() +fun! s:Helpfind() if !exists("g:menutrans_help_dialog") - 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')" + 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')" endif - var h = inputdialog(g:menutrans_help_dialog) + let h = inputdialog(g:menutrans_help_dialog) if h != "" - v:errmsg = "" - silent! exe "help " .. h + let v:errmsg = "" + silent! exe "help " . h if v:errmsg != "" echo v:errmsg endif endif -enddef +endfun " File menu an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR> @@ -154,9 +154,16 @@ an 10.600 &File.-SEP4- <Nop> an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR> an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR> -def s:SelectAll() - exe "norm! gg" .. (&slm == "" ? "VG" : "gH\<C-O>G") -enddef +func s:SelectAll() + exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G") +endfunc + +func s:FnameEscape(fname) + if exists('*fnameescape') + return fnameescape(a:fname) + endif + return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<") +endfunc " Edit menu an 20.310 &Edit.&Undo<Tab>u u @@ -175,8 +182,8 @@ cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+ if exists(':tlmenu') tlnoremenu &Edit.&Paste<Tab>"+gP <C-W>"+ endif -exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' .. paste#paste_cmd['v'] -exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' .. paste#paste_cmd['i'] +exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v'] +exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i'] nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p @@ -207,33 +214,32 @@ an 20.425 &Edit.-SEP3- <Nop> an 20.430 &Edit.Settings\ &Window :options<CR> an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR> -def s:EditVimrc() - var fname: string +fun! s:EditVimrc() if $MYVIMRC != '' - fname = $MYVIMRC + let fname = $MYVIMRC elseif has("win32") if $HOME != '' - fname = $HOME .. "/_vimrc" + let fname = $HOME . "/_vimrc" else - fname = $VIM .. "/_vimrc" + let fname = $VIM . "/_vimrc" endif elseif has("amiga") - fname = "s:.vimrc" + let fname = "s:.vimrc" else - fname = $HOME .. "/.vimrc" + let fname = $HOME . "/.vimrc" endif - fname = fnameescape(fname) + let fname = s:FnameEscape(fname) if &mod - exe "split " .. fname + exe "split " . fname else - exe "edit " .. fname + exe "edit " . fname endif -enddef +endfun -def s:FixFText(): string - # Fix text in nameless register to be used with :promptfind. +fun! s:FixFText() + " Fix text in nameless register to be used with :promptfind. return substitute(@", "[\r\n]", '\\n', 'g') -enddef +endfun " Edit/Global Settings an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR> @@ -266,34 +272,34 @@ an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR> an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR> -def s:SearchP() +fun! s:SearchP() if !exists("g:menutrans_path_dialog") - g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma." + let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma." endif - var n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g')) + let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g')) if n != "" - &path = substitute(n, ' ', '\\ ', 'g') + let &path = substitute(n, ' ', '\\ ', 'g') endif -enddef +endfun -def s:TagFiles() +fun! s:TagFiles() if !exists("g:menutrans_tags_dialog") - g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma." + let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma." endif - var n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g')) + let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g')) if n != "" - &tags = substitute(n, ' ', '\\ ', 'g') + let &tags = substitute(n, ' ', '\\ ', 'g') endif -enddef +endfun -def s:ToggleGuiOption(option: string) - # If a:option is already set in guioptions, then we want to remove it - if match(&guioptions, "\\C" .. option) > -1 - exec "set go-=" .. option - else - exec "set go+=" .. option - endif -enddef +fun! s:ToggleGuiOption(option) + " If a:option is already set in guioptions, then we want to remove it + if match(&guioptions, "\\C" . a:option) > -1 + exec "set go-=" . a:option + else + exec "set go+=" . a:option + endif +endfun " Edit/File Settings @@ -325,36 +331,34 @@ an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR> an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR> an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR> - -def s:TextWidth() +fun! s:TextWidth() if !exists("g:menutrans_textwidth_dialog") - g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): " + let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): " endif - var n = inputdialog(g:menutrans_textwidth_dialog, &tw .. '') + let n = inputdialog(g:menutrans_textwidth_dialog, &tw) if n != "" - # Remove leading zeros to avoid it being used as an octal number. - # But keep a zero by itself. - var tw = substitute(n, "^0*", "", "") - &tw = tw == '' ? 0 : tw + " Remove leading zeros to avoid it being used as an octal number. + " But keep a zero by itself. + let tw = substitute(n, "^0*", "", "") + let &tw = tw == '' ? 0 : tw endif -enddef +endfun -def s:FileFormat() +fun! s:FileFormat() if !exists("g:menutrans_fileformat_dialog") - g:menutrans_fileformat_dialog = "Select format for writing the file" + let g:menutrans_fileformat_dialog = "Select format for writing the file" endif if !exists("g:menutrans_fileformat_choices") - g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel" + let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel" endif - var def_choice: number if &ff == "dos" - def_choice = 2 + let def = 2 elseif &ff == "mac" - def_choice = 3 + let def = 3 else - def_choice = 1 + let def = 1 endif - var n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def_choice, "Question") + let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question") if n == 1 set ff=unix elseif n == 2 @@ -362,33 +366,32 @@ def s:FileFormat() elseif n == 3 set ff=mac endif -enddef +endfun let s:did_setup_color_schemes = 0 " Setup the Edit.Color Scheme submenu -def s:SetupColorSchemes() +func s:SetupColorSchemes() abort if s:did_setup_color_schemes return endif - s:did_setup_color_schemes = 1 + let s:did_setup_color_schemes = 1 - var n = globpath(&runtimepath, "colors/*.vim", 1, 1) - n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1) - n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1) + let n = globpath(&runtimepath, "colors/*.vim", 1, 1) + let n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1) + let n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1) - # Ignore case for VMS and windows, sort on name - var names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1) + " Ignore case for VMS and windows, sort on name + let names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1) - # define all the submenu entries - var idx = 100 + " define all the submenu entries + let idx = 100 for name in names - exe "an 20.450." .. idx .. ' &Edit.C&olor\ Scheme.' .. name .. " :colors " .. name .. "<CR>" - idx += 10 + exe "an 20.450." . idx . ' &Edit.C&olor\ Scheme.' . name . " :colors " . name . "<CR>" + let idx = idx + 10 endfor silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu -enddef - +endfun if exists("do_no_lazyload_menus") call s:SetupColorSchemes() else @@ -400,33 +403,31 @@ endif if has("keymap") let s:did_setup_keymaps = 0 - def s:SetupKeymaps() + func s:SetupKeymaps() abort if s:did_setup_keymaps return endif - s:did_setup_keymaps = 1 + let s:did_setup_keymaps = 1 - var names = globpath(&runtimepath, "keymap/*.vim", 1, 1) - if !empty(names) - var idx = 100 + let n = globpath(&runtimepath, "keymap/*.vim", 1, 1) + if !empty(n) + let idx = 100 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR> - for name in names - # Ignore case for VMS and windows - var mapname = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '') - exe "an 20.460." .. idx .. ' &Edit.&Keymap.' .. mapname .. " :set keymap=" .. mapname .. "<CR>" - idx += 10 + for name in n + " Ignore case for VMS and windows + let name = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '') + exe "an 20.460." . idx . ' &Edit.&Keymap.' . name . " :set keymap=" . name . "<CR>" + let idx = idx + 10 endfor endif silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu - enddef - + endfun if exists("do_no_lazyload_menus") call s:SetupKeymaps() else an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR> endif endif - if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac") an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR> endif @@ -444,7 +445,7 @@ an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]> vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]> an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T> -an 40.320 &Tools.Build\ &Tags\ File :exe "!" .. g:ctags_command<CR> +an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR> if has("folding") || has("spell") an 40.330 &Tools.-SEP1- <Nop> @@ -468,47 +469,50 @@ if has("spell") an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR> let s:undo_spelllang = ['aun &Tools.&Spelling.&Find\ More\ Languages'] - def s:SpellLang() + func s:SpellLang() for cmd in s:undo_spelllang - exe "silent! " .. cmd + exe "silent! " . cmd endfor - s:undo_spelllang = [] + let s:undo_spelllang = [] - var enc = &enc == "iso-8859-15" ? "latin1" : &enc + if &enc == "iso-8859-15" + let enc = "latin1" + else + let enc = &enc + endif if !exists("g:menutrans_set_lang_to") - g:menutrans_set_lang_to = 'Set Language to' + let g:menutrans_set_lang_to = 'Set Language to' endif - var found = 0 - var _nm = '' - var names = globpath(&runtimepath, "spell/*." .. enc .. ".spl", 1, 1) - if !empty(names) - var n = 300 - for f in names - var nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "") + let found = 0 + let s = globpath(&runtimepath, "spell/*." . enc . ".spl", 1, 1) + if !empty(s) + let n = 300 + for f in s + let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "") if nm != "en" && nm !~ '/' - _nm = nm - found += 1 - var menuname = '&Tools.&Spelling.' .. escape(g:menutrans_set_lang_to, "\\. \t|") .. '\ "' .. nm .. '"' - exe 'an 40.335.' .. n .. ' ' .. menuname .. ' :set spl=' .. nm .. ' spell<CR>' - s:undo_spelllang += ['aun ' .. menuname] + let _nm = nm + let found += 1 + let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"' + exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>' + let s:undo_spelllang += ['aun ' . menuname] endif - n += 10 + let n += 10 endfor endif if found == 0 echomsg "Could not find other spell files" elseif found == 1 - echomsg "Found spell file " .. _nm + echomsg "Found spell file " . _nm else - echomsg "Found " .. found .. " more spell files" + echomsg "Found " . found . " more spell files" endif - # Need to redo this when 'encoding' is changed. + " Need to redo this when 'encoding' is changed. augroup spellmenu au! EncodingChanged * call <SID>SpellLang() augroup END - enddef + endfun endif @@ -577,67 +581,66 @@ an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r " Use a function to do the conversion, so that it also works with 'insertmode' " set. -def s:XxdConv() - var mod = &mod +func s:XxdConv() + let mod = &mod if has("vms") - :%!mc vim:xxd + %!mc vim:xxd else - s:XxdFind() - exe '%!' .. g:xxdprogram + call s:XxdFind() + exe '%!' . g:xxdprogram endif - if getline(1) =~ "^0000000:" # only if it worked + if getline(1) =~ "^0000000:" " only if it worked set ft=xxd endif - &mod = mod -enddef + let &mod = mod +endfun -def s:XxdBack() - var mod = &mod +func s:XxdBack() + let mod = &mod if has("vms") - :%!mc vim:xxd -r + %!mc vim:xxd -r else - s:XxdFind() - exe '%!' .. g:xxdprogram .. ' -r' + call s:XxdFind() + exe '%!' . g:xxdprogram . ' -r' endif set ft= doautocmd filetypedetect BufReadPost - &mod = mod -enddef + let &mod = mod +endfun -def s:XxdFind() +func s:XxdFind() if !exists("g:xxdprogram") - # On the PC xxd may not be in the path but in the install directory + " On the PC xxd may not be in the path but in the install directory if has("win32") && !executable("xxd") - g:xxdprogram = $VIMRUNTIME .. (&shellslash ? '/' : '\') .. "xxd.exe" + let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe" if g:xxdprogram =~ ' ' - g:xxdprogram = '"' .. g:xxdprogram .. '"' + let g:xxdprogram = '"' .. g:xxdprogram .. '"' endif else - g:xxdprogram = "xxd" + let g:xxdprogram = "xxd" endif endif -enddef +endfun let s:did_setup_compilers = 0 " Setup the Tools.Compiler submenu -def s:SetupCompilers() +func s:SetupCompilers() abort if s:did_setup_compilers return endif - s:did_setup_compilers = 1 - - var names = globpath(&runtimepath, "compiler/*.vim", 1, 1) - var idx = 100 - for name in names - # Ignore case for VMS and windows - var cname = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '') - exe "an 30.440." .. idx .. ' &Tools.Se&t\ Compiler.' .. cname .. " :compiler " .. cname .. "<CR>" - idx += 10 + let s:did_setup_compilers = 1 + + let n = globpath(&runtimepath, "compiler/*.vim", 1, 1) + let idx = 100 + for name in n + " Ignore case for VMS and windows + let name = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '') + exe "an 30.440." . idx . ' &Tools.Se&t\ Compiler.' . name . " :compiler " . name . "<CR>" + let idx = idx + 10 endfor silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu -enddef - +endfun if exists("do_no_lazyload_menus") call s:SetupCompilers() else @@ -646,13 +649,13 @@ endif " Load ColorScheme, Compiler Setting and Keymap menus when idle. if !exists("do_no_lazyload_menus") - def s:SetupLazyloadMenus() - s:SetupColorSchemes() - s:SetupCompilers() + func s:SetupLazyloadMenus() + call s:SetupColorSchemes() + call s:SetupCompilers() if has("keymap") - s:SetupKeymaps() + call s:SetupKeymaps() endif - enddef + endfunc augroup SetupLazyloadMenus au! au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus @@ -677,133 +680,135 @@ if !exists("bmenu_priority") endif " invoked from a BufCreate or BufFilePost autocommand -def s:BMAdd() +func s:BMAdd() if s:bmenu_wait == 0 - # when adding too many buffers, redraw in short format + " when adding too many buffers, redraw in short format if s:bmenu_count == &menuitems && s:bmenu_short == 0 - s:BMShow() + call s:BMShow() else - var name = expand("<afile>") - var num = str2nr(expand("<abuf>")) + let name = expand("<afile>") + let num = expand("<abuf>") + 0 " add zero to convert to a number type if s:BMCanAdd(name, num) - s:BMFilename(name, num) - s:bmenu_count += 1 + call <SID>BMFilename(name, num) + let s:bmenu_count += 1 endif endif endif -enddef +endfunc " invoked from a BufDelete or BufFilePre autocommand -def s:BMRemove() +func s:BMRemove() if s:bmenu_wait == 0 - var bufnum = expand("<abuf>") + let bufnum = expand("<abuf>") if s:bmenu_items->has_key(bufnum) - var menu_name = s:bmenu_items[bufnum] - exe 'silent! aun &Buffers.' .. menu_name - s:bmenu_count = s:bmenu_count - 1 + let menu_name = s:bmenu_items[bufnum] + exe 'silent! aun &Buffers.' . menu_name + let s:bmenu_count = s:bmenu_count - 1 unlet s:bmenu_items[bufnum] endif endif -enddef +endfunc " Return non-zero if buffer with number "name" / "num" is useful to add in the " buffer menu. -def s:BMCanAdd(name: string, num: number): bool - # no directory or unlisted buffer - if isdirectory(name) || !buflisted(num) - return false +func s:BMCanAdd(name, num) + " no directory or unlisted buffer + if isdirectory(a:name) || !buflisted(a:num) + return 0 endif - # no name with control characters - if name =~ '[\x01-\x1f]' - return false + " no name with control characters + if a:name =~ '[\x01-\x1f]' + return 0 endif - # no special buffer, such as terminal or popup - var buftype = getbufvar(num, '&buftype') + " no special buffer, such as terminal or popup + let buftype = getbufvar(a:num, '&buftype') if buftype != '' && buftype != 'nofile' && buftype != 'nowrite' - return false + return 0 endif - # only existing buffers - return bufexists(num) -enddef + " only existing buffers + return bufexists(a:num) +endfunc " Create the buffer menu (delete an existing one first). -def s:BMShow() - s:bmenu_wait = 1 - s:bmenu_short = 1 - s:bmenu_count = 0 - s:bmenu_items = {} - - # Remove old menu, if it exists; keep one entry to avoid a torn off menu to - # disappear. Use try/catch to avoid setting v:errmsg - try - unmenu &Buffers - catch - endtry - exe 'noremenu ' .. g:bmenu_priority .. ".1 &Buffers.Dummy l" - try - unmenu! &Buffers - catch - endtry - - # create new menu - exe 'an <silent> ' .. g:bmenu_priority .. ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>" - exe 'an ' .. g:bmenu_priority .. ".4 &Buffers.&Delete :confirm bd<CR>" - exe 'an ' .. g:bmenu_priority .. ".6 &Buffers.&Alternate :confirm b #<CR>" - exe 'an ' .. g:bmenu_priority .. ".7 &Buffers.&Next :confirm bnext<CR>" - exe 'an ' .. g:bmenu_priority .. ".8 &Buffers.&Previous :confirm bprev<CR>" - exe 'an ' .. g:bmenu_priority .. ".9 &Buffers.-SEP- :" +func s:BMShow(...) + let s:bmenu_wait = 1 + let s:bmenu_short = 1 + let s:bmenu_count = 0 + let s:bmenu_items = {} + " + " get new priority, if exists + if a:0 == 1 + let g:bmenu_priority = a:1 + endif + + " Remove old menu, if it exists; keep one entry to avoid a torn off menu to + " disappear. Use try/catch to avoid setting v:errmsg + try | unmenu &Buffers | catch | endtry + exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l" + try | unmenu! &Buffers | catch | endtry + + " create new menu; set 'cpo' to include the <CR> + let cpo_save = &cpo + set cpo&vim + exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>" + exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>" + exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>" + exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>" + exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>" + exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :" + let &cpo = cpo_save unmenu &Buffers.Dummy - # figure out how many buffers there are - var buf = 1 + " figure out how many buffers there are + let buf = 1 while buf <= bufnr('$') if s:BMCanAdd(bufname(buf), buf) - s:bmenu_count = s:bmenu_count + 1 + let s:bmenu_count = s:bmenu_count + 1 endif - buf += 1 + let buf = buf + 1 endwhile if s:bmenu_count <= &menuitems - s:bmenu_short = 0 + let s:bmenu_short = 0 endif - # iterate through buffer list, adding each buffer to the menu: - buf = 1 + " iterate through buffer list, adding each buffer to the menu: + let buf = 1 while buf <= bufnr('$') - var name = bufname(buf) + let name = bufname(buf) if s:BMCanAdd(name, buf) - call s:BMFilename(name, buf) + call <SID>BMFilename(name, buf) endif - buf += 1 + let buf = buf + 1 endwhile - s:bmenu_wait = 0 + let s:bmenu_wait = 0 aug buffer_list - au! - au BufCreate,BufFilePost * call s:BMAdd() - au BufDelete,BufFilePre * call s:BMRemove() + au! + au BufCreate,BufFilePost * call <SID>BMAdd() + au BufDelete,BufFilePre * call <SID>BMRemove() aug END -enddef +endfunc -def s:BMHash(name: string): number - # Make name all upper case, so that chars are between 32 and 96 - var nm = substitute(name, ".*", '\U\0', "") - var sp: number +func s:BMHash(name) + " Make name all upper case, so that chars are between 32 and 96 + let nm = substitute(a:name, ".*", '\U\0', "") if has("ebcdic") - # HACK: Replace all non alphabetics with 'Z' - # Just to make it work for now. - nm = substitute(nm, "[^A-Z]", 'Z', "g") - sp = char2nr('A') - 1 + " HACK: Replace all non alphabetics with 'Z' + " Just to make it work for now. + let nm = substitute(nm, "[^A-Z]", 'Z', "g") + let sp = char2nr('A') - 1 else - sp = char2nr(' ') + let sp = char2nr(' ') endif - # convert first six chars into a number for sorting: + " convert first six chars into a number for sorting: 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) -enddef +endfunc -def s:BMHash2(name: string): string - var nm = substitute(name, ".", '\L\0', "") +func s:BMHash2(name) + let nm = substitute(a:name, ".", '\L\0', "") + " Not exactly right for EBCDIC... if nm[0] < 'a' || nm[0] > 'z' return '&others.' elseif nm[0] <= 'd' @@ -819,70 +824,72 @@ def s:BMHash2(name: string): string else return '&u-z.' endif -enddef +endfunc " Insert a buffer name into the buffer menu. -def s:BMFilename(name: string, num: number) - var munge = s:BMMunge(name, num) - var hash = s:BMHash(munge) - var cmd: string +func s:BMFilename(name, num) + let munge = <SID>BMMunge(a:name, a:num) + let hash = <SID>BMHash(munge) if s:bmenu_short == 0 - s:bmenu_items[num] = munge - cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. ' &Buffers.' .. munge + let s:bmenu_items[a:num] = munge + let cmd = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge else - var menu_name = s:BMHash2(munge) .. munge - s:bmenu_items[num] = menu_name - cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. '.' .. hash .. ' &Buffers.' .. menu_name + let menu_name = <SID>BMHash2(munge) . munge + let s:bmenu_items[a:num] = menu_name + let cmd = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . menu_name endif - exe cmd .. ' :confirm b' .. num .. '<CR>' -enddef + " set 'cpo' to include the <CR> + let cpo_save = &cpo + set cpo&vim + exe cmd . ' :confirm b' . a:num . '<CR>' + let &cpo = cpo_save +endfunc " Truncate a long path to fit it in a menu item. if !exists("g:bmenu_max_pathlen") let g:bmenu_max_pathlen = 35 endif - -def s:BMTruncName(fname: string): string - var name = fname +func s:BMTruncName(fname) + let name = a:fname if g:bmenu_max_pathlen < 5 - name = "" + let name = "" else - var len = strlen(name) + let len = strlen(name) if len > g:bmenu_max_pathlen - var amountl = (g:bmenu_max_pathlen / 2) - 2 - var amountr = g:bmenu_max_pathlen - amountl - 3 - var pattern = '^\(.\{,' .. amountl .. '}\).\{-}\(.\{,' .. amountr .. '}\)$' - var left = substitute(name, pattern, '\1', '') - var right = substitute(name, pattern, '\2', '') + let amountl = (g:bmenu_max_pathlen / 2) - 2 + let amountr = g:bmenu_max_pathlen - amountl - 3 + let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$' + let left = substitute(name, pattern, '\1', '') + let right = substitute(name, pattern, '\2', '') if strlen(left) + strlen(right) < len - name = left .. '...' .. right + let name = left . '...' . right endif endif endif return name -enddef +endfunc -def s:BMMunge(fname: string, bnum: number): string - var name = fname +func s:BMMunge(fname, bnum) + let name = a:fname if name == '' if !exists("g:menutrans_no_file") - g:menutrans_no_file = "[No Name]" + let g:menutrans_no_file = "[No Name]" endif - name = g:menutrans_no_file + let name = g:menutrans_no_file else - name = fnamemodify(name, ':p:~') + let name = fnamemodify(name, ':p:~') endif - # detach file name and separate it out: - var name2 = fnamemodify(name, ':t') - if bnum >= 0 - name2 = name2 .. ' (' .. bnum .. ')' + " detach file name and separate it out: + let name2 = fnamemodify(name, ':t') + if a:bnum >= 0 + let name2 = name2 . ' (' . a:bnum . ')' endif - name = name2 .. "\t" .. s:BMTruncName(fnamemodify(name, ':h')) - name = escape(name, "\\. \t|") - name = substitute(name, "&", "&&", "g") - name = substitute(name, "\n", "^@", "g") + let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h')) + let name = escape(name, "\\. \t|") + let name = substitute(name, "&", "&&", "g") + let name = substitute(name, "\n", "^@", "g") return name -enddef +endfunc " When just starting Vim, load the buffer menu later if has("vim_starting") @@ -903,13 +910,13 @@ an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^> an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR> if !exists("*MenuExplOpen") - def MenuExplOpen() + fun MenuExplOpen() if @% == "" - :20vsp . + 20vsp . else - exe ":20vsp " .. fnameescape(expand("%:p:h")) + exe "20vsp " . s:FnameEscape(expand("%:p:h")) endif - enddef + endfun endif an 70.335 &Window.-SEP1- <Nop> an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR> @@ -936,8 +943,8 @@ vnoremenu 1.30 PopUp.&Copy "+y cnoremenu 1.30 PopUp.&Copy <C-Y> nnoremenu 1.40 PopUp.&Paste "+gP cnoremenu 1.40 PopUp.&Paste <C-R>+ -exe 'vnoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['v'] -exe 'inoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['i'] +exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v'] +exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i'] vnoremenu 1.50 PopUp.&Delete x an 1.55 PopUp.-SEP2- <Nop> vnoremenu 1.60 PopUp.Select\ Blockwise <C-V> @@ -979,75 +986,77 @@ cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()< if has("spell") " Spell suggestions in the popup menu. Note that this will slow down the " appearance of the menu! - def s:SpellPopup() + func s:SpellPopup() if exists("s:changeitem") && s:changeitem != '' - call s:SpellDel() + call <SID>SpellDel() endif - # Return quickly if spell checking is not enabled. + " Return quickly if spell checking is not enabled. if !&spell || &spelllang == '' return endif - var curcol = col('.') - var w: string - var a: string - [w, a] = spellbadword() - if col('.') > curcol # don't use word after the cursor - w = '' + let curcol = col('.') + let [w, a] = spellbadword() + if col('.') > curcol " don't use word after the cursor + let w = '' endif if w != '' if a == 'caps' - s:suglist = [substitute(w, '.*', '\u&', '')] + let s:suglist = [substitute(w, '.*', '\u&', '')] else - s:suglist = spellsuggest(w, 10) + let s:suglist = spellsuggest(w, 10) endif if len(s:suglist) > 0 if !exists("g:menutrans_spell_change_ARG_to") - g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to' + let g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to' endif - s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .')) - s:fromword = w - var pri = 1 + let s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .')) + let s:fromword = w + let pri = 1 + " set 'cpo' to include the <CR> + let cpo_save = &cpo + set cpo&vim for sug in s:suglist - exe 'anoremenu 1.5.' .. pri .. ' PopUp.' .. s:changeitem .. '.' .. escape(sug, ' .') - \ .. ' :call <SID>SpellReplace(' .. pri .. ')<CR>' - pri += 1 + exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .') + \ . ' :call <SID>SpellReplace(' . pri . ')<CR>' + let pri += 1 endfor if !exists("g:menutrans_spell_add_ARG_to_word_list") - g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List' + let g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List' endif - s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .')) - exe 'anoremenu 1.6 PopUp.' .. s:additem .. ' :spellgood ' .. w .. '<CR>' + let s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .')) + exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>' if !exists("g:menutrans_spell_ignore_ARG") - g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"' + let g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"' endif - s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .')) - exe 'anoremenu 1.7 PopUp.' .. s:ignoreitem .. ' :spellgood! ' .. w .. '<CR>' + let s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .')) + exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>' anoremenu 1.8 PopUp.-SpellSep- : + let &cpo = cpo_save endif endif - call cursor(0, curcol) # put the cursor back where it was - enddef + call cursor(0, curcol) " put the cursor back where it was + endfunc - def s:SpellReplace(n: number) - var l = getline('.') - # Move the cursor to the start of the word. + func s:SpellReplace(n) + let l = getline('.') + " Move the cursor to the start of the word. call spellbadword() - call setline('.', strpart(l, 0, col('.') - 1) .. s:suglist[n - 1] - \ .. strpart(l, col('.') + len(s:fromword) - 1)) - enddef - - def s:SpellDel() - exe "aunmenu PopUp." .. s:changeitem - exe "aunmenu PopUp." .. s:additem - exe "aunmenu PopUp." .. s:ignoreitem + call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1] + \ . strpart(l, col('.') + len(s:fromword) - 1)) + endfunc + + func s:SpellDel() + exe "aunmenu PopUp." . s:changeitem + exe "aunmenu PopUp." . s:additem + exe "aunmenu PopUp." . s:ignoreitem aunmenu PopUp.-SpellSep- - s:changeitem = '' - enddef + let s:changeitem = '' + endfun augroup SpellPopupMenu au! MenuPopup * call <SID>SpellPopup() @@ -1080,8 +1089,8 @@ if has("toolbar") cnoremenu 1.80 ToolBar.Copy <C-Y> nnoremenu 1.90 ToolBar.Paste "+gP cnoremenu ToolBar.Paste <C-R>+ - exe 'vnoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['v'] - exe 'inoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['i'] + exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v'] + exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i'] if !has("gui_athena") an 1.95 ToolBar.-sep3- <Nop> @@ -1099,7 +1108,7 @@ if has("toolbar") an 1.245 ToolBar.-sep6- <Nop> an 1.250 ToolBar.Make :make<CR> - an 1.270 ToolBar.RunCtags :exe "!" .. g:ctags_command<CR> + an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR> an 1.280 ToolBar.TagJump g<C-]> an 1.295 ToolBar.-sep7- <Nop> @@ -1136,23 +1145,22 @@ else endif " Select a session to load; default to current session name if present -def s:LoadVimSesn() - var name: string +fun! s:LoadVimSesn() if strlen(v:this_session) > 0 - name = fnameescape(v:this_session) + let name = s:FnameEscape(v:this_session) else - name = "Session.vim" + let name = "Session.vim" endif - execute "browse so " .. name -enddef + execute "browse so " . name +endfun " Select a session to save; default to current session name if present -def s:SaveVimSesn() +fun! s:SaveVimSesn() if strlen(v:this_session) == 0 - v:this_session = "Session.vim" + let v:this_session = "Session.vim" endif - execute "browse mksession! " .. fnameescape(v:this_session) -enddef + execute "browse mksession! " . s:FnameEscape(v:this_session) +endfun endif @@ -1165,7 +1173,7 @@ if !exists("did_install_syntax_menu") an 50.214 &Syntax.A&utomatic :syn on<CR> an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR> if !exists("*s:SynOnOff") - def s:SynOnOff() + fun s:SynOnOff() if has("syntax_items") syn clear else @@ -1174,7 +1182,7 @@ if !exists("did_install_syntax_menu") endif set syn=ON endif - enddef + endfun endif endif @@ -1201,9 +1209,6 @@ an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR> an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR> -" Uncomment the next line to compile the functions early to find any mistakes -" defcompile - endif " !exists("did_install_syntax_menu") " Restore the previous value of 'cpoptions'. |