解除绑定 ⌘F 并重新映射

解除绑定 ⌘F 并重新映射

使用 MacVim,我Commandf不是显示 OS X 的“查找/替换”对话框,而是在 Vim 中开始正常搜索,即/从正常模式发送。

即我希望 MacVim 使用 Vim 的内部搜索而不是 OS X 的查找/替换。

(我希望有一个 MacVim 特定的设置,我可以简单地在 .vimrc 中添加)

答案1

解除绑定 ⌘F 并重新映射

你可以“解除” ⌘F ( Command+ F;<D-f>在 Vim 中写为) 从编辑>寻找>寻找…菜单项MacVim:macmenu命令,然后用普通:map命令进行映射。

if has('gui_macvim')
  macmenu Edit.Find.Find\.\.\. key=<nop>
  map <D-f> /
endif

这个特定的:macmenu命令只有当你把它放在你的 中时才有效~/.gvimrc,所以上面的几行应该放在那里。

:emenu如果您调用菜单项本身(单击它或使用),Mac OS X 查找对话框仍将显示。

重新定义菜单项

另一种方法是重新定义菜单项本身。如果你想将 ⌘F 绑定到其他函数(因为编辑>寻找>寻找…菜单项会执行搜索以外的其他操作!),但这可能是可以接受的,因为您只是想开始不同风格的搜索。

您可以使用:menu命令的变体来重新定义菜单项,使其(或多或少)等同于键入/

if has("gui_macvim")
  nmenu Edit.Find.Find\.\.\. /
  vmenu Edit.Find.Find\.\.\. <C-C>/
  imenu Edit.Find.Find\.\.\. <C-\><C-O>/
  cmenu Edit.Find.Find\.\.\. <C-C>/
  omenu Edit.Find.Find\.\.\. <C-C>/
endif

这些命令的最佳位置是您~/.gvimrc(尽管原因与:macmenu上面的命令略有不同)。

这些命令涵盖正常模式、可视和选择模式、插入模式、命令模式和操作员待决模式。

这种方法意味着按下 ⌘F 并选择菜单项都会启动/基于 的搜索(即,命令行区域中紧接着的光标所指示的模式,/而不是使用基于 GUI 的:promptfind)。


命令放置

正如上述每条建议中所述,命令的放置位置很重要。如果将它们放入 中,它们应该都能正常工作~/.gvimrc。但有些命令在其他情况下也可能有效。

对菜单命令的有效性影响最大的是它们相对于 的来源的位置$VIMRUNTIME/menu.vim。此文件包含构建菜单的命令。它在~/.vimrc和之间自动获取来源~/.gvimrc,但也可以手动获取来源(例如参见:help console-menus)。此文件中的大多数命令都受 if 语句保护,因此它们只会运行一次。这意味着您可以手动获取来源,然后重新定义您的某些菜单项,.vimrc以便您可以在控制台和 GUI 模式下使用更改的菜单项。

放置nmenu,…

如果您将“重新定义菜单项”解决方案中的命令~/.vimrc放在source $VIMRUNTIME/menu.vim它们之前,它们将对您有效。如果您不先执行源,那么当稍后执行源时(即稍后执行;自动,当打开语法高亮时;自动,在基于 GUI 的 Vim 实例之前;或者手动,在提示符下),menu.vim您的定义将被覆盖。~/.vimrc~./gvimrc:

Vim 的大多数 GUI 实例都使用Edit.Find\.\.\.菜单项,但是MacVim在层次结构中插入一个Find子菜单,以匹配通常的 Mac OS X 布局,因此命令应该受到保护has('gui_macvim')(这样,如果您使用非MacVimVim 的构建)。

放置macmenu

macmenu命令仅在启动时有效。您可以在提示符下输入它:,但如果您这样使用它,它实际上不会更改任何设置。这在中提到过:help :macmenu,但我在前几次浏览文档时错过了它:

此命令必须在启动文件中使用,例如在“~/.gvimrc”中。否则无效。

在 中menu.vim,创建菜单项后,macmenu会使用一些命令来为菜单项建立默认快捷键以及它们触发的 GUI“操作”。但是,与同一文件中的菜单定义命令不同,macmenu建立这些绑定的命令不受多次运行的保护。这意味着您可以使用macmenu中的命令~/.vimrc为没有默认绑定/操作的菜单项建立绑定/操作,但必须使用这些~/.gvimrc命令来修改 中建立的绑定/操作menu.vim。这似乎是 中的一个轻微错误MacVim版本的menu.vim

因此,命令的唯一(当前)有效位置macmenu~/.gvimrc在启动时最终获取之后menu.vim。同样,某些菜单层次结构特定于MacVim,因此命令应该用 进行保护has('gui_macvim')

放置map <D-f>

键符号<D-…>看起来在大多数 Vim 版本中都有效(尽管它可能实际上只能在“Mac”版本上使用)。因此,您应该能够安全地映射命令键,而~/.vimrc不必担心导致其他版本的 Vim 出现错误。当然,在MacVim,如果您映射的键通常是菜单项快捷方式,那么您还必须将其与菜单项解除绑定(这意味着macmenu中的附带命令~/.gvimrc)。

答案2

您可以使用Command+解除绑定F麦克菜单. 示例代码.gvimrc以下:

if has("gui_macvim")
  macmenu &Edit.Find.Find\.\.\. key=<nop>
  map <D-f> /
endif

正如下面的问题所指出的,这需要你.gvimrc而不是在你的.vimrc

MacVim:重新映射命令键组合,如 <df>

相关内容