
Estou usando confirm()
a função do gVim para abrir uma caixa de diálogo aguardando o usuário clicar em um botão. No entanto, parece haver uma diferença na aparência da caixa de diálogo quando chamada from .gvimrc
:
Usando o comando: :let MyTestV = confirm("IN MY_GVIMRC")
gera a seguinte caixa de diálogo:
Quando esta linha (sem o :
) é adicionada em um arquivo .gvimrc
(e .vimrc
também), o seguinte aparece quando um novo gVim é aberto:
Observe que a caixa de diálogo aparece antes da janela real do gVim aparecer na tela.
1) Por que há diferença na aparência dos dois diálogos?
2) Onde posso colocar o comando para que a caixa de diálogo apareça conforme o esperado?
Responder1
Eu suspeito que esta seja uma variante da típica classe de bugs de "condição de corrida". Inicie uma versão não GUI do Vim e execute seu confirm()
comando e você verá de onde vem o texto extra. Basicamente, o Vim está colocando o confirm()
texto não-GUI no pop-up da GUI porque, no momento em que você .vimrc
é executado, a GUI ainda não está disponível.
Sugiro que você envie um e-mail bugs
para vim.org
(endereço ligeiramente ofuscado para retardar os spambots) com um relatório sobre isso. Você pode até criar um link para esta pergunta do SuperUser.
Editar:Este problema é ainda pior do que eu suspeitava. Resolvi ver se conseguia reproduzi-lo e coloquei este comando no meu .vimrc
:
echo confirm('test')
E obtive o mesmo resultado que você, mascomuma linha extra adicionada consistindo 1
no valor de retorno da função confirm(). Definitivamente, algo está errado aqui.
Editar dois:Se atrasar o confirm()
diálogo não for um problema, você pode fazer o seguinte:
autocmd VimEnter * let MyTestV = confirm("IN MY_GVIMRC")
Responder2
Acho que você está tendo um comportamento indefinido; funções que interagem com o usuário não devem ser executadas ~/.vimrc
, pois a GUI ainda não foi inicializada corretamente. :help input()
contém um aviso:
NOTA: Esta função não deve ser utilizada em um arquivo de inicialização, para versões que rodam apenas em modo GUI (por exemplo, GUI Win32).
Se você precisar consultar algo do usuário imediatamente após a inicialização, use :autocmd VimEnter
para acioná-lo.