使用 MacVim,我Command想f不是显示 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