按下 Command-F 时,如何防止 MacVim 显示 OS X 的“查找/替换”对话框?

Hen*_*rik 1 search shortcuts macvim find macos

使用的MacVim,我想Command-f显示OS X”查找/替换对话框,而是开始在Vim的,即发送一个正常的搜索/从正常模式。

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

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

Chr*_*sen 8

解除绑定 ?F 并重新映射它

您可以使用MacVim的命令从Edit > Find > Find...菜单项“解除绑定” ?F ( Command+ F;<D-f>在 Vim 中编写) ,然后使用普通命令映射它。:macmenu:map

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

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

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

重新定义菜单项

另一种方法是重新定义菜单项本身。如果您想将 ?F 绑定到某个不同的功能,这将是不合适的(因为Edit > Find > Find...菜单项会执行搜索以外的其他操作!),但它可能是可以接受的,因为您只想开始不同的样式的搜索。

您可以使用: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
Run Code Online (Sandbox Code Playgroud)

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

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

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


命令放置

正如上述每个建议中所指出的,命令的位置很重要。如果您将它们放入~/.gvimrc. 但是某些命令在其他上下文中也可能有效。

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

的位置nmenu,…

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

Vim 的大多数 GUI 实例都Edit.Find\.\.\.用于菜单项,但MacVimFind在层次结构中插入一个子菜单以匹配通常的 Mac OS X 排列,因此命令应该受到保护has('gui_macvim')(这样如果您使用启动文件,它们就不会导致错误使用非MacVim构建的 Vim)。

放置 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(尽管它可能是唯一真正的“苹果”可用版本)。因此,您应该能够安全地映射 Command 键,~/.vimrc而不必担心会导致其他 Vim 版本出错。当然,在MacVim 中,如果您要映射一个通常是菜单项快捷方式的键,您还必须将其与菜单项解除绑定(这意味着 中的伴随macmenu命令~/.gvimrc)。