Por que há uma diferença na caixa de diálogo pop-up de .gvimrc e na linha de comando?

Por que há uma diferença na caixa de diálogo pop-up de .gvimrc e na linha de comando?

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:

insira a descrição da imagem aqui

Quando esta linha (sem o :) é adicionada em um arquivo .gvimrc(e .vimrctambém), o seguinte aparece quando um novo gVim é aberto:

insira a descrição da imagem aqui

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 bugspara 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 1no 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 VimEnterpara acioná-lo.

informação relacionada