1*gui.txt* For Vim version 7.0aa. Last change: 2004 Jun 15 2 3 4 VIM REFERENCE MANUAL by Bram Moolenaar 5 6 7Vim's Graphical User Interface *gui* *GUI* 8 91. Starting the GUI |gui-start| 102. Scrollbars |gui-scrollbars| 113. Mouse Control |gui-mouse| 124. Making GUI Selections |gui-selections| 135. Menus |menus| 146. Extras |gui-extras| 157. Shell Commands |gui-shell| 16 17Other GUI documentation: 18|gui_x11.txt| For specific items of the X11 GUI. 19|gui_w32.txt| For specific items of the Win32 GUI. 20 21{Vi does not have any of these commands} 22 23============================================================================== 241. Starting the GUI *gui-start* *E229* *E233* 25 26First you must make sure you actually have a version of Vim with the GUI code 27included. You can check this with the ":version" command, it should include 28"+GUI_Athena", "+GUI_BeOS", "+GUI_GTK", "+GUI_KDE", "+GUI_Motif" or 29"MS-Windows ... bit GUI version". 30 31How to start the GUI depends on the system used. Mostly you can run the 32GUI version of Vim with: 33 gvim [options] [files...] 34 35The X11 version of Vim can run both in GUI and in non-GUI mode. See 36|gui-x11-start|. 37 38 *gui-init* *gvimrc* *.gvimrc* *_gvimrc* 39When the GUI starts up initializations are carried out, in this order: 40- The termcap options are reset to their default value for the GUI. 41- If the system menu file exists, it is sourced. The name of this file is 42 normally "$VIMRUNTIME/menu.vim". You can check this with ":version". Also 43 see |$VIMRUNTIME|. To skip loading the system menu include 'M' in 44 'guioptions'. *buffers-menu* *no_buffers_menu* 45 The system menu file includes a "Buffers" menu. If you don't want this, set 46 the "no_buffers_menu" variable in your .vimrc (not .gvimrc!): > 47 :let no_buffers_menu = 1 48< NOTE: Switching on syntax highlighting also loads the menu file, thus 49 disabling the Buffers menu must be done before ":syntax on". 50 The path names are truncated to 35 characters. You can truncate them at a 51 different length, for example 50, like this: > 52 :let bmenu_max_pathlen = 50 53- If the "-U {gvimrc}" command-line option has been used when starting Vim, 54 the {gvimrc} file will be read for initializations. The following 55 initializations are skipped. 56- For Unix and MS-Windows, if the system gvimrc exists, it is sourced. The 57 name of this file is normally "$VIM/gvimrc". You can check this with 58 ":version". Also see |$VIM|. 59- The following are tried, and only the first one that exists is used: 60 - If the GVIMINIT environment variable exists and is not empty, it is 61 executed as an Ex command. 62 - If the user gvimrc file exists, it is sourced. The name of this file is 63 normally "$HOME/.gvimrc". You can check this with ":version". 64 - For Win32, when $HOME is not set, "$VIM\_gvimrc" is used. 65 - When a "_gvimrc" file is not found, ".gvimrc" is tried too. And vice 66 versa. 67- If the 'exrc' option is set (which is NOT the default) the file ./.gvimrc 68 is sourced, if it exists and isn't the same file as the system or user 69 gvimrc file. If this file is not owned by you, some security restrictions 70 apply. When ".gvimrc" is not found, "_gvimrc" is tried too. For Macintosh 71 and DOS/Win32 "_gvimrc" is tried first. 72 73NOTE: All but the first one are not carried out if Vim was started with 74"-u NONE" and no "-U" argument was given, or when started with "-U NONE". 75 76All this happens AFTER the normal Vim initializations, like reading your 77.vimrc file. See |initialization|. 78But the GUI window is only opened after all the initializations have been 79carried out. If you want some commands to be executed just after opening the 80GUI window, use the |GUIEnter| autocommand event. Example: > 81 :autocommand GUIEnter * winpos 100 50 82 83You can use the gvimrc files to set up your own customized menus (see |:menu|) 84and initialize other things that you may want to set up differently from the 85terminal version. 86 87Recommended place for your personal GUI initializations: 88 Unix $HOME/.gvimrc 89 OS/2 $HOME/.gvimrc or $VIM/.gvimrc 90 MS-DOS and Win32 $HOME/_gvimrc or $VIM/_gvimrc 91 Amiga s:.gvimrc or $VIM/.gvimrc 92 93There are a number of options which only have meaning in the GUI version of 94Vim. These are 'guicursor', 'guifont', 'guipty' and 'guioptions'. They are 95documented in |options.txt| with all the other options. 96 97If using the Motif or Athena version of the GUI (but not for the KDE, GTK+ or 98Win32 version), a number of X resources are available. See |gui-resources|. 99 100Another way to set the colors for different occasions is with highlight 101groups. The "Normal" group is used to set the background and foreground 102colors. Example (which looks nice): > 103 104 :highlight Normal guibg=grey90 105 106The "guibg" and "guifg" settings override the normal background and 107foreground settings. The other settings for the Normal highlight group are 108not used. Use the 'guifont' option to set the font. 109 110Also check out the 'guicursor' option, to set the colors for the cursor in 111various modes. 112 113Vim tries to make the window fit on the screen when it starts up. This avoids 114that you can't see part of it. On the X Window System this requires a bit of 115guesswork. You can change the height that is used for the window title and a 116task bar with the 'guiheadroom' option. 117 118 *:winp* *:winpos* *E188* 119:winp[os] 120 Display current position of the top left corner of the GUI vim 121 window in pixels. Does not work in all versions. 122 123:winp[os] {X} {Y} *E466* 124 Put the GUI vim window at the given {X} and {Y} coordinates. 125 The coordinates should specify the position in pixels of the 126 top left corner of the window. Does not work in all versions. 127 Does work in an (new) xterm |xterm-color|. 128 When the GUI window has not been opened yet, the values are 129 remembered until the window is opened. The position is 130 adjusted to make the window fit on the screen (if possible). 131 132 *:win* *:winsize* *E465* 133:win[size] {width} {height} 134 Set the window height to {width} by {height} characters. 135 Obsolete, use ":set lines=11 columns=22". 136 If you get less lines than expected, check the 'guiheadroom' 137 option. 138 139If you are running the X Window System, you can get information about the 140window Vim is running in with this command: > 141 :!xwininfo -id $WINDOWID 142 143============================================================================== 1442. Scrollbars *gui-scrollbars* 145 146There are vertical scrollbars and a horizontal scrollbars. You may 147configure which ones appear with the 'guioptions' option. 148 149The interface looks like this (with ":set guioptions=mlrb"): 150 151 +------------------------------+ 152 | File Edit Help | <- Menu bar (m) 153 +-+--------------------------+-+ 154 |^| |^| 155 |#| Text area. |#| 156 | | | | 157 |v|__________________________|v| 158 Normal status line -> |-+ File.c 5,2 +-| 159 between Vim windows |^|""""""""""""""""""""""""""|^| 160 | | | | 161 | | Another file buffer. | | 162 | | | | 163 |#| |#| 164 Left scrollbar (l) -> |#| |#| <- Right 165 |#| |#| scrollbar (r) 166 | | | | 167 |v| |v| 168 +-+--------------------------+-+ 169 | |< #### >| | <- Bottom 170 +-+--------------------------+-+ scrollbar (b) 171 172Any of the scrollbar or menu components may be turned off by not putting the 173appropriate letter in the 'guioptions' string. The bottom scrollbar is 174only useful when 'nowrap' is set. 175 176 177VERTICAL SCROLLBARS *gui-vert-scroll* 178 179Each Vim window has a scrollbar next to it which may be scrolled up and down 180to move through the text in that buffer. The size of the scrollbar-thumb 181indicates the fraction of the buffer which can be seen in the window. 182When the scrollbar is dragged all the way down, the last line of the file 183will appear in the top of the window. 184 185If a window is shrunk to zero height (by the growth of another window) its 186scrollbar disappears. It reappears when the window is restored. 187 188If a window is vertically split, it will get a scrollbar when it is the 189current window and when, taking the middle of the current window and drawing a 190vertical line, this line goes through the window. 191When there are scrollbars on both sides, and the middle of the current window 192is on the left half, the right scrollbar column will contain scrollbars for 193the rightmost windows. The same happens on the other side. 194 195 196HORIZONTAL SCROLLBARS *gui-horiz-scroll* 197 198The horizontal scrollbar (at the bottom of the Vim GUI) may be used to 199scroll text sideways when the 'wrap' option is turned off. The 200scrollbar-thumb size is such that the text of the longest visible line may be 201scrolled as far as possible left and right. The cursor is moved when 202necessary, it must remain on a visible character (unless 'virtualedit' is 203set). 204 205Computing the length of the longest visible takes quite a bit of computation, 206and it has to be done every time something changes. If this takes too much 207time or you don't like the cursor jumping to another line, include the 'h' 208flag in 'guioptions'. Then the scrolling is limited by the text of the 209current cursor line. 210 211 *athena-intellimouse* 212If you have an Intellimouse and an X server that supports using the wheel, 213then you can use the wheel to scroll the text up and down in gvim. This works 214with XFree86 4.0 and later, and with some older versions when you add patches. 215See |scroll-mouse-wheel|. 216 217For older versions of XFree86 you must patch your X server. The following 218page has a bit of information about using the Intellimouse on Linux as well as 219links to the patches and X server binaries (may not have the one you need 220though): 221 http://www.inria.fr/koala/colas/mouse-wheel-scroll/ 222 223============================================================================== 2243. Mouse Control *gui-mouse* 225 226The mouse only works if the appropriate flag in the 'mouse' option is set. 227When the GUI is switched on, and 'mouse' wasn't set yet, the 'mouse' option is 228automatically set to "a", enabling it for all modes except for the 229|hit-enter| prompt. If you don't want this, a good place to change the 230'mouse' option is the "gvimrc" file. 231 232Other options that are relevant: 233'mousefocus' window focus follows mouse pointer |gui-mouse-focus| 234'mousemodel' what mouse button does which action 235'mousehide' hide mouse pointer while typing text 236'selectmode' whether to start Select mode or Visual mode 237 238A quick way to set these is with the ":behave" command. 239 *:behave* *:be* 240:be[have] {model} Set behavior for mouse and selection. Valid 241 arguments are: 242 mswin MS-Windows behavior 243 xterm Xterm behavior 244 245 Using ":behave" changes these options: 246 option mswin xterm ~ 247 'selectmode' "mouse,key" "" 248 'mousemodel' "popup" "extend" 249 'keymodel' "startsel,stopsel" "" 250 'selection' "exclusive" "inclusive" 251 252In the $VIMRUNTIME directory, there is a script called |mswin.vim|, which will 253also map a few keys to the MS-Windows cut/copy/paste commands. This is NOT 254compatible, since it uses the CTRL-V, CTRL-X and CTRL-C keys. If you don't 255mind, use this command: > 256 :so $VIMRUNTIME/mswin.vim 257 258For scrolling with a wheel on a mouse, see |scroll-mouse-wheel|. 259 260 2613.1 Moving Cursor with Mouse *gui-mouse-move* 262 263Click the left mouse button somewhere in a text buffer where you want the 264cursor to go, and it does! 265This works in when 'mouse' contains ~ 266Normal mode 'n' or 'a' 267Visual mode 'v' or 'a' 268Insert mode 'i' or 'a' 269 270Select mode is handled like Visual mode. 271 272You may use this with an operator such as 'd' to delete text from the current 273cursor position to the position you point to with the mouse. That is, you hit 274'd' and then click the mouse somewhere. 275 276 *gui-mouse-focus* 277The 'mousefocus' option can be set to make the keyboard focus follow the 278mouse pointer. This means that the window where the mouse pointer is, is the 279active window. Warning: this doesn't work very well when using a menu, 280because the menu command will always be applied to the top window. 281 282If you are on the ':' line (or '/' or '?'), then clicking the left or right 283mouse button will position the cursor on the ':' line (if 'mouse' contains 284'c', 'a' or 'A'). 285 286In any situation the middle mouse button may be clicked to paste the current 287selection. 288 289 2903.2 Selection with Mouse *gui-mouse-select* 291 292The mouse can be used to start a selection. How depends on the 'mousemodel' 293option: 294'mousemodel' is "extend": use the right mouse button 295'mousemodel' is "popup": use the left mouse button, while keeping the Shift 296key pressed. 297 298If there was no selection yet, this starts a selection from the old cursor 299position to the position pointed to with the mouse. If there already is a 300selection then the closest end will be extended. 301 302If 'selectmode' contains "mouse", then the selection will be in Select mode. 303This means that typing normal text will replace the selection. See 304|Select-mode|. Otherwise, the selection will be in Visual mode. 305 306Double clicking may be done to make the selection word-wise, triple clicking 307makes it line-wise, and quadruple clicking makes it rectangular block-wise. 308 309See |gui-selections| on how the selection is used. 310 311 3123.3 Other Text Selection with Mouse *gui-mouse-modeless* 313 *modeless-selection* 314A different kind of selection is used when: 315- in Command-line mode 316- in the Command-line window and pointing in another window 317- at the |hit-enter| prompt 318- whenever the current mode is not in the 'mouse' option 319- when holding the CTRL and SHIFT keys in the GUI 320Since Vim continues like the selection isn't there, and there is no mode 321associated with the selection, this is called modeless selection. Any text in 322the Vim window can be selected. Select the text by pressing the left mouse 323button at the start, drag to the end and release. To extend the selection, 324use the right mouse button when 'mousemodel' is "extend", or the left mouse 325button with the shift key pressed when 'mousemodel' is "popup". 326The middle mouse button pastes the text. 327The selection is removed when the selected text is scrolled or changed. 328On the command line CTRL-Y can be used to copy the selection into the 329clipboard. To do this from Insert mode, use CTRL-O : CTRL-Y <CR>. 330 331 3323.4 Using Mouse on Status Lines *gui-mouse-status* 333 334Clicking the left or right mouse button on the status line below a Vim 335window makes that window the current window. This actually happens on button 336release (to be able to distinguish a click from a drag action). 337 338With the left mouse button a status line can be dragged up and down, thus 339resizing the windows above and below it. This does not change window focus. 340 341The same can be used on the vertical separator: click to give the window left 342of it focus, drag left and right to make windows wider and narrower. 343 344 3453.5 Various Mouse Clicks *gui-mouse-various* 346 347 <S-LeftMouse> Search forward for the word under the mouse click. 348 When 'mousemodel' is "popup" this starts or extends a 349 selection. 350 <S-RightMouse> Search backward for the word under the mouse click. 351 <C-LeftMouse> Jump to the tag name under the mouse click. 352 <C-RightMouse> Jump back to position before the previous tag jump 353 (same as "CTRL-T") 354 355 3563.6 Mouse Mappings *gui-mouse-mapping* 357 358The mouse events, complete with modifiers, may be mapped. Eg: > 359 :map <S-LeftMouse> <RightMouse> 360 :map <S-LeftDrag> <RightDrag> 361 :map <S-LeftRelease> <RightRelease> 362 :map <2-S-LeftMouse> <2-RightMouse> 363 :map <2-S-LeftDrag> <2-RightDrag> 364 :map <2-S-LeftRelease> <2-RightRelease> 365 :map <3-S-LeftMouse> <3-RightMouse> 366 :map <3-S-LeftDrag> <3-RightDrag> 367 :map <3-S-LeftRelease> <3-RightRelease> 368 :map <4-S-LeftMouse> <4-RightMouse> 369 :map <4-S-LeftDrag> <4-RightDrag> 370 :map <4-S-LeftRelease> <4-RightRelease> 371These mappings make selection work the way it probably should in a Motif 372application, with shift-left mouse allowing for extending the visual area 373rather than the right mouse button. 374 375Mouse mapping with modifiers does not work for modeless selection. 376 377 3783.7 Drag and drop *drag-n-drop* 379 380You can drag and drop one or more files into the Vim window, where they will 381be opened as if a |:drop| command was used. 382 383If you hold down Shift while doing this, Vim changes to the first dropped 384file's directory. If you hold Ctrl Vim will always split a new window for the 385file. Otherwise it's only done if the current buffer has been changed. 386 387You can also drop a directory on Vim. This starts the explorer plugin for 388that directory (assuming it was enabled, otherwise you'll get an error 389message). Keep Shift pressed to change to the directory instead. 390 391If Vim happens to be editing a command line, the names of the dropped files 392and directories will be inserted at the cursor. This allows you to use these 393names with any Ex command. Special characters (space, tab, double quote and 394'|'; backslash on non-MS-Windows systems) will be escaped. 395 396============================================================================== 3974. Making GUI Selections *gui-selections* 398 399 *quotestar* 400You may make selections with the mouse (see |gui-mouse-select|), or by using 401Vim's Visual mode (see |v|). If 'a' is present in 'guioptions', then 402whenever a selection is started (Visual or Select mode), or when the selection 403is changed, Vim becomes the owner of the windowing system's primary selection 404(on MS-Windows the |gui-clipboard| is used; under X11, the |x11-selection| is 405used - you should read whichever of these is appropriate now). 406 407 *clipboard* 408There is a special register for storing this selection, it is the "* 409register. Nothing is put in here unless the information about what text is 410selected is about to change (eg with a left mouse click somewhere), or when 411another application wants to paste the selected text. Then the text is put 412in the "* register. For example, to cut a line and make it the current 413selection/put it on the clipboard: > 414 415 "*dd 416 417Similarly, when you want to paste a selection from another application, e.g., 418by clicking the middle mouse button, the selection is put in the "* register 419first, and then 'put' like any other register. For example, to put the 420selection (contents of the clipboard): > 421 422 "*p 423 424When using this register under X11, also see |x11-selection|. This also 425explains the related "+ register. 426 427Note that when pasting text from one Vim into another separate Vim, the type 428of selection (character, line, or block) will also be copied. For other 429applications the type is always character. However, if the text gets 430transferred via the |x11-cut-buffer|, the selection type is ALWAYS lost. 431 432When the "unnamed" string is included in the 'clipboard' option, the unnamed 433register is the same as the "* register. Thus you can yank to and paste the 434selection without prepending "* to commands. 435 436============================================================================== 4375. Menus *menus* 438 439For an introduction see |usr_42.txt| in the user manual. 440 441 4425.1 Using Menus *using-menus* 443 444Basically, menus can be used just like mappings. You can define your own 445menus, as many as you like. 446Long-time Vim users won't use menus much. But the power is in adding your own 447menus and menu items. They are most useful for things that you can't remember 448what the key sequence was. 449 450For creating menus in a different language, see |:menutrans|. 451 452 *menu.vim* 453The default menus are read from the file "$VIMRUNTIME/menu.vim". See 454|$VIMRUNTIME| for where the path comes from. You can set up your own menus. 455Starting off with the default set is a good idea. You can add more items, or, 456if you don't like the defaults at all, start with removing all menus 457|:unmenu-all|. You can also avoid the default menus being loaded by adding 458this line to your .vimrc file (NOT your .gvimrc file!): > 459 :let did_install_default_menus = 1 460If you also want to avoid the Syntax menu: > 461 :let did_install_syntax_menu = 1 462If you do want the Syntax menu but not all the entries for each available 463syntax file (which take quite a bit of time to load): > 464 :let skip_syntax_sel_menu = 1 465< 466 *console-menus* 467Although this documentation is in the GUI section, you can actually use menus 468in console mode too. You will have to load |menu.vim| explicitly then, it is 469not done by default. You can use the |:emenu| command and command-line 470completion with 'wildmenu' to access the menu entries almost like a real menu 471system. To do this, put these commands in your .vimrc file: > 472 :source $VIMRUNTIME/menu.vim 473 :set wildmenu 474 :set cpo-=< 475 :set wcm=<C-Z> 476 :map <F4> :emenu <C-Z> 477Pressing <F4> will start the menu. You can now use the cursor keys to select 478a menu entry. Hit <Enter> to execute it. Hit <Esc> if you want to cancel. 479This does require the |+menu| feature enabled at compile time. 480 481 *tear-off-menus* 482KDE, GTK+ and Motif support Tear-off menus. These are sort of sticky menus or 483pop-up menus that are present all the time. If the resizing does not work 484correctly, this may be caused by using something like "Vim*geometry" in the 485defaults. Use "Vim.geometry" instead. 486 487The Win32 GUI version emulates Motif's tear-off menus. Actually, a Motif user 488will spot the differences easily, but hopefully they're just as useful. You 489can also use the |:tearoff| command together with |hidden-menus| to create 490floating menus that do not appear on the main menu bar. 491 492 4935.2 Creating New Menus *creating-menus* 494 495 *:me* *:menu* *:noreme* *:noremenu* 496 *:am* *:amenu* *:an* *:anoremenu* 497 *:nme* *:nmenu* *:nnoreme* *:nnoremenu* 498 *:ome* *:omenu* *:onoreme* *:onoremenu* 499 *:vme* *:vmenu* *:vnoreme* *:vnoremenu* 500 *:ime* *:imenu* *:inoreme* *:inoremenu* 501 *:cme* *:cmenu* *:cnoreme* *:cnoremenu* 502 *E330* *E327* *E331* *E336* *E333* 503 *E328* *E329* *E337* 504To create a new menu item, use the ":menu" commands. They are mostly like 505the ":map" set of commands but the first argument is a menu item name, given 506as a path of menus and submenus with a '.' between them. eg: > 507 508 :menu File.Save :w<CR> 509 :inoremenu File.Save <C-O>:w<CR> 510 :menu Edit.Big\ Changes.Delete\ All\ Spaces :%s/[ ^I]//g<CR> 511 512This last one will create a new item in the menu bar called "Edit", holding 513the mouse button down on this will pop up a menu containing the item 514"Big Changes", which is a sub-menu containing the item "Delete All Spaces", 515which when selected, performs the operation. 516 517Special characters in a menu name: 518 519 & The next character is the shortcut key. Make sure each 520 shortcut key is only used once in a (sub)menu. If you want to 521 insert a literal "&" in the menu name use "&&". 522 <Tab> Separates the menu name from right-aligned text. This can be 523 used to show the equivalent typed command. The text "<Tab>" 524 can be used here for convenience. If you are using a real 525 Tab, don't forget to put a backslash before it! 526Example: > 527 528 :amenu &File.&Open<Tab>:e :browse e<CR> 529 530[typed literally] 531With the shortcut "F" (while keeping the <Alt> key pressed), and then "O", 532this menu can be used. The second part is shown as "Open :e". The ":e" 533is right aligned, and the "O" is underlined, to indicate it is the shortcut. 534 535The ":amenu" command can be used to define menu entries for all modes at once. 536To make the command work correctly, a character is automatically inserted for 537some modes: 538 mode inserted appended ~ 539 Normal nothing nothing 540 Visual <C-C> <C-\><C-G> 541 Insert <C-O> 542 Cmdline <C-C> <C-\><C-G> 543 Op-pending <C-C> <C-\><C-G> 544 545Appending CTRL-\ CTRL-G is for going back to insert mode when 'insertmode' is 546set. |CTRL-\_CTRL-G| 547 548Example: > 549 550 :amenu File.Next :next^M 551 552is equal to: > 553 554 :nmenu File.Next :next^M 555 :vmenu File.Next ^C:next^M^\^G 556 :imenu File.Next ^O:next^M 557 :cmenu File.Next ^C:next^M^\^G 558 :omenu File.Next ^C:next^M^\^G 559 560Careful: In Insert mode this only works for a SINGLE Normal mode command, 561because of the CTRL-O. If you have two or more commands, you will need to use 562the ":imenu" command. For inserting text in any mode, you can use the 563expression register: > 564 565 :amenu Insert.foobar "='foobar'<CR>P 566 567Note that the '<' and 'k' flags in 'cpoptions' also apply here (when 568included they make the <> form and raw key codes not being recognized). 569 570Note that <Esc> in Cmdline mode executes the command, like in a mapping. This 571is Vi compatible. Use CTRL-C to quit Cmdline mode. 572 573 *:menu-<silent>* *:menu-silent* 574To define a menu which will not be echoed on the command line, add 575"<silent>" as the first argument. Example: > 576 :menu <silent> Settings.Ignore\ case :set ic<CR> 577The ":set ic" will not be echoed when using this menu. Messages from the 578executed command are still given though. To shut them up too, add a ":silent" 579in the executed command: > 580 :menu <silent> Search.Header :exe ":silent normal /Header\r"<CR> 581< 582 *:menu-<script>* *:menu-script* 583The "to" part of the menu will be inspected for mappings. If you don't want 584this, use the ":noremenu" command (or the similar one for a specific mode). 585If you do want to use script-local mappings, add "<script>" as the very first 586argument to the ":menu" command or after "<silent>". 587 588 *menu-priority* 589You can give a priority to a menu. Menus with a higher priority go more to 590the right. The priority is given as a number before the ":menu" command. 591Example: > 592 :80menu Buffer.next :bn<CR> 593 594The default menus have these priorities: 595 File 10 596 Edit 20 597 Tools 40 598 Syntax 50 599 Buffers 60 600 Window 70 601 Help 9999 602 603When no or zero priority is given, 500 is used. 604The priority for the PopUp menu is not used. 605 606The Help menu will be placed on the far right side of the menu bar on systems 607which support this (Motif and GTK+). For GTK+ 2, this is not done anymore 608because right-aligning the Help menu is now discouraged UI design. 609 610You can use a priority higher than 9999, to make it go after the Help menu, 611but that is non-standard and is discouraged. The highest possible priority is 612about 32000. The lowest is 1. 613 614 *sub-menu-priority* 615The same mechanism can be used to position a sub-menu. The priority is then 616given as a dot-separated list of priorities, before the menu name: > 617 :menu 80.500 Buffer.next :bn<CR> 618Giving the sub-menu priority is only needed when the item is not to be put 619in a normal position. For example, to put a sub-menu before the other items: > 620 :menu 80.100 Buffer.first :brew<CR> 621Or to put a sub-menu after the other items, and further items with default 622priority will be put before it: > 623 :menu 80.900 Buffer.last :blast<CR> 624When a number is missing, the default value 500 will be used: > 625 :menu .900 myMenu.test :echo "text"<CR> 626The menu priority is only used when creating a new menu. When it already 627existed, e.g., in another mode, the priority will not change. Thus, the 628priority only needs to be given the first time a menu is used. 629An exception is the PopUp menu. There is a separate menu for each mode 630(Normal, Op-pending, Visual, Insert, Cmdline). The order in each of these 631menus can be different. This is different from menu-bar menus, which have 632the same order for all modes. 633NOTE: sub-menu priorities currently don't work for all versions of the GUI. 634 635 *menu-separator* *E332* 636Menu items can be separated by a special item that inserts some space between 637items. Depending on the system this is displayed as a line or a dotted line. 638These items must start with a '-' and end in a '-'. The part in between is 639used to give it a unique name. Priorities can be used as with normal items. 640Example: > 641 :menu Example.item1 :do something 642 :menu Example.-Sep- : 643 :menu Example.item2 :do something different 644Note that the separator also requires a rhs. It doesn't matter what it is, 645because the item will never be selected. Use a single colon to keep it 646simple. 647 648 *gui-toolbar* 649The toolbar is currently available in the Win32, Athena, Motif, GTK+ (X11), 650KDE and Photon GUI. It should turn up in other GUIs in due course. The default 651toolbar is setup in menu.vim. 652The display of the toolbar is controlled by the 'guioptions' letter 'T'. You 653can thus have menu & toolbar together, or either on its own, or neither. 654The appearance is controlled by the 'toolbar' option. You can chose between 655an image, text or both. 656 657 *toolbar-icon* 658The toolbar is defined as a special menu called ToolBar, which only has one 659level. Vim interprets the items in this menu as follows: 6601) If an "icon=" argument was specified, the file with this name is used. 661 The file can either be specified with the full path or with the base name. 662 In the last case it is searched for in the "bitmaps" directory in 663 'runtimepath', like in point 3). Examples: > 664 :amenu icon=/usr/local/pixmaps/foo_icon.xpm ToolBar.Foo :echo "Foo"<CR> 665 :amenu icon=FooIcon ToolBar.Foo :echo "Foo"<CR> 666< Note that in the first case the extension is included, while in the second 667 case it is omitted. 668 If the file cannot be opened the next points are tried. 669 A space in the file name must be escaped with a backslash. 670 A menu priority must come _after_ the icon argument: > 671 :amenu icon=foo 1.42 ToolBar.Foo :echo "42!"<CR> 6722) An item called 'BuiltIn##', where ## is a number, is taken as number ## of 673 the built-in bitmaps available in Vim. Currently there are 31 numbered 674 from 0 to 30 which cover most common editing operations |builtin-tools|. > 675 :amenu ToolBar.BuiltIn22 :call SearchNext("back")<CR> 6763) An item with another name is first searched for in the directory 677 "bitmaps" in 'runtimepath'. If found, the bitmap file is used as the 678 toolbar button image. Note that the exact filename is OS-specific: For 679 example, under Win32 the command > 680 :amenu ToolBar.Hello :echo "hello"<CR> 681< would find the file 'hello.bmp'. Under GTK+/X11 it is 'Hello.xpm'. With 682 GTK+ 2 the files 'Hello.png', 'Hello.xpm' and 'Hello.bmp' are checked for 683 existence, and the first one found would be used. 684 For MS-Windows and GTK+ 2 the bitmap is scaled to fit the button. For 685 MS-Windows a size of 18 by 18 pixels works best. 686 For MS-Windows the bitmap should have 16 colors with the standard palette. 687 The light grey pixels will be changed to the Window frame color and the 688 dark grey pixels to the window shadow color. More colors might also work, 689 depending on your system. 6904) If the bitmap is still not found, Vim checks for a match against its list 691 of built-in names. Each built-in button image has a name. 692 So the command > 693 :amenu ToolBar.Open :e 694< will show the built-in "open a file" button image if no open.bmp exists. 695 All the built-in names can be seen used in menu.vim. 6965) If all else fails, a blank, but functioning, button is displayed. 697 698 *builtin-tools* 699nr Name Normal action ~ 70000 New open new window 70101 Open browse for file to open in current window 70202 Save write buffer to file 70303 Undo undo last change 70404 Redo redo last undone change 70505 Cut delete selected text to clipboard 70606 Copy copy selected text to clipboard 70707 Paste paste text from clipboard 70808 Print print current buffer 70909 Help open a buffer on Vim's builtin help 71010 Find start a search command 71111 SaveAll write all modified buffers to file 71212 SaveSesn write session file for current situation 71313 NewSesn write new session file 71414 LoadSesn load session file 71515 RunScript browse for file to run as a Vim script 71616 Replace prompt for substitute command 71717 WinClose close current window 71818 WinMax make current window use many lines 71919 WinMin make current window use few lines 72020 WinSplit split current window 72121 Shell start a shell 72222 FindPrev search again, backward 72323 FindNext search again, forward 72424 FindHelp prompt for word to search help for 72525 Make run make and jump to first error 72626 TagJump jump to tag under the cursor 72727 RunCtags build tags for files in current directory 72828 WinVSplit split current window vertically 72929 WinMaxWidth make current window use many columns 73030 WinMinWidth make current window use few columns 731 732 *hidden-menus* *win32-hidden-menus* 733In the Win32 and GTK+ GUI, starting a menu name with ']' excludes that menu 734from the main menu bar. You must then use the |:popup| or |:tearoff| command 735to display it. 736 737 *popup-menu* 738In the Win32, KDE, GTK+, Motif, Athena and Photon GUI, you can define the special 739menu "PopUp". This is the menu that is displayed when the right mouse button 740is pressed, if 'mousemodel' is set to popup or popup_setpos. 741 742 7435.3 Showing What Menus Are Mapped To *showing-menus* 744 745To see what an existing menu is mapped to, use just one argument after the 746menu commands (just like you would with the ":map" commands). If the menu 747specified is a submenu, then all menus under that hierarchy will be shown. 748If no argument is given after :menu at all, then ALL menu items are shown 749for the appropriate mode (eg, Command-line mode for :cmenu). 750 751Special characters in the list, just before the rhs: 752* The menu was defined with "nore" to disallow remapping. 753& The menu was defined with "<script>" to allow remapping script-local 754 mappings only. 755- The menu was disabled. 756 757Note that hitting <Tab> while entering a menu name after a menu command may 758be used to complete the name of the menu item. 759 760 7615.4 Executing Menus *execute-menus* 762 763 *:em* *:emenu* *E334* *E335* 764:[range]em[enu] {menu} Execute {menu} from the command line. 765 The default is to execute the Normal mode 766 menu. If a range is specified, it executes 767 the Visual mode menu. 768 If used from <c-o>, it executes the 769 insert-mode menu Eg: > 770 :emenu File.Exit 771 772If the console-mode vim has been compiled with WANT_MENU defined, you can 773use :emenu to access useful menu items you may have got used to from GUI 774mode. See 'wildmenu' for an option that works well with this. See 775|console-menus| for an example. 776 777When using a range, if the lines match with '<,'>, then the menu is executed 778using the last visual selection. 779 780 7815.5 Deleting Menus *delete-menus* 782 783 *:unme* *:unmenu* 784 *:aun* *:aunmenu* 785 *:nunme* *:nunmenu* 786 *:ounme* *:ounmenu* 787 *:vunme* *:vunmenu* 788 *:iunme* *:iunmenu* 789 *:cunme* *:cunmenu* 790To delete a menu item or a whole submenu, use the unmenu commands, which are 791analogous to the unmap commands. Eg: > 792 :unmenu! Edit.Paste 793 794This will remove the Paste item from the Edit menu for Insert and 795Command-line modes. 796 797Note that hitting <Tab> while entering a menu name after an umenu command 798may be used to complete the name of the menu item for the appropriate mode. 799 800To remove all menus use: *:unmenu-all* > 801 :unmenu * " remove all menus in Normal and visual mode 802 :unmenu! * " remove all menus in Insert and Command-line mode 803 :aunmenu * " remove all menus in all modes 804 805If you want to get rid of the menu bar: > 806 :set guioptions-=m 807 808 8095.6 Disabling Menus *disable-menus* 810 811 *:menu-disable* *:menu-enable* 812If you do not want to remove a menu, but disable it for a moment, this can be 813done by adding the "enable" or "disable" keyword to a ":menu" command. 814Examples: > 815 :menu disable &File.&Open\.\.\. 816 :amenu enable * 817 :amenu disable &Tools.* 818 819The command applies to the modes as used with all menu commands. Note that 820characters like "&" need to be included for translated names to be found. 821When the argument is "*", all menus are affected. Otherwise the given menu 822name and all existing submenus below it are affected. 823 824 8255.7 Examples for Menus *menu-examples* 826 827Here is an example on how to add menu items with menu's! You can add a menu 828item for the keyword under the cursor. The register "z" is used. > 829 830 :nmenu Words.Add\ Var wb"zye:menu! Words.<C-R>z <C-R>z<CR> 831 :nmenu Words.Remove\ Var wb"zye:unmenu! Words.<C-R>z<CR> 832 :vmenu Words.Add\ Var "zy:menu! Words.<C-R>z <C-R>z <CR> 833 :vmenu Words.Remove\ Var "zy:unmenu! Words.<C-R>z<CR> 834 :imenu Words.Add\ Var <Esc>wb"zye:menu! Words.<C-R>z <C-R>z<CR>a 835 :imenu Words.Remove\ Var <Esc>wb"zye:unmenu! Words.<C-R>z<CR>a 836 837(the rhs is in <> notation, you can copy/paste this text to try out the 838mappings, or put these lines in your gvimrc; "<C-R>" is CTRL-R, "<CR>" is 839the <CR> key. |<>|) 840 841 8425.8 Tooltips & Menu tips 843 844See section |42.4| in the user manual. 845 846 *:tmenu* *:tm* 847:tm[enu] {menupath} {rhs} Define a tip for a menu or tool. {only in 848 X11 and Win32 GUI} 849 850:tm[enu] [menupath] List menu tips. {only in X11 and Win32 GUI} 851 852 *:tunmenu* *:tu* 853:tu[nmenu] {menupath} Remove a tip for a menu or tool. 854 {only in X11 and Win32 GUI} 855 856When a tip is defined for a menu item, it appears in the command-line area 857when the mouse is over that item, much like a standard Windows menu hint in 858the status bar. (Except when Vim is in Command-line mode, when of course 859nothing is displayed.) 860When a tip is defined for a ToolBar item, it appears as a tooltip when the 861mouse pauses over that button, in the usual fashion. Use the |hl-Tooltip| 862highlight group to change its colors. 863 864A "tip" can be defined for each menu item. For example, when defining a menu 865item like this: > 866 :amenu MyMenu.Hello :echo "Hello"<CR> 867The tip is defined like this: > 868 :tmenu MyMenu.Hello Displays a greeting. 869And delete it with: > 870 :tunmenu MyMenu.Hello 871 872Tooltips are currently only supported for the X11 and Win32 GUI. However, they 873should appear for the other gui platforms in the not too distant future. 874 875The ":tmenu" command works just like other menu commands, it uses the same 876arguments. ":tunmenu" deletes an existing menu tip, in the same way as the 877other unmenu commands. 878 879If a menu item becomes invalid (i.e. its actions in all modes are deleted) Vim 880deletes the menu tip (and the item) for you. This means that :aunmenu deletes 881a menu item - you don't need to do a :tunmenu as well. 882 883 8845.9 Popup Menus 885 886In the Win32 and GTK+ GUI, you can cause a menu to popup at the cursor. 887This behaves similarly to the PopUp menus except that any menu tree can 888be popped up. 889 890This command is for backwards compatibility, using it is discouraged, because 891it behaves in a strange way. 892 893 *:popup* *:popu* 894:popu[p] {name} Popup the menu {name}. The menu named must 895 have at least one subentry, but need not 896 appear on the menu-bar (see |hidden-menus|). 897 {only available for Win32 and GTK GUI} 898 899Example: > 900 :popup File 901will make the "File" menu (if there is one) appear at the text cursor. > 902 903 :amenu ]Toolbar.Make :make<CR> 904 :popup ]Toolbar 905This creates a popup menu that doesn't exist on the main menu-bar. 906 907Note that a menu that starts with ']' will not be displayed. 908 909============================================================================== 9106. Extras *gui-extras* 911 912This section describes other features which are related to the GUI. 913 914- With the GUI, there is no wait for one second after hitting escape, because 915 the key codes don't start with <Esc>. 916 917- Typing ^V followed by a special key in the GUI will insert "<Key>", since 918 the internal string used is meaningless. Modifiers may also be held down to 919 get "<Modifiers-Key>". 920 921- In the GUI, the modifiers SHIFT, CTRL, and ALT (or META) may be used within 922 mappings of special keys and mouse events. eg: :map <M-LeftDrag> <LeftDrag> 923 924- In the GUI, several normal keys may have modifiers in mappings etc, these 925 are <Space>, <Tab>, <NL>, <CR>, <Esc>. 926 927- To check in a Vim script if the GUI is being used, you can use something 928 like this: > 929 930 if has("gui_running") 931 echo "yes, we have a GUI" 932 else 933 echo "Boring old console" 934 endif 935< *setting-guifont* 936- When you use the same vimrc file on various systems, you can use something 937 like this to set options specifically for each type of GUI: > 938 939 if has("gui_running") 940 if has("gui_gtk2") 941 :set guifont=Luxi\ Mono\ 12 942 elseif has("gui_kde") 943 :set guifont=Luxi\ Mono/12/-1/5/50/0/0/0/1/0 944 elseif has("x11") 945 " Also for GTK 1 946 :set guifont=*-lucidatypewriter-medium-r-normal-*-*-180-*-*-m-*-* 947 elseif has("gui_win32") 948 :set guifont=Luxi_Mono:h12:cANSI 949 endif 950 endif 951 952============================================================================== 9537. Shell Commands *gui-shell* 954 955For the X11 GUI the external commands are executed inside the gvim window. 956See |gui-pty|. 957 958WARNING: Executing an external command from the X11 GUI will not always 959work. "normal" commands like "ls", "grep" and "make" mostly work fine. 960Commands that require an intelligent terminal like "less" and "ispell" won't 961work. Some may even hang and need to be killed from another terminal. So be 962careful! 963 964For the Win32 GUI the external commands are executed in a separate window. 965See |gui-shell-win32|. 966 967 vim:tw=78:sw=4:ts=8:ft=help:norl: 968