Perché c'è una differenza nella finestra di dialogo popup da .gvimrc e dalla riga di comando?


1

Sto usando la confirm()funzione di gVim per far apparire una finestra di dialogo in attesa che l'utente faccia clic su un pulsante. Tuttavia, sembra esserci una differenza nell'aspetto della finestra di dialogo quando viene chiamato da .gvimrc:

Utilizzando il comando: :let MyTestV = confirm("IN MY_GVIMRC")genera la seguente finestra di dialogo:

inserisci qui la descrizione dell'immagine

Quando questa riga (senza il :) viene aggiunta in un file .gvimrc(e .vimrcanche), quando viene aperto un nuovo gVim appare quanto segue:

inserisci qui la descrizione dell'immagine

Si noti che la finestra di dialogo viene visualizzata prima che la finestra gVim effettiva venga visualizzata sullo schermo.

1) Perché c'è una differenza nell'aspetto dei due dialoghi?

2) Dove posso inserire il comando in modo che la finestra di dialogo appaia come previsto?

Risposte:


1

Sospetto che questa sia una variante della tipica classe di bug "condizioni di gara". Avvia una versione non GUI di Vim ed esegui il tuo confirm()comando e vedrai da dove proviene il testo aggiuntivo. Fondamentalmente, Vim sta inserendo il confirm()testo non-GUI nel popup della GUI perché, al momento .vimrcdell'esecuzione, la GUI non è ancora effettivamente disponibile.

Ti suggerisco di inviare un'e-mail bugsa vim.org(indirizzo leggermente offuscato per rallentare gli spambots) con un rapporto a riguardo. Potresti anche collegare a questa domanda SuperUser.

Modifica: questo problema è persino peggiore di quanto sospettassi. Ho deciso di vedere se potevo riprodurlo e ho inserito questo comando nel mio.vimrc:

echo confirm('test')

E ho ottenuto lo stesso risultato che hai fatto, ma con l'aggiunta di una riga aggiuntiva composta da 1quale è il valore di ritorno della funzione confirm (). C'è qualcosa di decisamente sbagliato qui.

Modifica due: se ritardare laconfirm()finestra di dialogo non è un problema, è possibile farlo:

autocmd VimEnter * let MyTestV = confirm("IN MY_GVIMRC")

Grazie per la risposta. Inserirlo nel file di avvio non significava essere qualcosa di permanente, solo io che giocavo con i file di avvio e la funzione di conferma () appena scoperta. Sono stato solo sorpreso di vedere questo comportamento. La tua soluzione su Edit Two ha senso (ed è stata confermata da @IngoKarkat).

1

Penso che stai incontrando un comportamento indefinito; le funzioni che interagiscono con l'utente non dovrebbero essere eseguite in ~/.vimrcquanto la GUI non è stata ancora inizializzata correttamente. :help input()contiene un avviso:

NOTA: questa funzione non deve essere utilizzata in un file di avvio, per le versioni che funzionano solo in modalità GUI (ad esempio, la GUI Win32).

Se è necessario eseguire una query sull'utente immediatamente dopo l'avvio, utilizzare :autocmd VimEnterper attivarlo.


Grazie. Probabilmente hai ragione. La tua soluzione è stata suggerita anche da @Heptite. Mi chiedo solo se questo dovrebbe essere segnalato come un bug, come ha suggerito (probabilmente no, poiché ciò è previsto supponendo che la GUI venga davvero riavviata dopo gli script di init).

Una risposta a una segnalazione di bug di Braam Moolenaar conferma che si tratta di un comportamento previsto.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.