Nvim :help
页面,生成 于 源代码,使用 tree-sitter-vimdoc 解析器。
:menu {menu-item} {keys}
{menu-item}
描述了在菜单的何处放置该项。一个典型的 {menu-item}
是 "File.Save",它表示 "File" 菜单下的 "Save" 项。用点号分隔名称。示例:menu File.Save :update<CR>":update" 命令在文件被修改时写入文件。您可以添加另一个级别:"Edit.Settings.Shiftwidth" 定义了 "Edit" 菜单下的 "Settings" 子菜单,其中包含 "Shiftwidth" 项。您可以使用更深的级别。不要过度使用它,因为您需要移动鼠标才能使用此类项。":menu" 命令与 ":map" 命令非常相似:左侧指定如何触发该项,右侧定义要执行的字符。
{keys}
是字符,它们的用法与您键入它们的方式相同。因此在插入模式下,当 {keys}
是纯文本时,该文本将被插入。{menu-item}
看起来像 "&File.&Save"。加速键字符将在菜单中带下划线。您必须确保每个键在每个菜单中仅使用一次。否则,您将不知道这两个键中的哪个将被实际使用。Vim 不会为此发出警告。:menu 10.340 &File.&Save<Tab>:w :confirm w<CR>数字 10.340 称为优先级数字。编辑器使用它来决定菜单项的放置位置。第一个数字 (10) 表示菜单栏上的位置。数字越低,菜单的位置越靠左,数字越高,菜单的位置越靠右。这些是标准菜单使用的优先级
+-----------------+ 10.310 |Open... | 10.320 |Split-Open... | 10.325 |New | 10.330 |Close | 10.335 |---------------- | 10.340 |Save | 10.350 |Save As... | 10.400 |---------------- | 10.410 |Split Diff with | 10.420 |Split Patched By | 10.500 |---------------- | 10.510 |Print | 10.600 |---------------- | 10.610 |Save-Exit | 10.620 |Exit | +-----------------+
{menu-item}
中的每个名称都有自己的优先级数字。{menu-item}
是 "&File.&Save<Tab>:w"。这指出了一个重要的一点:{menu-item}
必须是一个单词。如果您想在名称中添加点号、空格或制表符,可以使用 <> 符号(例如,<Space>
和 <Tab>
),或者使用反斜杠 (\) 进行转义。:menu 10.305 &File.&Do\ It\.\.\. :exit<CR>在此示例中,菜单项 "Do It..." 的名称包含一个空格,并且命令是 ":exit<CR>"。
<Tab>
字符用于分隔定义菜单名称的部分和提供用户提示的部分。<Tab>
后面的部分在菜单中右对齐显示。在 File.Save 菜单中,使用的名称是 "&File.&Save<Tab>:w"。因此,菜单名称是 "File.Save",提示是 ":w"。:amenu 20.510 Edit.-sep3- :
{keys}
将在正常模式下执行。当 Vim 在 Visual 或 Insert 模式下使用菜单时,Vim 首先必须返回到正常模式。":amenu" 会为您插入 CTRL-C
或 CTRL-O
。例如,如果您使用此命令:amenu 90.100 Mine.Find\ Word *那么生成的菜单命令将是
*
Visual 模式:CTRL-C
*
Operator-pending 模式:CTRL-C
*
插入模式:CTRL-O
*
命令行模式:CTRL-C
*
CTRL-C
将放弃到目前为止键入的命令。在 Visual 和 Operator-pending 模式下,CTRL-C
将停止该模式。Insert 模式下的 CTRL-O
将执行该命令,然后返回到 Insert 模式。CTRL-O
只对一个命令有效。如果您需要使用两个或多个命令,请将它们放在一个函数中并调用该函数。示例:amenu Mine.Next\ File :call <SID>NextFile()<CR> :function <SID>NextFile() : next : 1/^Code :endfunction此菜单条目使用 ":next" 进入参数列表中的下一个文件。然后它搜索以 "Code" 开头的行。函数名前面的
<SID>
是脚本 ID。这使函数对当前 Vim 脚本文件局部。这避免了在另一个脚本文件中定义了相同名称的函数时出现问题。参见 <SID>.{keys}
,就像您键入它们一样。对于 ":" 命令,这意味着您将看到该命令在命令行上回显。如果这是一个长命令,将出现 hit-Enter 提示。这可能会非常烦人!为了避免这种情况,请使菜单静默。这是通过 <silent>
参数完成的。例如,以前面示例中的 NextFile() 调用为例。当您使用此菜单时,您将在命令行上看到以下内容<SNR>
34_NextFile():amenu <silent> Mine.Next\ File :call <SID>NextFile()<CR>不要过分使用 "<silent>"。对于短命令,它是不需要的。如果您为其他人创建菜单,能够看到执行的命令将为他们提供一个关于他们可以键入什么内容的提示,而不是使用鼠标。
{keys}
部分的情况下使用时,它将列出已定义的菜单。您可以指定 {menu-item}
或其一部分,以列出特定菜单。示例:amenu这将列出所有菜单。这是一个很长的列表!最好指定菜单的名称以获得更短的列表
:amenu Edit这将仅列出所有模式下的 "Edit" 菜单项。要仅列出 Insert 模式下的一个特定菜单项
:imenu Edit.Undo请注意,您必须键入完全正确的名称。这里区分大小写。但是,加速键的 '&' 可以省略。
<Tab>
以及它后面的内容也可以省略。:iunmenu Tools.Make您可以通过使用菜单名称来删除整个菜单及其所有项。示例
:aunmenu Syntax这将删除 "Syntax" 菜单及其中的所有项。
:set guioptions-=m
:amenu File.Open :browse confirm edit<CR>":browse" 会弹出一个文件浏览器,用于选择要编辑的文件。":confirm" 会在当前缓冲区包含更改时弹出一个对话框。然后,您可以选择保存更改、丢弃更改或取消命令。对于更复杂的项,可以使用 confirm() 和 inputdialog() 函数。默认菜单中包含一些示例。
{menu-item}
会导致 "New" 图标出现在工具栏上。Vim 编辑器有 28 个内置图标。您可以在此处找到一个表格:builtin-tools。大多数图标用于默认工具栏。您可以重新定义这些项的功能(在设置默认菜单后)。您可以为工具栏项添加另一个位图。或者定义一个使用位图的新工具栏项。例如,定义一个使用以下内容的新工具栏项:tmenu ToolBar.Compile Compile the current file :amenu ToolBar.Compile :!cc %:S -o %:r:S<CR>现在您需要创建图标。对于 MS-Windows,它必须是位图格式,名称为 "Compile.bmp"。对于 Unix,使用 XPM 格式,文件名是 "Compile.xpm"。大小必须为 18x18 像素。在 MS-Windows 上,也可以使用其他大小,但看起来会很丑。将位图放在 'runtimepath' 中的某个目录下的 "bitmaps" 目录中。例如,对于 Unix, "~/.config/nvim/bitmaps/Compile.xpm"。
:tmenu ToolBar.Make Run make in the current directory