Уберите ⌘F и переназначьте его
Вы можете «отменить привязку» ⌘F (Command+F ; записывается как <D-f>
в Vim) из пункта меню « Правка» > « Найти» > « Найти ...» с помощью команды MacVim 's :macmenu
а затем сопоставить его с помощью команды normal :map
.
if has('gui_macvim')
macmenu Edit.Find.Find\.\.\. key=<nop>
map <D-f> /
endif
Эта команда :macmenu
эффективна только в том случае, если вы поместите ее в ~/.gvimrc
, поэтому приведенные выше строки должны быть размещены там.
Диалоговое окно поиска Mac OS X по-прежнему будет отображаться, если вы вызовете сам пункт меню (щелкнув по нему или используя :emenu
).
Переопределить пункт меню
Альтернативный подход заключается в переопределении самих пунктов меню. Это было бы неуместно, если вы хотите связать ⌘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-based :promptfind
).
Размещение команд
Как отмечено в каждом из приведенных выше предложений, размещение команд имеет важное значение. Каждый из них должен работать правильно, если вы поместите их в ~/.gvimrc
. Но некоторые команды также могут быть эффективными в других контекстах.
Наибольшее влияние на эффективность команд меню оказывает их расположение по отношению к источнику $VIMRUNTIME/menu.vim
. Этот файл содержит команды, которые создают меню. Он автоматически поступает между ~/.vimrc
и ~/.gvimrc
, но также может быть источником вручную (например, см :help console-menus
). Большинство команд в этом файле защищены оператором if, поэтому они выполняются только один раз. Это означает, что вы можете получить его вручную, а затем переопределить некоторые пункты меню в вашем .vimrc
чтобы вы могли использовать измененные пункты меню как в режиме консоли, так и в графическом режиме.
Размещение nmenu
,…
Команды из решения «Переопределить пункт меню» могут быть эффективными в вашем ~/.vimrc
если вы поставите перед ними source $VIMRUNTIME/menu.vim
. Если вы сначала не используете исходный код menu.vim
, то ваши определения будут перезаписаны, если / когда он будет получен позднее (т.е. позже в ~/.vimrc
; автоматически, при включении подсветки синтаксиса; автоматически, перед ~./gvimrc
для GUI- основанные экземпляры Vim, или вручную, при :
приглашение).
Большинство экземпляров Vim с графическим интерфейсом используют Edit.Find\.\.\.
для пункта меню, но MacVim вставляет подменю Find
в иерархию, чтобы соответствовать обычному расположению Mac OS X, поэтому команды должны быть защищены с помощью has('gui_macvim')
(чтобы они не вызывали ошибок, если вы когда-либо используете свой запуск файл со сборкой Vim, не относящейся к MacVim ).
Размещение 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»). Таким образом, вы должны иметь возможность безопасно отображать клавиши Command в вашем ~/.vimrc
не беспокоясь о том, что вы можете вызвать ошибки для других сборок Vim. Конечно, в MacVim, если вы отображаете клавишу, которая обычно является ярлыком пункта меню, вам также придется отсоединить его от пункта меню (что означает сопровождающую команду macmenu
в ~/.gvimrc
).