我在我的~/.vimrc
' (除其他外):
set guioptions += M
set guioptions -= m
禁用MacVim中的菜单。我发现遗漏了+=M
'导致许多键被映射(菜单热键等)。
我真正想要的系统菜单提供了一个工具:能够显示所有当前的MacVim" windows" (在操作系统意义上,而不是Vim意义上的"分裂")。例如,我可以做这样的事情(可能在单独的shell中,在不同的时间):
$ mvim foo.txt
$ mvim bar.txt
$ mvim baz.txt
这将产生3个独立的MacVim" windows"。使用"设置go = + M"没有设置,我可以去" Windows"菜单并查看列出的这三个实例,并可选择选择其中一个。
有没有办法在不启用系统菜单的情况下执行此操作,或至少启用其余菜单?
我的动机是:经过一段时间后,我倾向于最终得到许多不同的MacVim" windows"跨多个桌面空间(我也倾向于使用大量的桌面空间)。有时我会尝试打开,例如" foo.txt",只是为了获得通知" foo.txt"已经开放了。打开它打开的窗口是一件麻烦事。是的,是的,我想我可以改变我处理这个问题的整个方式 - 将自己限制在一个MacVim窗口,遵守我不会立即处理等文件的规定等等。但是缺少这个,是吗?我可以做的其他事情?
如果有一个命令可以从shell或Vim中发出,我会很高兴,它列出了窗口并允许我激活我的一个选择。
事实证明,MacVim有一个' :macaction selectNextWindow:
'命令,至少允许我循环遍历各种实例:
nnoremap <silent> <M-`> :macaction selectNextWindow:<CR>
nnoremap <silent> <D-`> :macaction selectNextWindow:<CR>
nnoremap <silent> <M-S-`> :macaction selectPreviousWindow:<CR>
nnoremap <silent> <D-S-`> :macaction selectPreviousWindow:<CR>
我映射了命令(&#39; <D->
&#39;)和meta(&#39; <M->
&#39;),因为前一个映射仅适用于MacVim窗口相同的桌面空间。奇怪的。部分解决方案是我(最终)找到我想要的窗口/实例,但复杂度O(n)
。窗口列表将使其成为O(1)
。
答案 0 :(得分:0)
通常可以使用以下命令从命令行访问菜单:
:amenu Edit
但是将M
添加到'guioptions'
意味着没有任何菜单被加载,因此:amenu
在您的情况下无用。
无论如何,该窗口列表功能由MacVim的Cocoa包装器提供:它是任何GUI应用程序在XCode中创建时免费获得的默认功能的一部分。然而,MacVim似乎没有将它暴露给Vim核心,所以你有点性交:
:amenu
,set guioptions+=M
摆脱所有菜单,Vim提供的菜单和 Cocoa提供的菜单。还有另一种方法来查看您的问题:MacVim GUI窗口实际上是单独的Vim实例,它们都作为服务器运行(请参阅:help clientserver
),您可以发出:
$ vim --serverlist
或:
:echo serverlist()
但我不知道管理单独服务器的任何高级解决方案,我觉得提出一个可靠的解决方案并不是一件容易的事。
另一种查看问题的方法是有选择地unmap
所有不需要的映射而不会弄乱菜单。
所以是的......我的建议是找到另一个更有针对性的工作流程。
如果您经常使用mvim
但不想要这些与菜单相关的映射,那么您也可以使用mvim -v
直接在您的终端中工作,几乎可以肯定地解决您的映射问题和一次性打开“多个实例中打开的同一文件”。