blob: aa5c5bc1a8597d79c709ce349eeba11db6fbffe5 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" 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 <Bram@vim.org>
Bram Moolenaar3df01732017-02-17 22:47:16 +01005" Last Change: 2017 Feb 09
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
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, '\.[^.]*', "", "")
Bram Moolenaar05159a02005-02-26 23:04:13 +000057 exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000058
Bram Moolenaare2cc9702005-03-15 22:43:58 +000059 if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
Bram Moolenaar071d4272004-06-13 20:20:40 +000060 " On windows locale names are complicated, try using $LANG, it might
Bram Moolenaare2cc9702005-03-15 22:43:58 +000061 " have been set by set_init_1(). But don't do this for "en" or "en_us".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000062 " But don't match "slovak" when $LANG is "sl".
63 exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000064 endif
65 endif
66 endif
67endif
68
69
70" Help menu
71an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
72an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
73an 9999.30 &Help.&How-to\ links :help how-to<CR>
74an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
75an 9999.45 &Help.-sep1- <Nop>
76an 9999.50 &Help.&Credits :help credits<CR>
77an 9999.60 &Help.Co&pying :help copying<CR>
78an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
79an 9999.70 &Help.O&rphans :help kcc<CR>
80an 9999.75 &Help.-sep2- <Nop>
81an 9999.80 &Help.&Version :version<CR>
82an 9999.90 &Help.&About :intro<CR>
83
84fun! s:Helpfind()
85 if !exists("g:menutrans_help_dialog")
86 let g:menutrans_help_dialog = "Enter a command or word to find help on:\n\nPrepend i_ for Input mode commands (e.g.: i_CTRL-X)\nPrepend c_ for command-line editing commands (e.g.: c_<Del>)\nPrepend ' for an option name (e.g.: 'shiftwidth')"
87 endif
88 let h = inputdialog(g:menutrans_help_dialog)
89 if h != ""
90 let v:errmsg = ""
91 silent! exe "help " . h
92 if v:errmsg != ""
93 echo v:errmsg
94 endif
95 endif
96endfun
97
98" File menu
99an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
100an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
Bram Moolenaar5c8837f2006-02-25 21:52:33 +0000101an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew :browse tabnew<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
103an <silent> 10.330 &File.&Close<Tab>:close
Bram Moolenaarcab49df2011-03-22 17:40:10 +0100104 \ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105 \ confirm enew <Bar>
106 \ else <Bar>
107 \ confirm close <Bar>
108 \ endif<CR>
109an 10.335 &File.-SEP1- <Nop>
110an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
111an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
112
113if has("diff")
114 an 10.400 &File.-SEP2- <Nop>
115 an 10.410 &File.Split\ &Diff\ with\.\.\. :browse vert diffsplit<CR>
116 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
117endif
118
119if has("printer")
120 an 10.500 &File.-SEP3- <Nop>
121 an 10.510 &File.&Print :hardcopy<CR>
122 vunmenu &File.&Print
123 vnoremenu &File.&Print :hardcopy<CR>
124elseif has("unix")
125 an 10.500 &File.-SEP3- <Nop>
126 an 10.510 &File.&Print :w !lpr<CR>
127 vunmenu &File.&Print
128 vnoremenu &File.&Print :w !lpr<CR>
129endif
130an 10.600 &File.-SEP4- <Nop>
131an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
132an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
133
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134func! <SID>SelectAll()
Bram Moolenaara3e6bc92013-01-30 14:18:00 +0100135 exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136endfunc
137
Bram Moolenaaraba88572008-06-25 20:13:35 +0000138func! s:FnameEscape(fname)
139 if exists('*fnameescape')
140 return fnameescape(a:fname)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100141 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000142 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
143endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144
145" Edit menu
146an 20.310 &Edit.&Undo<Tab>u u
147an 20.320 &Edit.&Redo<Tab>^R <C-R>
148an 20.330 &Edit.Rep&eat<Tab>\. .
149
150an 20.335 &Edit.-SEP1- <Nop>
151vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
152vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
153cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
154nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
155cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000156exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
157exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
159inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
160nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
161inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
162if has("win32") || has("win16")
163 vnoremenu 20.390 &Edit.&Delete<Tab>x x
164endif
165noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
166inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
167cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
168
169an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar843ee412004-06-30 16:16:41 +0000170if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
172 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000173 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
175 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000176 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000177else
178 an 20.410 &Edit.&Find<Tab>/ /
179 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
180 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
181 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
182endif
183
184an 20.425 &Edit.-SEP3- <Nop>
185an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000186an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
187
188fun! s:EditVimrc()
189 if $MYVIMRC != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000190 let fname = $MYVIMRC
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200191 elseif has("win32")
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000192 if $HOME != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000193 let fname = $HOME . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000194 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000195 let fname = $VIM . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000196 endif
197 elseif has("amiga")
198 let fname = "s:.vimrc"
199 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000200 let fname = $HOME . "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000201 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000202 let fname = s:FnameEscape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000203 if &mod
204 exe "split " . fname
205 else
206 exe "edit " . fname
207 endif
208endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000210fun! s:FixFText()
211 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000212 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000213endfun
214
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215" Edit/Global Settings
216an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
217an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
218an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
219
220an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
221an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
222an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
223an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
224an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
225an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
226an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
227an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
228
229an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
230an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
231an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
232an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
233an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
234an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
235an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
236an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
237an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
238"
239" GUI options
240an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
241an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
242an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
243an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
244an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
245
246fun! s:SearchP()
247 if !exists("g:menutrans_path_dialog")
248 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
249 endif
250 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
251 if n != ""
252 let &path = substitute(n, ' ', '\\ ', 'g')
253 endif
254endfun
255
256fun! s:TagFiles()
257 if !exists("g:menutrans_tags_dialog")
258 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
259 endif
260 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
261 if n != ""
262 let &tags = substitute(n, ' ', '\\ ', 'g')
263 endif
264endfun
265
266fun! s:ToggleGuiOption(option)
267 " If a:option is already set in guioptions, then we want to remove it
268 if match(&guioptions, "\\C" . a:option) > -1
269 exec "set go-=" . a:option
270 else
271 exec "set go+=" . a:option
272 endif
273endfun
274
275" Edit/File Settings
276
277" Boolean options
278an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
Bram Moolenaar64486672010-05-16 15:46:46 +0200279an 20.440.105 &Edit.F&ile\ Settings.Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! :set rnu! rnu?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
281an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
282an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
283an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
284an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
285an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
286
287" other options
288an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
289an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
290an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
291an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
292an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
293an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
294an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
295
296an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
297an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
298an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
299an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
300an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
301an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
302
303an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
304an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
305fun! s:TextWidth()
306 if !exists("g:menutrans_textwidth_dialog")
307 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
308 endif
309 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
310 if n != ""
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200311 " Remove leading zeros to avoid it being used as an octal number.
312 " But keep a zero by itself.
313 let tw = substitute(n, "^0*", "", "")
314 let &tw = tw == '' ? 0 : tw
Bram Moolenaar071d4272004-06-13 20:20:40 +0000315 endif
316endfun
317
318fun! s:FileFormat()
319 if !exists("g:menutrans_fileformat_dialog")
320 let g:menutrans_fileformat_dialog = "Select format for writing the file"
321 endif
322 if !exists("g:menutrans_fileformat_choices")
323 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
324 endif
325 if &ff == "dos"
326 let def = 2
327 elseif &ff == "mac"
328 let def = 3
329 else
330 let def = 1
331 endif
332 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
333 if n == 1
334 set ff=unix
335 elseif n == 2
336 set ff=dos
337 elseif n == 3
338 set ff=mac
339 endif
340endfun
341
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200342
Bram Moolenaar071d4272004-06-13 20:20:40 +0000343" Setup the Edit.Color Scheme submenu
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200344
345" get NL separated string with file names
Bram Moolenaar071d4272004-06-13 20:20:40 +0000346let s:n = globpath(&runtimepath, "colors/*.vim")
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200347
348" split at NL, Ignore case for VMS and windows, sort on name
349let s:names = sort(map(split(s:n, "\n"), 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
350
351" define all the submenu entries
Bram Moolenaar071d4272004-06-13 20:20:40 +0000352let s:idx = 100
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200353for s:name in s:names
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000355 let s:idx = s:idx + 10
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200356endfor
357unlet s:name s:names s:n s:idx
358
Bram Moolenaar071d4272004-06-13 20:20:40 +0000359
360" Setup the Edit.Keymap submenu
361if has("keymap")
362 let s:n = globpath(&runtimepath, "keymap/*.vim")
363 if s:n != ""
364 let s:idx = 100
365 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
366 while strlen(s:n) > 0
367 let s:i = stridx(s:n, "\n")
368 if s:i < 0
369 let s:name = s:n
370 let s:n = ""
371 else
372 let s:name = strpart(s:n, 0, s:i)
373 let s:n = strpart(s:n, s:i + 1, 19999)
374 endif
375 " Ignore case for VMS and windows
376 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
377 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
378 unlet s:name
379 unlet s:i
380 let s:idx = s:idx + 10
381 endwhile
382 unlet s:idx
383 endif
384 unlet s:n
385endif
Bram Moolenaardfccaf02004-12-31 20:56:11 +0000386if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000387 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
388endif
389
390" Programming menu
391if !exists("g:ctags_command")
392 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000393 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000394 else
395 let g:ctags_command = "ctags -R ."
396 endif
397endif
398
399an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
400vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
401vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
402an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
403an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
404
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000405if has("folding") || has("spell")
406 an 40.330 &Tools.-SEP1- <Nop>
407endif
408
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000409" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000410if has("spell")
411 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
412 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
413 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
Bram Moolenaardc27ac12005-07-06 22:35:45 +0000414 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000415 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +0000416 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000417 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
418 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
419 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
420 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
421 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
422 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
423 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
424 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
425
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000426 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000427 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000428 for cmd in s:undo_spellang
429 exe "silent! " . cmd
430 endfor
431 let s:undo_spellang = []
432
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000433 if &enc == "iso-8859-15"
434 let enc = "latin1"
435 else
436 let enc = &enc
437 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000438
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200439 if !exists("g:menutrans_set_lang_to")
440 let g:menutrans_set_lang_to = 'Set language to'
441 endif
442
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000443 let found = 0
444 let s = globpath(&rtp, "spell/*." . enc . ".spl")
445 if s != ""
446 let n = 300
447 for f in split(s, "\n")
448 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000449 if nm != "en" && nm !~ '/'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200450 let _nm = nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000451 let found += 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200452 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000453 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
454 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000455 endif
456 let n += 10
457 endfor
458 endif
459 if found == 0
460 echomsg "Could not find other spell files"
461 elseif found == 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200462 echomsg "Found spell file " . _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000463 else
464 echomsg "Found " . found . " more spell files"
465 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000466 " Need to redo this when 'encoding' is changed.
467 augroup spellmenu
468 au! EncodingChanged * call <SID>SpellLang()
469 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000470 endfun
471
472endif
473
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474" Tools.Fold Menu
475if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000476 " open close folds
477 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
478 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
479 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
Bram Moolenaar822ff862014-06-12 21:46:14 +0200480 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx <C-O>zM<C-O>zx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000481 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
482 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
483 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100484 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000485 " fold method
486 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
487 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
488 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
489 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
490 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
491 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
492 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
493 " create and delete folds
494 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
495 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
496 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
497 " moving around in folds
498 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
499 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
500 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
501 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
502 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
503 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
504 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
505 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
506 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
507endif " has folding
508
509if has("diff")
510 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
511 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
512 vunmenu &Tools.&Diff.&Get\ Block
513 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
514 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
515 vunmenu &Tools.&Diff.&Put\ Block
516 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
517endif
518
519an 40.358 &Tools.-SEP2- <Nop>
520an 40.360 &Tools.&Make<Tab>:make :make<CR>
521an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
522an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
523an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
524an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
525an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
526an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
527an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
528an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
529an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
530
531an 40.520 &Tools.-SEP3- <Nop>
532an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
533 \ :call <SID>XxdConv()<CR>
534an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
535 \ :call <SID>XxdBack()<CR>
536
537" Use a function to do the conversion, so that it also works with 'insertmode'
538" set.
539func! s:XxdConv()
540 let mod = &mod
541 if has("vms")
542 %!mc vim:xxd
543 else
544 call s:XxdFind()
545 exe '%!"' . g:xxdprogram . '"'
546 endif
547 if getline(1) =~ "^0000000:" " only if it worked
548 set ft=xxd
549 endif
550 let &mod = mod
551endfun
552
553func! s:XxdBack()
554 let mod = &mod
555 if has("vms")
556 %!mc vim:xxd -r
557 else
558 call s:XxdFind()
559 exe '%!"' . g:xxdprogram . '" -r'
560 endif
561 set ft=
562 doautocmd filetypedetect BufReadPost
563 let &mod = mod
564endfun
565
566func! s:XxdFind()
567 if !exists("g:xxdprogram")
568 " On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200569 if has("win32") && !executable("xxd")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000570 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
571 else
572 let g:xxdprogram = "xxd"
573 endif
574 endif
575endfun
576
577" Setup the Tools.Compiler submenu
578let s:n = globpath(&runtimepath, "compiler/*.vim")
579let s:idx = 100
580while strlen(s:n) > 0
581 let s:i = stridx(s:n, "\n")
582 if s:i < 0
583 let s:name = s:n
584 let s:n = ""
585 else
586 let s:name = strpart(s:n, 0, s:i)
587 let s:n = strpart(s:n, s:i + 1, 19999)
588 endif
589 " Ignore case for VMS and windows
590 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000591 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000592 unlet s:name
593 unlet s:i
594 let s:idx = s:idx + 10
595endwhile
596unlet s:n
597unlet s:idx
598
599if !exists("no_buffers_menu")
600
601" Buffer list menu -- Setup functions & actions
602
603" wait with building the menu until after loading 'session' files. Makes
604" startup faster.
605let s:bmenu_wait = 1
606
607if !exists("bmenu_priority")
608 let bmenu_priority = 60
609endif
610
611func! s:BMAdd()
612 if s:bmenu_wait == 0
613 " when adding too many buffers, redraw in short format
614 if s:bmenu_count == &menuitems && s:bmenu_short == 0
615 call s:BMShow()
616 else
617 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
618 let s:bmenu_count = s:bmenu_count + 1
619 endif
620 endif
621endfunc
622
623func! s:BMRemove()
624 if s:bmenu_wait == 0
625 let name = expand("<afile>")
626 if isdirectory(name)
627 return
628 endif
629 let munge = <SID>BMMunge(name, expand("<abuf>"))
630
631 if s:bmenu_short == 0
632 exe 'silent! aun &Buffers.' . munge
633 else
634 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
635 endif
636 let s:bmenu_count = s:bmenu_count - 1
637 endif
638endfunc
639
640" Create the buffer menu (delete an existing one first).
641func! s:BMShow(...)
642 let s:bmenu_wait = 1
643 let s:bmenu_short = 1
644 let s:bmenu_count = 0
645 "
646 " get new priority, if exists
647 if a:0 == 1
648 let g:bmenu_priority = a:1
649 endif
650
651 " remove old menu, if exists; keep one entry to avoid a torn off menu to
652 " disappear.
653 silent! unmenu &Buffers
654 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
655 silent! unmenu! &Buffers
656
657 " create new menu; set 'cpo' to include the <CR>
658 let cpo_save = &cpo
659 set cpo&vim
660 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
661 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
662 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
663 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
664 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
665 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
666 let &cpo = cpo_save
667 unmenu &Buffers.Dummy
668
669 " figure out how many buffers there are
670 let buf = 1
671 while buf <= bufnr('$')
672 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000673 let s:bmenu_count = s:bmenu_count + 1
674 endif
675 let buf = buf + 1
676 endwhile
677 if s:bmenu_count <= &menuitems
678 let s:bmenu_short = 0
679 endif
680
681 " iterate through buffer list, adding each buffer to the menu:
682 let buf = 1
683 while buf <= bufnr('$')
684 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000685 call <SID>BMFilename(bufname(buf), buf)
686 endif
687 let buf = buf + 1
688 endwhile
689 let s:bmenu_wait = 0
690 aug buffer_list
691 au!
692 au BufCreate,BufFilePost * call <SID>BMAdd()
693 au BufDelete,BufFilePre * call <SID>BMRemove()
694 aug END
695endfunc
696
697func! s:BMHash(name)
698 " Make name all upper case, so that chars are between 32 and 96
699 let nm = substitute(a:name, ".*", '\U\0', "")
700 if has("ebcdic")
701 " HACK: Replace all non alphabetics with 'Z'
702 " Just to make it work for now.
703 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
704 let sp = char2nr('A') - 1
705 else
706 let sp = char2nr(' ')
707 endif
708 " convert first six chars into a number for sorting:
709 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)
710endfunc
711
712func! s:BMHash2(name)
713 let nm = substitute(a:name, ".", '\L\0', "")
714 " Not exactly right for EBCDIC...
715 if nm[0] < 'a' || nm[0] > 'z'
716 return '&others.'
717 elseif nm[0] <= 'd'
718 return '&abcd.'
719 elseif nm[0] <= 'h'
720 return '&efgh.'
721 elseif nm[0] <= 'l'
722 return '&ijkl.'
723 elseif nm[0] <= 'p'
724 return '&mnop.'
725 elseif nm[0] <= 't'
726 return '&qrst.'
727 else
728 return '&u-z.'
729 endif
730endfunc
731
732" insert a buffer name into the buffer menu:
733func! s:BMFilename(name, num)
734 if isdirectory(a:name)
735 return
736 endif
737 let munge = <SID>BMMunge(a:name, a:num)
738 let hash = <SID>BMHash(munge)
739 if s:bmenu_short == 0
740 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
741 else
742 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
743 endif
744 " set 'cpo' to include the <CR>
745 let cpo_save = &cpo
746 set cpo&vim
747 exe name . ' :confirm b' . a:num . '<CR>'
748 let &cpo = cpo_save
749endfunc
750
751" Truncate a long path to fit it in a menu item.
752if !exists("g:bmenu_max_pathlen")
753 let g:bmenu_max_pathlen = 35
754endif
755func! s:BMTruncName(fname)
756 let name = a:fname
757 if g:bmenu_max_pathlen < 5
758 let name = ""
759 else
760 let len = strlen(name)
761 if len > g:bmenu_max_pathlen
762 let amountl = (g:bmenu_max_pathlen / 2) - 2
763 let amountr = g:bmenu_max_pathlen - amountl - 3
764 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
765 let left = substitute(name, pattern, '\1', '')
766 let right = substitute(name, pattern, '\2', '')
767 if strlen(left) + strlen(right) < len
768 let name = left . '...' . right
769 endif
770 endif
771 endif
772 return name
773endfunc
774
775func! s:BMMunge(fname, bnum)
776 let name = a:fname
777 if name == ''
778 if !exists("g:menutrans_no_file")
779 let g:menutrans_no_file = "[No file]"
780 endif
781 let name = g:menutrans_no_file
782 else
783 let name = fnamemodify(name, ':p:~')
784 endif
785 " detach file name and separate it out:
786 let name2 = fnamemodify(name, ':t')
787 if a:bnum >= 0
788 let name2 = name2 . ' (' . a:bnum . ')'
789 endif
790 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
791 let name = escape(name, "\\. \t|")
792 let name = substitute(name, "&", "&&", "g")
793 let name = substitute(name, "\n", "^@", "g")
794 return name
795endfunc
796
797" When just starting Vim, load the buffer menu later
798if has("vim_starting")
799 augroup LoadBufferMenu
800 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
801 au VimEnter * au! LoadBufferMenu
802 augroup END
803else
804 call <SID>BMShow()
805endif
806
807endif " !exists("no_buffers_menu")
808
809" Window menu
810an 70.300 &Window.&New<Tab>^Wn <C-W>n
811an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
812an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
813an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
814if has("vertsplit")
815 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
816 if !exists("*MenuExplOpen")
817 fun MenuExplOpen()
818 if @% == ""
819 20vsp .
820 else
Bram Moolenaaraba88572008-06-25 20:13:35 +0000821 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000822 endif
823 endfun
824 endif
825endif
826an 70.335 &Window.-SEP1- <Nop>
827an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
828an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
829an 70.350 &Window.-SEP2- <Nop>
830an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
831an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
832an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
833an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
834an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
835an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
836an 70.365 &Window.-SEP3- <Nop>
837an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
838an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
839an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
840an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
841an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
842
843" The popup menu
844an 1.10 PopUp.&Undo u
845an 1.15 PopUp.-SEP1- <Nop>
846vnoremenu 1.20 PopUp.Cu&t "+x
847vnoremenu 1.30 PopUp.&Copy "+y
848cnoremenu 1.30 PopUp.&Copy <C-Y>
849nnoremenu 1.40 PopUp.&Paste "+gP
850cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000851exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
852exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000853vnoremenu 1.50 PopUp.&Delete x
854an 1.55 PopUp.-SEP2- <Nop>
855vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000856
857nnoremenu 1.70 PopUp.Select\ &Word vaw
858onoremenu 1.70 PopUp.Select\ &Word aw
859vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
860inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
861cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
862
863nnoremenu 1.73 PopUp.Select\ &Sentence vas
864onoremenu 1.73 PopUp.Select\ &Sentence as
865vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
866inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
867cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
868
869nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
870onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
871vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
872inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
873cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
874
875nnoremenu 1.80 PopUp.Select\ &Line V
876onoremenu 1.80 PopUp.Select\ &Line <C-C>V
877vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
878inoremenu 1.80 PopUp.Select\ &Line <C-O>V
879cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
880
881nnoremenu 1.90 PopUp.Select\ &Block <C-V>
882onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
883vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
884inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
885cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
886
Bram Moolenaar071d4272004-06-13 20:20:40 +0000887noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
888inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
889cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
890
Bram Moolenaar45360022005-07-21 21:08:21 +0000891if has("spell")
892 " Spell suggestions in the popup menu. Note that this will slow down the
893 " appearance of the menu!
894 func! <SID>SpellPopup()
895 if exists("s:changeitem") && s:changeitem != ''
896 call <SID>SpellDel()
897 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000898
899 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000900 if !&spell || &spelllang == ''
901 return
902 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000903
904 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000905 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000906 if col('.') > curcol " don't use word after the cursor
907 let w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000908 endif
909 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000910 if a == 'caps'
911 let s:suglist = [substitute(w, '.*', '\u&', '')]
912 else
913 let s:suglist = spellsuggest(w, 10)
914 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200915 if len(s:suglist) > 0
Bram Moolenaar45360022005-07-21 21:08:21 +0000916 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
917 let s:fromword = w
918 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +0200919 " set 'cpo' to include the <CR>
920 let cpo_save = &cpo
921 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +0000922 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000923 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000924 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
925 let pri += 1
926 endfor
927
928 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000929 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000930
931 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000932 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000933
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000934 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +0200935 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +0000936 endif
937 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200938 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +0000939 endfunc
940
941 func! <SID>SpellReplace(n)
942 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +0200943 " Move the cursor to the start of the word.
944 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000945 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
946 \ . strpart(l, col('.') + len(s:fromword) - 1))
947 endfunc
948
949 func! <SID>SpellDel()
950 exe "aunmenu PopUp." . s:changeitem
951 exe "aunmenu PopUp." . s:additem
952 exe "aunmenu PopUp." . s:ignoreitem
953 aunmenu PopUp.-SpellSep-
954 let s:changeitem = ''
955 endfun
956
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000957 augroup SpellPopupMenu
958 au! MenuPopup * call <SID>SpellPopup()
959 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +0000960endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000961
962" The GUI toolbar (for MS-Windows and GTK)
963if has("toolbar")
964 an 1.10 ToolBar.Open :browse confirm e<CR>
965 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
966 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
967
968 if has("printer")
969 an 1.40 ToolBar.Print :hardcopy<CR>
970 vunmenu ToolBar.Print
971 vnoremenu ToolBar.Print :hardcopy<CR>
972 elseif has("unix")
973 an 1.40 ToolBar.Print :w !lpr<CR>
974 vunmenu ToolBar.Print
975 vnoremenu ToolBar.Print :w !lpr<CR>
976 endif
977
978 an 1.45 ToolBar.-sep1- <Nop>
979 an 1.50 ToolBar.Undo u
980 an 1.60 ToolBar.Redo <C-R>
981
982 an 1.65 ToolBar.-sep2- <Nop>
983 vnoremenu 1.70 ToolBar.Cut "+x
984 vnoremenu 1.80 ToolBar.Copy "+y
985 cnoremenu 1.80 ToolBar.Copy <C-Y>
986 nnoremenu 1.90 ToolBar.Paste "+gP
987 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000988 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
989 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000990
991 if !has("gui_athena")
992 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000993 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000994 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000995 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000996 an 1.110 ToolBar.FindNext n
997 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000998 endif
999
Bram Moolenaar071d4272004-06-13 20:20:40 +00001000 an 1.215 ToolBar.-sep5- <Nop>
1001 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1002 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1003 an 1.240 ToolBar.RunScript :browse so<CR>
1004
1005 an 1.245 ToolBar.-sep6- <Nop>
1006 an 1.250 ToolBar.Make :make<CR>
1007 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1008 an 1.280 ToolBar.TagJump g<C-]>
1009
1010 an 1.295 ToolBar.-sep7- <Nop>
1011 an 1.300 ToolBar.Help :help<CR>
1012 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1013
1014" Only set the tooltips here if not done in a language menu file
1015if exists("*Do_toolbar_tmenu")
1016 call Do_toolbar_tmenu()
1017else
1018 let did_toolbar_tmenu = 1
1019 tmenu ToolBar.Open Open file
1020 tmenu ToolBar.Save Save current file
1021 tmenu ToolBar.SaveAll Save all files
1022 tmenu ToolBar.Print Print
1023 tmenu ToolBar.Undo Undo
1024 tmenu ToolBar.Redo Redo
1025 tmenu ToolBar.Cut Cut to clipboard
1026 tmenu ToolBar.Copy Copy to clipboard
1027 tmenu ToolBar.Paste Paste from Clipboard
1028 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001029 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001030 tmenu ToolBar.FindNext Find Next
1031 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001032 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001033 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001034 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001035 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001036 tmenu ToolBar.Make Make current project (:make)
1037 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001038 tmenu ToolBar.TagJump Jump to tag under cursor
1039 tmenu ToolBar.Help Vim Help
1040 tmenu ToolBar.FindHelp Search Vim Help
1041endif
1042
1043" Select a session to load; default to current session name if present
1044fun! s:LoadVimSesn()
1045 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001046 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001047 else
1048 let name = "Session.vim"
1049 endif
1050 execute "browse so " . name
1051endfun
1052
1053" Select a session to save; default to current session name if present
1054fun! s:SaveVimSesn()
1055 if strlen(v:this_session) == 0
1056 let v:this_session = "Session.vim"
1057 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001058 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001059endfun
1060
1061endif
1062
1063endif " !exists("did_install_default_menus")
1064
1065" Define these items always, so that syntax can be switched on when it wasn't.
1066" But skip them when the Syntax menu was disabled by the user.
1067if !exists("did_install_syntax_menu")
1068 an 50.212 &Syntax.&Manual :syn manual<CR>
1069 an 50.214 &Syntax.A&utomatic :syn on<CR>
1070 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1071 if !exists("*s:SynOnOff")
1072 fun s:SynOnOff()
1073 if has("syntax_items")
1074 syn clear
1075 else
1076 if !exists("g:syntax_on")
1077 syn manual
1078 endif
1079 set syn=ON
1080 endif
1081 endfun
1082 endif
1083endif
1084
1085
1086" Install the Syntax menu only when filetype.vim has been loaded or when
1087" manual syntax highlighting is enabled.
1088" Avoid installing the Syntax menu twice.
1089if (exists("did_load_filetypes") || exists("syntax_on"))
1090 \ && !exists("did_install_syntax_menu")
1091 let did_install_syntax_menu = 1
1092
1093" Skip setting up the individual syntax selection menus unless
1094" do_syntax_sel_menu is defined (it takes quite a bit of time).
1095if exists("do_syntax_sel_menu")
1096 runtime! synmenu.vim
1097else
1098 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>
1099 an 50.195 &Syntax.-SEP1- <Nop>
1100endif
1101
1102an 50.210 &Syntax.&Off :syn off<CR>
1103an 50.700 &Syntax.-SEP3- <Nop>
1104an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1105an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1106an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1107
1108endif " !exists("did_install_syntax_menu")
1109
Bram Moolenaar071d4272004-06-13 20:20:40 +00001110" Restore the previous value of 'cpoptions'.
1111let &cpo = s:cpo_save
1112unlet s:cpo_save
1113
1114" vim: set sw=2 :