2017-03-21 09:08:19 -07:00
|
|
|
*gui.txt* Nvim
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
Nvim Graphical User Interface *gui* *GUI*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-09-18 04:14:06 -07:00
|
|
|
Any client that supports the Nvim |ui-protocol| can be used as a UI for Nvim.
|
|
|
|
And multiple UIs can connect to the same Nvim instance! The terms "UI" and
|
|
|
|
"GUI" are often used interchangeably because all Nvim UI clients have the same
|
|
|
|
potential capabilities; the "TUI" refers to a UI client that outputs to your
|
|
|
|
terminal, whereas a "GUI" outputs directly to the OS graphics system.
|
|
|
|
|
|
|
|
Except where noted, this document describes UI capabilities available to both
|
|
|
|
TUI and GUI (assuming the UI supports the given feature). See |TUI| for notes
|
|
|
|
specific to the terminal UI. Help tags with the "gui-" prefix refer to UI
|
|
|
|
features, whereas help tags with the "ui-" prefix refer to the |ui-protocol|.
|
|
|
|
|
|
|
|
Nvim provides a default, builtin UI (the |TUI|), but there are many other
|
|
|
|
(third-party) GUIs that you can use instead:
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*vscode*
|
2024-09-18 04:14:06 -07:00
|
|
|
- vscode-neovim (Nvim in VSCode!) https://github.com/vscode-neovim/vscode-neovim
|
2024-12-03 10:44:28 -07:00
|
|
|
- Firenvim (Nvim in your web browser!) https://github.com/glacambre/firenvim
|
2024-09-18 04:14:06 -07:00
|
|
|
- Neovide https://neovide.dev/
|
|
|
|
- Goneovim https://github.com/akiyosi/goneovim
|
|
|
|
- Nvy https://github.com/RMichelsen/Nvy
|
|
|
|
- Neovim-Qt (Qt5) https://github.com/equalsraf/neovim-qt
|
|
|
|
- VimR (macOS) https://github.com/qvacua/vimr
|
|
|
|
- Others https://github.com/neovim/neovim/wiki/Related-projects#gui
|
|
|
|
|
2017-10-20 17:33:58 -07:00
|
|
|
Type |gO| to see the table of contents.
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
==============================================================================
|
2024-12-04 17:38:44 -07:00
|
|
|
Starting the GUI *gui-config* *gui-start*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*ginit.vim* *gui-init* *gvimrc* *$MYGVIMRC*
|
2019-09-12 16:08:22 -07:00
|
|
|
For GUI-specific configuration Nvim provides the |UIEnter| event. This
|
2024-09-18 04:14:06 -07:00
|
|
|
happens after other |initialization|s, or whenever a UI attaches (multiple UIs
|
|
|
|
can connect to any Nvim instance).
|
2019-09-11 18:44:20 -07:00
|
|
|
|
|
|
|
Example: this sets "g:gui" to the value of the UI's "rgb" field: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:autocmd UIEnter * let g:gui = filter(nvim_list_uis(),{k,v-> v.chan==v:event.chan})[0].rgb
|
2019-01-10 17:20:15 -07:00
|
|
|
<
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:winp* *:winpos* *E188*
|
2014-07-10 21:05:51 -07:00
|
|
|
:winp[os]
|
2024-12-04 17:38:44 -07:00
|
|
|
Display current position of the top left corner of the GUI vim
|
|
|
|
window in pixels. Does not work in all versions.
|
|
|
|
Also see |getwinpos()|, |getwinposx()| and |getwinposy()|.
|
|
|
|
|
|
|
|
:winp[os] {X} {Y} *E466*
|
|
|
|
Put the GUI vim window at the given {X} and {Y} coordinates.
|
|
|
|
The coordinates should specify the position in pixels of the
|
|
|
|
top left corner of the window.
|
|
|
|
When the GUI window has not been opened yet, the values are
|
|
|
|
remembered until the window is opened. The position is
|
|
|
|
adjusted to make the window fit on the screen (if possible).
|
|
|
|
|
|
|
|
*:wi* *:win* *:winsize* *E465*
|
2014-07-10 21:05:51 -07:00
|
|
|
:win[size] {width} {height}
|
2024-12-04 17:38:44 -07:00
|
|
|
Set the window height to {width} by {height} characters.
|
|
|
|
Obsolete, use ":set lines=11 columns=22".
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
==============================================================================
|
2024-12-04 17:38:44 -07:00
|
|
|
Scrollbars *gui-scrollbars*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
There are vertical scrollbars and a horizontal scrollbar. You may
|
|
|
|
configure which ones appear with the 'guioptions' option.
|
|
|
|
|
2022-12-28 05:39:39 -07:00
|
|
|
The interface looks like this (with `:set guioptions=mlrb`):
|
|
|
|
>
|
2024-12-04 17:38:44 -07:00
|
|
|
+------------------------------+ `
|
|
|
|
| File Edit Help | <- Menu bar (m) `
|
|
|
|
+-+--------------------------+-+ `
|
|
|
|
|^| |^| `
|
|
|
|
|#| Text area. |#| `
|
|
|
|
| | | | `
|
|
|
|
|v|__________________________|v| `
|
|
|
|
Normal status line -> |-+ File.c 5,2 +-| `
|
2014-07-10 21:05:51 -07:00
|
|
|
between Vim windows |^|""""""""""""""""""""""""""|^| `
|
2024-12-04 17:38:44 -07:00
|
|
|
| | | | `
|
|
|
|
| | Another file buffer. | | `
|
|
|
|
| | | | `
|
|
|
|
|#| |#| `
|
|
|
|
Left scrollbar (l) -> |#| |#| <- Right `
|
|
|
|
|#| |#| scrollbar (r) `
|
|
|
|
| | | | `
|
|
|
|
|v| |v| `
|
|
|
|
+-+--------------------------+-+ `
|
|
|
|
| |< #### >| | <- Bottom `
|
|
|
|
+-+--------------------------+-+ scrollbar (b) `
|
2022-12-28 05:39:39 -07:00
|
|
|
<
|
2014-07-10 21:05:51 -07:00
|
|
|
Any of the scrollbar or menu components may be turned off by not putting the
|
|
|
|
appropriate letter in the 'guioptions' string. The bottom scrollbar is
|
|
|
|
only useful when 'nowrap' is set.
|
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
VERTICAL SCROLLBARS *gui-vert-scroll*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
Each Vim window has a scrollbar next to it which may be scrolled up and down
|
|
|
|
to move through the text in that buffer. The size of the scrollbar-thumb
|
|
|
|
indicates the fraction of the buffer which can be seen in the window.
|
|
|
|
When the scrollbar is dragged all the way down, the last line of the file
|
|
|
|
will appear in the top of the window.
|
|
|
|
|
|
|
|
If a window is shrunk to zero height (by the growth of another window) its
|
|
|
|
scrollbar disappears. It reappears when the window is restored.
|
|
|
|
|
|
|
|
If a window is vertically split, it will get a scrollbar when it is the
|
|
|
|
current window and when, taking the middle of the current window and drawing a
|
|
|
|
vertical line, this line goes through the window.
|
|
|
|
When there are scrollbars on both sides, and the middle of the current window
|
|
|
|
is on the left half, the right scrollbar column will contain scrollbars for
|
|
|
|
the rightmost windows. The same happens on the other side.
|
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
HORIZONTAL SCROLLBARS *gui-horiz-scroll*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
The horizontal scrollbar (at the bottom of the Vim GUI) may be used to
|
|
|
|
scroll text sideways when the 'wrap' option is turned off. The
|
|
|
|
scrollbar-thumb size is such that the text of the longest visible line may be
|
|
|
|
scrolled as far as possible left and right. The cursor is moved when
|
|
|
|
necessary, it must remain on a visible character (unless 'virtualedit' is
|
|
|
|
set).
|
|
|
|
|
|
|
|
Computing the length of the longest visible line takes quite a bit of
|
|
|
|
computation, and it has to be done every time something changes. If this
|
|
|
|
takes too much time or you don't like the cursor jumping to another line,
|
|
|
|
include the 'h' flag in 'guioptions'. Then the scrolling is limited by the
|
|
|
|
text of the current cursor line.
|
|
|
|
|
|
|
|
==============================================================================
|
2024-12-04 17:38:44 -07:00
|
|
|
Drag and drop *drag-n-drop*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
You can drag and drop one or more files into the Vim window, where they will
|
|
|
|
be opened as if a |:drop| command was used.
|
|
|
|
|
|
|
|
If you hold down Shift while doing this, Vim changes to the first dropped
|
|
|
|
file's directory. If you hold Ctrl Vim will always split a new window for the
|
|
|
|
file. Otherwise it's only done if the current buffer has been changed.
|
|
|
|
|
|
|
|
You can also drop a directory on Vim. This starts the explorer plugin for
|
|
|
|
that directory (assuming it was enabled, otherwise you'll get an error
|
|
|
|
message). Keep Shift pressed to change to the directory instead.
|
|
|
|
|
|
|
|
If Vim happens to be editing a command line, the names of the dropped files
|
|
|
|
and directories will be inserted at the cursor. This allows you to use these
|
|
|
|
names with any Ex command. Special characters (space, tab, double quote and
|
2022-12-28 05:39:39 -07:00
|
|
|
"|"; backslash on non-MS-Windows systems) will be escaped.
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
==============================================================================
|
2024-12-04 17:38:44 -07:00
|
|
|
Menus *menus*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
For an introduction see |usr_42.txt| in the user manual.
|
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
Using Menus *using-menus*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
Basically, menus can be used just like mappings. You can define your own
|
|
|
|
menus, as many as you like.
|
|
|
|
Long-time Vim users won't use menus much. But the power is in adding your own
|
|
|
|
menus and menu items. They are most useful for things that you can't remember
|
|
|
|
what the key sequence was.
|
|
|
|
|
|
|
|
For creating menus in a different language, see |:menutrans|.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*menu.vim*
|
2014-07-10 21:05:51 -07:00
|
|
|
The default menus are read from the file "$VIMRUNTIME/menu.vim". See
|
|
|
|
|$VIMRUNTIME| for where the path comes from. You can set up your own menus.
|
|
|
|
Starting off with the default set is a good idea. You can add more items, or,
|
|
|
|
if you don't like the defaults at all, start with removing all menus
|
|
|
|
|:unmenu-all|. You can also avoid the default menus being loaded by adding
|
2015-10-17 07:25:53 -07:00
|
|
|
this line to your vimrc file (NOT your gvimrc file!): >
|
2024-12-04 17:38:44 -07:00
|
|
|
:let did_install_default_menus = 1
|
2014-07-10 21:05:51 -07:00
|
|
|
If you also want to avoid the Syntax menu: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:let did_install_syntax_menu = 1
|
2014-07-10 21:05:51 -07:00
|
|
|
The first item in the Syntax menu can be used to show all available filetypes
|
|
|
|
in the menu (which can take a bit of time to load). If you want to have all
|
|
|
|
filetypes already present at startup, add: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:let do_syntax_sel_menu = 1
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2017-11-07 12:43:11 -07:00
|
|
|
Note that the menu.vim is sourced when `:syntax on` or `:filetype on` is
|
|
|
|
executed or after your .vimrc file is sourced. This means that the 'encoding'
|
|
|
|
option and the language of messages (`:language messages`) must be set before
|
|
|
|
that (if you want to change them).
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*console-menus*
|
2014-07-10 21:05:51 -07:00
|
|
|
Although this documentation is in the GUI section, you can actually use menus
|
|
|
|
in console mode too. You will have to load |menu.vim| explicitly then, it is
|
|
|
|
not done by default. You can use the |:emenu| command and command-line
|
|
|
|
completion with 'wildmenu' to access the menu entries almost like a real menu
|
2015-10-17 07:25:53 -07:00
|
|
|
system. To do this, put these commands in your vimrc file: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:source $VIMRUNTIME/menu.vim
|
|
|
|
:set wildmenu
|
|
|
|
:set cpo-=<
|
|
|
|
:set wcm=<C-Z>
|
|
|
|
:map <F4> :emenu <C-Z>
|
2014-07-10 21:05:51 -07:00
|
|
|
Pressing <F4> will start the menu. You can now use the cursor keys to select
|
|
|
|
a menu entry. Hit <Enter> to execute it. Hit <Esc> if you want to cancel.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
Creating New Menus *creating-menus*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:me* *:menu* *:noreme* *:noremenu*
|
|
|
|
*E330* *E327* *E331* *E336* *E333*
|
|
|
|
*E328* *E329* *E337* *E792*
|
2014-07-10 21:05:51 -07:00
|
|
|
To create a new menu item, use the ":menu" commands. They are mostly like
|
2021-04-24 05:57:52 -07:00
|
|
|
the ":map" set of commands (see |map-modes|), but the first argument is a menu
|
|
|
|
item name, given as a path of menus and submenus with a '.' between them,
|
|
|
|
e.g.: >
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
:menu File.Save :w<CR>
|
|
|
|
:inoremenu File.Save <C-O>:w<CR>
|
|
|
|
:menu Edit.Big\ Changes.Delete\ All\ Spaces :%s/[ ^I]//g<CR>
|
|
|
|
|
|
|
|
This last one will create a new item in the menu bar called "Edit", holding
|
|
|
|
the mouse button down on this will pop up a menu containing the item
|
|
|
|
"Big Changes", which is a sub-menu containing the item "Delete All Spaces",
|
|
|
|
which when selected, performs the operation.
|
|
|
|
|
2022-06-30 02:17:27 -07:00
|
|
|
To create a menu for terminal mode, use |:tlmenu| instead of |:tmenu| unlike
|
|
|
|
key mapping (|:tmap|). This is because |:tmenu| is already used for defining
|
|
|
|
tooltips for menus. See |terminal-input|.
|
|
|
|
|
2014-07-10 21:05:51 -07:00
|
|
|
Special characters in a menu name:
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*menu-shortcut*
|
|
|
|
- & The next character is the shortcut key. Make sure each shortcut key is
|
|
|
|
only used once in a (sub)menu. If you want to insert a literal "&" in the
|
|
|
|
menu name use "&&".
|
|
|
|
*menu-text*
|
|
|
|
- <Tab> Separates the menu name from right-aligned text. This can be used to
|
|
|
|
show the equivalent typed command. The text "<Tab>" can be used here for
|
|
|
|
convenience. If you are using a real tab, don't forget to put a backslash
|
|
|
|
before it!
|
|
|
|
|
2014-07-10 21:05:51 -07:00
|
|
|
Example: >
|
|
|
|
|
|
|
|
:amenu &File.&Open<Tab>:e :browse e<CR>
|
|
|
|
|
|
|
|
[typed literally]
|
|
|
|
With the shortcut "F" (while keeping the <Alt> key pressed), and then "O",
|
|
|
|
this menu can be used. The second part is shown as "Open :e". The ":e"
|
|
|
|
is right aligned, and the "O" is underlined, to indicate it is the shortcut.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:am* *:amenu* *:an* *:anoremenu*
|
2022-06-30 02:17:27 -07:00
|
|
|
The ":amenu" command can be used to define menu entries for all modes at once,
|
2024-06-06 19:55:14 -07:00
|
|
|
except for Terminal mode. To make the command work correctly, a character is
|
2024-12-04 17:38:44 -07:00
|
|
|
automatically inserted for some modes: >
|
|
|
|
mode inserted appended
|
|
|
|
Normal nothing nothing
|
|
|
|
Visual <C-C> <C-\><C-G>
|
|
|
|
Insert <C-\><C-O>
|
|
|
|
Cmdline <C-C> <C-\><C-G>
|
|
|
|
Op-pending <C-C> <C-\><C-G>
|
|
|
|
<
|
2014-07-10 21:05:51 -07:00
|
|
|
Example: >
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
:amenu File.Next :next^M
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
is equal to: >
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
:nmenu File.Next :next^M
|
|
|
|
:vmenu File.Next ^C:next^M^\^G
|
|
|
|
:imenu File.Next ^\^O:next^M
|
|
|
|
:cmenu File.Next ^C:next^M^\^G
|
|
|
|
:omenu File.Next ^C:next^M^\^G
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
Careful: In Insert mode this only works for a SINGLE Normal mode command,
|
|
|
|
because of the CTRL-O. If you have two or more commands, you will need to use
|
|
|
|
the ":imenu" command. For inserting text in any mode, you can use the
|
|
|
|
expression register: >
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
:amenu Insert.foobar "='foobar'<CR>P
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2021-05-02 09:55:08 -07:00
|
|
|
The special text <Cmd> begins a "command menu", it executes the command
|
|
|
|
directly without changing modes. Where you might use ":...<CR>" you can
|
|
|
|
instead use "<Cmd>...<CR>". See |<Cmd>| for more info. Example: >
|
2024-12-04 17:38:44 -07:00
|
|
|
anoremenu File.Next <Cmd>next<CR>
|
2021-05-02 09:55:08 -07:00
|
|
|
|
2014-07-10 21:05:51 -07:00
|
|
|
Note that <Esc> in Cmdline mode executes the command, like in a mapping. This
|
|
|
|
is Vi compatible. Use CTRL-C to quit Cmdline mode.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:nme* *:nmenu* *:nnoreme* *:nnoremenu* *:nunme* *:nunmenu*
|
2021-04-30 22:39:00 -07:00
|
|
|
Menu commands starting with "n" work in Normal mode. |mapmode-n|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:ome* *:omenu* *:onoreme* *:onoremenu* *:ounme* *:ounmenu*
|
2021-04-30 22:39:00 -07:00
|
|
|
Menu commands starting with "o" work in Operator-pending mode. |mapmode-o|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:vme* *:vmenu* *:vnoreme* *:vnoremenu* *:vunme* *:vunmenu*
|
2021-04-30 22:39:00 -07:00
|
|
|
Menu commands starting with "v" work in Visual mode. |mapmode-v|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:xme* *:xmenu* *:xnoreme* *:xnoremenu* *:xunme* *:xunmenu*
|
2021-04-30 22:39:00 -07:00
|
|
|
Menu commands starting with "x" work in Visual and Select mode. |mapmode-x|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:sme* *:smenu* *:snoreme* *:snoremenu* *:sunme* *:sunmenu*
|
2021-04-30 22:39:00 -07:00
|
|
|
Menu commands starting with "s" work in Select mode. |mapmode-s|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:ime* *:imenu* *:inoreme* *:inoremenu* *:iunme* *:iunmenu*
|
2021-04-30 22:39:00 -07:00
|
|
|
Menu commands starting with "i" work in Insert mode. |mapmode-i|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:cme* *:cmenu* *:cnoreme* *:cnoremenu* *:cunme* *:cunmenu*
|
2021-04-30 22:39:00 -07:00
|
|
|
Menu commands starting with "c" work in Cmdline mode. |mapmode-c|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:tlm* *:tlmenu* *:tln* *:tlnoremenu* *:tlu* *:tlunmenu*
|
2021-04-30 22:39:00 -07:00
|
|
|
Menu commands starting with "tl" work in Terminal mode. |mapmode-t|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:menu-<silent>* *:menu-silent*
|
2014-07-10 21:05:51 -07:00
|
|
|
To define a menu which will not be echoed on the command line, add
|
|
|
|
"<silent>" as the first argument. Example: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:menu <silent> Settings.Ignore\ case :set ic<CR>
|
2014-07-10 21:05:51 -07:00
|
|
|
The ":set ic" will not be echoed when using this menu. Messages from the
|
|
|
|
executed command are still given though. To shut them up too, add a ":silent"
|
|
|
|
in the executed command: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:menu <silent> Search.Header :exe ":silent normal /Header\r"<CR>
|
2017-07-02 04:46:41 -07:00
|
|
|
"<silent>" may also appear just after "<script>".
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:menu-<script>* *:menu-script*
|
2014-07-10 21:05:51 -07:00
|
|
|
The "to" part of the menu will be inspected for mappings. If you don't want
|
|
|
|
this, use the ":noremenu" command (or the similar one for a specific mode).
|
|
|
|
If you do want to use script-local mappings, add "<script>" as the very first
|
2017-07-02 04:46:41 -07:00
|
|
|
argument to the ":menu" command or just after "<silent>".
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*menu-priority*
|
2014-07-10 21:05:51 -07:00
|
|
|
You can give a priority to a menu. Menus with a higher priority go more to
|
|
|
|
the right. The priority is given as a number before the ":menu" command.
|
|
|
|
Example: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:80menu Buffer.next :bn<CR>
|
|
|
|
|
|
|
|
The default menus have these priorities: >
|
|
|
|
File 10
|
|
|
|
Edit 20
|
|
|
|
Tools 40
|
|
|
|
Syntax 50
|
|
|
|
Buffers 60
|
|
|
|
Window 70
|
|
|
|
Help 9999
|
|
|
|
<
|
2014-07-10 21:05:51 -07:00
|
|
|
When no or zero priority is given, 500 is used.
|
|
|
|
The priority for the PopUp menu is not used.
|
|
|
|
|
|
|
|
You can use a priority higher than 9999, to make it go after the Help menu,
|
|
|
|
but that is non-standard and is discouraged. The highest possible priority is
|
|
|
|
about 32000. The lowest is 1.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*sub-menu-priority*
|
2014-07-10 21:05:51 -07:00
|
|
|
The same mechanism can be used to position a sub-menu. The priority is then
|
|
|
|
given as a dot-separated list of priorities, before the menu name: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:menu 80.500 Buffer.next :bn<CR>
|
2014-07-10 21:05:51 -07:00
|
|
|
Giving the sub-menu priority is only needed when the item is not to be put
|
|
|
|
in a normal position. For example, to put a sub-menu before the other items: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:menu 80.100 Buffer.first :brew<CR>
|
2014-07-10 21:05:51 -07:00
|
|
|
Or to put a sub-menu after the other items, and further items with default
|
|
|
|
priority will be put before it: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:menu 80.900 Buffer.last :blast<CR>
|
2014-07-10 21:05:51 -07:00
|
|
|
When a number is missing, the default value 500 will be used: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:menu .900 myMenu.test :echo "text"<CR>
|
2014-07-10 21:05:51 -07:00
|
|
|
The menu priority is only used when creating a new menu. When it already
|
|
|
|
existed, e.g., in another mode, the priority will not change. Thus, the
|
|
|
|
priority only needs to be given the first time a menu is used.
|
|
|
|
An exception is the PopUp menu. There is a separate menu for each mode
|
|
|
|
(Normal, Op-pending, Visual, Insert, Cmdline). The order in each of these
|
|
|
|
menus can be different. This is different from menu-bar menus, which have
|
|
|
|
the same order for all modes.
|
|
|
|
NOTE: sub-menu priorities currently don't work for all versions of the GUI.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*menu-separator* *E332*
|
2014-07-10 21:05:51 -07:00
|
|
|
Menu items can be separated by a special item that inserts some space between
|
|
|
|
items. Depending on the system this is displayed as a line or a dotted line.
|
|
|
|
These items must start with a '-' and end in a '-'. The part in between is
|
|
|
|
used to give it a unique name. Priorities can be used as with normal items.
|
|
|
|
Example: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:menu Example.item1 :do something
|
|
|
|
:menu Example.-Sep- :
|
|
|
|
:menu Example.item2 :do something different
|
2014-07-10 21:05:51 -07:00
|
|
|
Note that the separator also requires a rhs. It doesn't matter what it is,
|
|
|
|
because the item will never be selected. Use a single colon to keep it
|
|
|
|
simple.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*gui-toolbar*
|
2014-12-08 19:21:47 -07:00
|
|
|
The default toolbar is setup in menu.vim. The display of the toolbar is
|
|
|
|
controlled by the 'guioptions' letter 'T'. You can thus have menu & toolbar
|
|
|
|
together, or either on its own, or neither. The appearance is controlled by
|
|
|
|
the 'toolbar' option. You can choose between an image, text or both.
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*toolbar-icon*
|
2014-07-10 21:05:51 -07:00
|
|
|
The toolbar is defined as a special menu called ToolBar, which only has one
|
|
|
|
level. Vim interprets the items in this menu as follows:
|
2024-12-04 17:38:44 -07:00
|
|
|
- 1 If an "icon=" argument was specified, the file with this name is used.
|
2014-07-10 21:05:51 -07:00
|
|
|
The file can either be specified with the full path or with the base name.
|
|
|
|
In the last case it is searched for in the "bitmaps" directory in
|
|
|
|
'runtimepath', like in point 3. Examples: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:amenu icon=/usr/local/pixmaps/foo_icon.xpm ToolBar.Foo :echo "Foo"<CR>
|
|
|
|
:amenu icon=FooIcon ToolBar.Foo :echo "Foo"<CR>
|
2014-07-10 21:05:51 -07:00
|
|
|
< Note that in the first case the extension is included, while in the second
|
|
|
|
case it is omitted.
|
|
|
|
If the file cannot be opened the next points are tried.
|
|
|
|
A space in the file name must be escaped with a backslash.
|
|
|
|
A menu priority must come _after_ the icon argument: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:amenu icon=foo 1.42 ToolBar.Foo :echo "42!"<CR>
|
|
|
|
- 2 An item called 'BuiltIn##', where ## is a number, is taken as number ## of
|
2014-07-10 21:05:51 -07:00
|
|
|
the built-in bitmaps available in Vim. Currently there are 31 numbered
|
|
|
|
from 0 to 30 which cover most common editing operations |builtin-tools|. >
|
2024-12-04 17:38:44 -07:00
|
|
|
:amenu ToolBar.BuiltIn22 :call SearchNext("back")<CR>
|
|
|
|
- 3 An item with another name is first searched for in the directory
|
2014-07-10 21:05:51 -07:00
|
|
|
"bitmaps" in 'runtimepath'. If found, the bitmap file is used as the
|
|
|
|
toolbar button image. Note that the exact filename is OS-specific: For
|
|
|
|
example, under Win32 the command >
|
2024-12-04 17:38:44 -07:00
|
|
|
:amenu ToolBar.Hello :echo "hello"<CR>
|
2016-01-11 17:58:39 -07:00
|
|
|
< would find the file 'hello.bmp'. Under X11 it is 'Hello.xpm'.
|
|
|
|
For MS-Windows and the bitmap is scaled to fit the button. For
|
2014-07-10 21:05:51 -07:00
|
|
|
MS-Windows a size of 18 by 18 pixels works best.
|
|
|
|
For MS-Windows the bitmap should have 16 colors with the standard palette.
|
|
|
|
The light grey pixels will be changed to the Window frame color and the
|
|
|
|
dark grey pixels to the window shadow color. More colors might also work,
|
|
|
|
depending on your system.
|
2024-12-04 17:38:44 -07:00
|
|
|
- 4 If the bitmap is still not found, Vim checks for a match against its list
|
2014-07-10 21:05:51 -07:00
|
|
|
of built-in names. Each built-in button image has a name.
|
|
|
|
So the command >
|
2024-12-04 17:38:44 -07:00
|
|
|
:amenu ToolBar.Open :e
|
2014-07-10 21:05:51 -07:00
|
|
|
< will show the built-in "open a file" button image if no open.bmp exists.
|
|
|
|
All the built-in names can be seen used in menu.vim.
|
2024-12-04 17:38:44 -07:00
|
|
|
- 5 If all else fails, a blank, but functioning, button is displayed.
|
|
|
|
|
|
|
|
*builtin-tools*
|
|
|
|
>
|
|
|
|
nr Name Normal action
|
|
|
|
00 New open new window
|
|
|
|
01 Open browse for file to open in current window
|
|
|
|
02 Save write buffer to file
|
|
|
|
03 Undo undo last change
|
|
|
|
04 Redo redo last undone change
|
|
|
|
05 Cut delete selected text to clipboard
|
|
|
|
06 Copy copy selected text to clipboard
|
|
|
|
07 Paste paste text from clipboard
|
|
|
|
08 Print print current buffer
|
|
|
|
09 Help open a buffer on Vim's builtin help
|
|
|
|
10 Find start a search command
|
|
|
|
11 SaveAll write all modified buffers to file
|
|
|
|
12 SaveSesn write session file for current situation
|
|
|
|
13 NewSesn write new session file
|
|
|
|
14 LoadSesn load session file
|
|
|
|
15 RunScript browse for file to run as a Vim script
|
|
|
|
16 Replace prompt for substitute command
|
|
|
|
17 WinClose close current window
|
|
|
|
18 WinMax make current window use many lines
|
|
|
|
19 WinMin make current window use few lines
|
|
|
|
20 WinSplit split current window
|
|
|
|
21 Shell start a shell
|
|
|
|
22 FindPrev search again, backward
|
|
|
|
23 FindNext search again, forward
|
|
|
|
24 FindHelp prompt for word to search help for
|
|
|
|
25 Make run make and jump to first error
|
|
|
|
26 TagJump jump to tag under the cursor
|
|
|
|
27 RunCtags build tags for files in current directory
|
|
|
|
28 WinVSplit split current window vertically
|
|
|
|
29 WinMaxWidth make current window use many columns
|
|
|
|
30 WinMinWidth make current window use few columns
|
|
|
|
<
|
|
|
|
*hidden-menus* *win32-hidden-menus*
|
2016-01-11 17:58:39 -07:00
|
|
|
In the Win32 GUI, starting a menu name with ']' excludes that menu from the
|
|
|
|
main menu bar. You must then use the |:popup| command to display it.
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2017-11-07 11:34:37 -07:00
|
|
|
When splitting the window the window toolbar is not copied to the new window.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*popup-menu*
|
2014-12-08 19:21:47 -07:00
|
|
|
You can define the special menu "PopUp". This is the menu that is displayed
|
|
|
|
when the right mouse button is pressed, if 'mousemodel' is set to popup or
|
|
|
|
popup_setpos.
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-04-05 03:08:54 -07:00
|
|
|
The default "PopUp" menu is: >vim
|
2024-09-05 05:56:00 -07:00
|
|
|
anoremenu PopUp.Go\ to\ definition <Cmd>lua vim.lsp.buf.definition()<CR>
|
|
|
|
amenu PopUp.Open\ in\ web\ browser gx
|
|
|
|
anoremenu PopUp.Inspect <Cmd>Inspect<CR>
|
|
|
|
anoremenu PopUp.-1- <Nop>
|
2024-04-05 03:08:54 -07:00
|
|
|
vnoremenu PopUp.Cut "+x
|
|
|
|
vnoremenu PopUp.Copy "+y
|
|
|
|
anoremenu PopUp.Paste "+gP
|
|
|
|
vnoremenu PopUp.Paste "+P
|
|
|
|
vnoremenu PopUp.Delete "_x
|
|
|
|
nnoremenu PopUp.Select\ All ggVG
|
|
|
|
vnoremenu PopUp.Select\ All gg0oG$
|
|
|
|
inoremenu PopUp.Select\ All <C-Home><C-O>VG
|
2024-09-05 05:56:00 -07:00
|
|
|
anoremenu PopUp.-2- <Nop>
|
2024-04-05 03:08:54 -07:00
|
|
|
anoremenu PopUp.How-to\ disable\ mouse <Cmd>help disable-mouse<CR>
|
2022-07-17 04:14:04 -07:00
|
|
|
<
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
Showing What Menus Are Mapped To *showing-menus*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
To see what an existing menu is mapped to, use just one argument after the
|
|
|
|
menu commands (just like you would with the ":map" commands). If the menu
|
|
|
|
specified is a submenu, then all menus under that hierarchy will be shown.
|
|
|
|
If no argument is given after :menu at all, then ALL menu items are shown
|
|
|
|
for the appropriate mode (e.g., Command-line mode for :cmenu).
|
|
|
|
|
|
|
|
Special characters in the list, just before the rhs:
|
2023-06-24 04:47:10 -07:00
|
|
|
• * Menu was defined with "nore" to disallow remapping.
|
|
|
|
• & Menu was defined with "<script>" to allow remapping script-local mappings.
|
|
|
|
• s Menu was defined with "<silent>" to avoid showing what it is mapped to
|
|
|
|
when triggered.
|
|
|
|
• - Menu was disabled.
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
Note that hitting <Tab> while entering a menu name after a menu command may
|
|
|
|
be used to complete the name of the menu item.
|
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
Executing Menus *execute-menus*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:em* *:emenu* *E334* *E335*
|
|
|
|
:[range]em[enu] {menu} Execute {menu} from the command line.
|
|
|
|
The default is to execute the Normal mode
|
|
|
|
menu. If a range is specified, it executes
|
|
|
|
the Visual mode menu.
|
|
|
|
If used from <c-o>, it executes the
|
|
|
|
insert-mode menu Eg: >
|
|
|
|
:emenu File.Exit
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
:[range]em[enu] {mode} {menu} Like above, but execute the menu for {mode}:
|
|
|
|
- 'n': |:nmenu| Normal mode
|
|
|
|
- 'v': |:vmenu| Visual mode
|
|
|
|
- 's': |:smenu| Select mode
|
|
|
|
- 'o': |:omenu| Operator-pending mode
|
|
|
|
- 't': |:tlmenu| Terminal mode
|
|
|
|
- 'i': |:imenu| Insert mode
|
|
|
|
- 'c': |:cmenu| Cmdline mode
|
2022-06-30 02:17:27 -07:00
|
|
|
|
|
|
|
|
2021-07-07 18:51:40 -07:00
|
|
|
You can use :emenu to access useful menu items you may have got used to from
|
|
|
|
GUI mode. See 'wildmenu' for an option that works well with this. See
|
2014-07-10 21:05:51 -07:00
|
|
|
|console-menus| for an example.
|
|
|
|
|
|
|
|
When using a range, if the lines match with '<,'>, then the menu is executed
|
|
|
|
using the last visual selection.
|
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
Deleting Menus *delete-menus*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:unme* *:unmenu*
|
|
|
|
*:aun* *:aunmenu*
|
2014-07-10 21:05:51 -07:00
|
|
|
To delete a menu item or a whole submenu, use the unmenu commands, which are
|
|
|
|
analogous to the unmap commands. Eg: >
|
|
|
|
:unmenu! Edit.Paste
|
|
|
|
|
|
|
|
This will remove the Paste item from the Edit menu for Insert and
|
|
|
|
Command-line modes.
|
|
|
|
|
|
|
|
Note that hitting <Tab> while entering a menu name after an umenu command
|
|
|
|
may be used to complete the name of the menu item for the appropriate mode.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
To remove all menus use: *:unmenu-all* >
|
|
|
|
:unmenu * " remove all menus in Normal and visual mode
|
|
|
|
:unmenu! * " remove all menus in Insert and Command-line mode
|
|
|
|
:aunmenu * " remove all menus in all modes, except for Terminal
|
|
|
|
" mode
|
|
|
|
:tlunmenu * " remove all menus in Terminal mode
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
If you want to get rid of the menu bar: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:set guioptions-=m
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
Disabling Menus *disable-menus*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:menu-disable* *:menu-enable*
|
2014-07-10 21:05:51 -07:00
|
|
|
If you do not want to remove a menu, but disable it for a moment, this can be
|
|
|
|
done by adding the "enable" or "disable" keyword to a ":menu" command.
|
|
|
|
Examples: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:menu disable &File.&Open\.\.\.
|
|
|
|
:amenu enable *
|
|
|
|
:amenu disable &Tools.*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
The command applies to the modes as used with all menu commands. Note that
|
|
|
|
characters like "&" need to be included for translated names to be found.
|
|
|
|
When the argument is "*", all menus are affected. Otherwise the given menu
|
|
|
|
name and all existing submenus below it are affected.
|
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
Examples for Menus *menu-examples*
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-07-17 17:08:56 -07:00
|
|
|
Here is an example on how to add menu items with menus! You can add a menu
|
2014-07-10 21:05:51 -07:00
|
|
|
item for the keyword under the cursor. The register "z" is used. >
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
:nmenu Words.Add\ Var wb"zye:menu! Words.<C-R>z <C-R>z<CR>
|
|
|
|
:nmenu Words.Remove\ Var wb"zye:unmenu! Words.<C-R>z<CR>
|
|
|
|
:vmenu Words.Add\ Var "zy:menu! Words.<C-R>z <C-R>z <CR>
|
|
|
|
:vmenu Words.Remove\ Var "zy:unmenu! Words.<C-R>z<CR>
|
|
|
|
:imenu Words.Add\ Var <Esc>wb"zye:menu! Words.<C-R>z <C-R>z<CR>a
|
|
|
|
:imenu Words.Remove\ Var <Esc>wb"zye:unmenu! Words.<C-R>z<CR>a
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
(the rhs is in <> notation, you can copy/paste this text to try out the
|
|
|
|
mappings, or put these lines in your gvimrc; "<C-R>" is CTRL-R, "<CR>" is
|
|
|
|
the <CR> key. |<>|)
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*tooltips* *menu-tips*
|
2018-09-21 05:59:02 -07:00
|
|
|
Tooltips & Menu tips
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
See section |42.4| in the user manual.
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:tmenu*
|
|
|
|
:tm[enu] {menupath} {rhs} Define a tip for a menu or tool. (only in
|
|
|
|
X11 and Win32 GUI)
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
:tm[enu] [menupath] List menu tips. (only in X11 and Win32 GUI)
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:tunmenu*
|
|
|
|
:tu[nmenu] {menupath} Remove a tip for a menu or tool.
|
|
|
|
(only in X11 and Win32 GUI)
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2022-06-30 02:17:27 -07:00
|
|
|
Note: To create menus for terminal mode, use |:tlmenu| instead.
|
|
|
|
|
2014-07-10 21:05:51 -07:00
|
|
|
When a tip is defined for a menu item, it appears in the command-line area
|
|
|
|
when the mouse is over that item, much like a standard Windows menu hint in
|
|
|
|
the status bar. (Except when Vim is in Command-line mode, when of course
|
|
|
|
nothing is displayed.)
|
|
|
|
When a tip is defined for a ToolBar item, it appears as a tooltip when the
|
|
|
|
mouse pauses over that button, in the usual fashion. Use the |hl-Tooltip|
|
|
|
|
highlight group to change its colors.
|
|
|
|
|
|
|
|
A "tip" can be defined for each menu item. For example, when defining a menu
|
|
|
|
item like this: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:amenu MyMenu.Hello :echo "Hello"<CR>
|
2014-07-10 21:05:51 -07:00
|
|
|
The tip is defined like this: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:tmenu MyMenu.Hello Displays a greeting.
|
2014-07-10 21:05:51 -07:00
|
|
|
And delete it with: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:tunmenu MyMenu.Hello
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
Tooltips are currently only supported for the X11 and Win32 GUI. However, they
|
|
|
|
should appear for the other gui platforms in the not too distant future.
|
|
|
|
|
|
|
|
The ":tmenu" command works just like other menu commands, it uses the same
|
|
|
|
arguments. ":tunmenu" deletes an existing menu tip, in the same way as the
|
|
|
|
other unmenu commands.
|
|
|
|
|
|
|
|
If a menu item becomes invalid (i.e. its actions in all modes are deleted) Vim
|
|
|
|
deletes the menu tip (and the item) for you. This means that :aunmenu deletes
|
|
|
|
a menu item - you don't need to do a :tunmenu as well.
|
|
|
|
|
|
|
|
|
|
|
|
5.9 Popup Menus
|
|
|
|
|
2022-06-30 00:30:54 -07:00
|
|
|
You can cause a menu to popup at the cursor. This behaves similarly to the
|
|
|
|
PopUp menus except that any menu tree can be popped up.
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
*:popup* *:popu*
|
|
|
|
:popu[p] {name} Popup the menu {name}. The menu named must
|
|
|
|
have at least one subentry, but need not
|
|
|
|
appear on the menu-bar (see |hidden-menus|).
|
2014-07-10 21:05:51 -07:00
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
:popu[p]! {name} Like above, but use the position of the mouse
|
|
|
|
pointer instead of the cursor.
|
2014-07-10 21:05:51 -07:00
|
|
|
|
|
|
|
Example: >
|
2024-12-04 17:38:44 -07:00
|
|
|
:popup File
|
2014-07-10 21:05:51 -07:00
|
|
|
will make the "File" menu (if there is one) appear at the text cursor (mouse
|
|
|
|
pointer if ! was used). >
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
:amenu ]Toolbar.Make :make<CR>
|
|
|
|
:popup ]Toolbar
|
2014-07-10 21:05:51 -07:00
|
|
|
This creates a popup menu that doesn't exist on the main menu-bar.
|
|
|
|
|
|
|
|
Note that a menu that starts with ']' will not be displayed.
|
|
|
|
|
|
|
|
|
2024-12-04 17:38:44 -07:00
|
|
|
vim:tw=78:sw=4:ts=8:et:ft=help:norl:
|