是否可以在(基于终端的)vim 中创建和使用菜单?

ico*_*ast 22 vim vimrc

我正在为一家主要基于 Windows 的公司的开发人员设置虚拟化 Linux 机器(作为本地开发服务器),并且一些开发人员对 vim(除其他外)进行了负面评价。(在他们看来,在某种程度上代表了 Linux/Unix,并证明了环境是非常难以使用的。)我记得我第一次被迫使用 vim 时,(系统管理员拒绝安装 emacs!)和困难的初始学习曲线,所以我有点同情。我突然想到,与其向他们介绍nano(他们可能永远不会通过),还可以在 vim 中设置类似 nano 的菜单以使转换更容易。(我找到了一个非常适合初学者的 .vimrc 文件,但它没有类似纳米风格的菜单。)

唯一的问题是我发现的唯一一件事是声称可以在 vim(不是 gvim)中设置菜单不起作用,而我试图纠正该问题的尝试却让我遇到了另一个需要解决的问题。在我浪费大量时间之前,我想知道这是否真的可能,因为关于如何做到这一点的信息似乎很少。

god*_*eek 23

对的,这是可能的。您可以加载menu.vim(默认的 gvim 菜单定义),或者您可以从头开始创建自己的,然后通过:emenu. 但是,这不会为您提供类似纳米的始终可见的菜单;它使您能够使用命令行选项卡完成导航菜单。

如果用户没有 vimrc,您需要先禁用 vi 兼容性:

:set nocompatible
Run Code Online (Sandbox Code Playgroud)

启用智能命令行完成<Tab>(启用列出所有可能的选择,并与导航的结果<Up><Down><Left><Right>,和<Enter>):

:set wildmenu
Run Code Online (Sandbox Code Playgroud)

在所有匹配选项之间重复按下循环:

:set wildmode=full
Run Code Online (Sandbox Code Playgroud)

加载默认菜单(这会在 gvim 中自动发生,但不会在终端 vim 中发生):

:source $VIMRUNTIME/menu.vim
Run Code Online (Sandbox Code Playgroud)

在这四个命令之后,您可以通过在:emenu命令上调用选项卡完成来手动触发菜单完成,通过执行:emenu<space><tab>

您可以使用 Tab 键和箭头键以及 Enter 键(它既可以展开子菜单又可以选择项目)浏览结果。然后,您可以更进一步,并绑定映射以弹出菜单,而不必:emenu每次都键入,从而使这更方便:

使映射中的 Ctrl-Z 就像<Tab>在命令行上交互按下一样:

:set wildcharm=<C-Z>
Run Code Online (Sandbox Code Playgroud)

并创建一个自动:emenu为您调用完成的绑定:

:map <F4> :emenu <C-Z>
Run Code Online (Sandbox Code Playgroud)

  • 杰出的!告诉我怎么给你买啤酒! (3认同)