Como posso evitar que o MacVim mostre a caixa de diálogo 'Localizar / Substituir' do OS X ao pressionar Command-F?

1

Usando o MacVim, eu gostaria que o Comando - f mostrasse não a caixa de diálogo Localizar / Substituir do OS X, mas começando um pesquisa no Vim, ou seja, enviando / do modo normal.

Ou seja. Eu gostaria que o MacVim usasse a busca interna do Vim ao invés do Find / Replace do OS X.

(Espero que exista uma configuração específica do MacVim que eu possa simplesmente adicionar em .vimrc)

    
por Henrik 05.08.2011 / 20:05

2 respostas

8

Desvincular ⌘F e Remapear

Você pode "desvincular" (F (Comando + F ; escrito como <D-f> no Vim) a partir do Editar > Encontre > Encontre ... item de menu com o comando :macmenu do MacVim e, em seguida, mapeie-o com um comando normal :map .

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

Este comando :macmenu específico só é efetivo se você o colocar no seu ~/.gvimrc , então as linhas acima devem ser colocadas lá.

A caixa de diálogo de localização do Mac OS X ainda será exibida se você chamar o próprio item de menu (clicando nele ou usando :emenu ).

Redefinir o item de menu

Uma abordagem alternativa é redefinir os próprios itens de menu. Isso seria inadequado se você quisesse vincular ⌘F a alguma função diferente (já que o item de menu Editar > Localizar > Localizar ... seria faça algo diferente de uma pesquisa!), mas pode ser aceitável, já que você só quer iniciar um estilo diferente de pesquisa.

Você pode usar variações no comando :menu para redefinir o item de menu para ser (mais ou menos) equivalente a digitar / :

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

O melhor lugar para esses comandos é o ~/.gvimrc (embora por razões ligeiramente diferentes do que o comando :macmenu acima).

Esses comandos abrangem o modo normal, os modos visual e de seleção, o modo de inserção, o modo de comando e o modo de operador pendente.

Essa abordagem significa que pressionar ⌘F e selecionar o item de menu iniciará uma pesquisa baseada em / (ou seja, o modo indicado pelo cursor logo após / na área da linha de comando, em vez de usar o :promptfind ).

Colocação de Comando

Como observado em cada uma das sugestões acima, o posicionamento dos comandos é importante. Eles devem funcionar corretamente se você os colocar em ~/.gvimrc . Mas alguns dos comandos também podem ser eficazes em outros contextos.

A maior influência na eficácia dos comandos de menu é a sua posição em relação ao fornecimento de $VIMRUNTIME/menu.vim . Este arquivo contém os comandos que constroem os menus. Ele é automaticamente originado entre ~/.vimrc e ~/.gvimrc , mas também pode ser proveniente manualmente (por exemplo, ver :help console-menus ). A maioria dos comandos neste arquivo é protegida por uma instrução if para que eles sejam sempre executados apenas uma vez. Isso significa que você poderia obtê-lo manualmente e redefinir alguns dos itens de menu no seu .vimrc para que você pudesse usar os itens de menu alterados nos modos de console e GUI.

Posicionamento de nmenu ,…

Os comandos da solução "Redefinir o item de menu" podem ser eficazes no seu ~/.vimrc se você colocar source $VIMRUNTIME/menu.vim antes deles. Se você não originar menu.vim primeiro, suas definições serão sobrescritas se / quando forem originadas posteriormente (isto é, mais tarde em ~/.vimrc ; automaticamente, ao ativar o realce de sintaxe; automaticamente, antes de ~./gvimrc para instâncias baseadas em GUI do Vim; ou manualmente, em um prompt : ).

A maioria das instâncias de GUI do Vim usa Edit.Find\.\.\. para o item de menu, mas MacVim insere um submenu Find na hierarquia para corresponder ao arranjo habitual do Mac OS X, portanto os comandos devem ser protegidos por has('gui_macvim') (para que eles não causem erros se você usar seu arquivo de inicialização com uma compilação não-em MacVim do Vim).

Posicionamento de macmenu

O comando macmenu só é efetivo no momento da inicialização. Você pode digitá-lo em um prompt : , mas ele não altera nenhuma configuração se você usá-lo dessa maneira. Isso é mencionado em :help :macmenu , mas perdi as primeiras vezes em que examinei a documentação:

This command must be used in a startup file, for example in "~/.gvimrc". It has no effect otherwise.

Em menu.vim , depois que os itens de menu foram criados, alguns comandos macmenu são usados para estabelecer as teclas de atalho padrão para os itens de menu e as "ações" de GUI que eles acionam. No entanto, ao contrário dos comandos de definição de menu no mesmo arquivo, os comandos macmenu que estabelecem essas ligações não são protegidos de serem executados várias vezes. Isso significa que você pode usar os comandos macmenu em ~/.vimrc para estabelecer ligações / ações para itens de menu que não possuem ligações / ações padrão, mas você deve usar ~/.gvimrc para modificar as ligações / ações estabelecidas em menu.vim . Isso parece um pequeno bug na versão MacVim de menu.vim .

Portanto, o único lugar (atualmente) válido para o comando macmenu está em ~/.gvimrc , após o último fornecimento de tempo de inicialização de menu.vim . E novamente, algumas das hierarquias de menu são específicas para MacVim , então os comandos devem ser protegidos com has('gui_macvim') .

Posicionamento de map <D-f>

A notação chave <D-…> parece válida na maioria das compilações do Vim (embora provavelmente seja apenas utilizável em versões “Mac”). Portanto, você deve poder mapear com segurança as teclas de comando no seu ~/.vimrc sem se preocupar em causar erros para outras compilações do Vim. Claro que, em MacVim , se você estiver mapeando uma chave que normalmente é um atalho de item de menu, você também terá que desvinculá-la do item de menu (o que significa um comando macmenu em ~/.gvimrc ).

    
por 06.08.2011 / 13:16
1

Você pode desvincular o comando + F usando macmenu . Exemplo de código para você .gvimrc abaixo:

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

Como apontado na pergunta abaixo, isso precisa estar em você .gvimrc e não no seu .vimrc

MacVim: mapeie as combinações de teclas de comando, como < d- f >

    
por 06.08.2011 / 18:35