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

1

Estou usando a função confirm() do gVim para abrir uma caixa de diálogo esperando que o usuário clique em um botão. No entanto, parece haver uma diferença na aparência do diálogo quando chamado de .gvimrc :

Usando o comando: :let MyTestV = confirm("IN MY_GVIMRC") gera o seguinte diálogo:

Quandoessalinha(semo:)éadicionadaemumarquivo.gvimrc(eo.vimrctambém),oseguinteaparecequandoumnovogViméaberto:

Observe que a caixa de diálogo aparece antes que a janela gVim real apareça na tela.

1) Por que há uma diferença na aparência dos dois diálogos?

2) Onde posso colocar o comando para que a caixa de diálogo apareça como esperado?

    
por ysap 21.03.2014 / 19:34

2 respostas

1

Eu suspeito que essa seja uma variante da típica classe de "condição de corrida" de bugs. Inicie uma versão não-GUI do Vim e execute o comando confirm() e você verá de onde vem o texto extra. Basicamente, o Vim está colocando o texto não-GUI confirm() no pop-up da GUI porque, no momento em que o .vimrc está sendo executado, a GUI ainda não está disponível.

Sugiro que você envie um e-mail para bugs at vim.org (endereço ligeiramente ofuscado para desacelerar spambots) com um relatório sobre isso. Você pode até mesmo vincular a essa pergunta do SuperUser.

Edit: Esse problema é ainda pior do que eu suspeitava. Eu decidi ver se eu poderia reproduzi-lo e coloquei este comando no meu .vimrc :

echo confirm('test')

E eu obtive o mesmo resultado que você fez, mas com uma linha extra adicionada consistindo de 1 , que é o valor de retorno da função confirm (). Algo está definitivamente errado aqui.

Editar dois: Se atrasar sua caixa de diálogo confirm() não for um problema, você pode fazer isso:

autocmd VimEnter * let MyTestV = confirm("IN MY_GVIMRC")
    
por 21.03.2014 / 20:01
1

Eu acho que você está correndo em um comportamento indefinido; funções que interagem com o usuário não devem ser executadas a partir de ~/.vimrc , já que a GUI ainda não foi inicializada corretamente. :help input() contém um aviso:

NOTE: This function must not be used in a startup file, for the versions that only run in GUI mode (e.g., the Win32 GUI).

Se você precisar consultar algo do usuário imediatamente após a inicialização, use :autocmd VimEnter para ativá-lo.

    
por 22.03.2014 / 13:43