¿Por qué hay una diferencia en el cuadro de diálogo emergente entre .gvimrc y la línea de comando?

¿Por qué hay una diferencia en el cuadro de diálogo emergente entre .gvimrc y la línea de comando?

Estoy usando confirm()la función de gVim para abrir un cuadro de diálogo esperando que el usuario haga clic en un botón. Sin embargo, parece haber una diferencia en la apariencia del cuadro de diálogo cuando se llama desde .gvimrc:

Usando el comando: :let MyTestV = confirm("IN MY_GVIMRC")genera el siguiente diálogo:

ingrese la descripción de la imagen aquí

:Cuando se agrega esta línea (sin ) en un archivo .gvimrc(y .vimrctambién en él), aparece lo siguiente cuando se abre un nuevo gVim:

ingrese la descripción de la imagen aquí

Tenga en cuenta que el cuadro de diálogo aparece antes de que aparezca la ventana de gVim real en la pantalla.

1) ¿Por qué hay una diferencia en la apariencia de los dos cuadros de diálogo?

2) ¿Dónde puedo poner el comando para que el diálogo aparezca como se esperaba?

Respuesta1

Sospecho que esta es una variante de la típica clase de errores de "condición de carrera". Inicie una versión de Vim sin GUI y ejecute su confirm()comando y verá de dónde proviene el texto adicional. Básicamente, Vim está colocando el texto que no es GUI confirm()en la ventana emergente de GUI porque, en el momento de .vimrcejecutarlo, la GUI aún no está disponible.

Le sugiero que envíe un correo electrónico bugsa vim.org(dirección ligeramente ofuscada para ralentizar los robots de spam) con un informe sobre esto. Incluso podrías vincular a esta pregunta de superusuario.

Editar:Este problema es incluso peor de lo que sospechaba. Decidí ver si podía reproducirlo y puse este comando en mi .vimrc:

echo confirm('test')

Y obtuve el mismo resultado que tú, peroconSe agregó una línea adicional que consiste en 1el valor de retorno de la función confirm(). Definitivamente algo anda mal aquí.

Edición dos:Si retrasar el confirm()diálogo no es un problema, puedes hacer esto en su lugar:

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

Respuesta2

Creo que te estás topando con un comportamiento indefinido; Se supone que las funciones que interactúan con el usuario no deben ejecutarse desde ~/.vimrc, ya que la GUI aún no se ha inicializado correctamente. :help input()contiene una advertencia:

NOTA: Esta función no debe usarse en un archivo de inicio, para las versiones que solo se ejecutan en modo GUI (por ejemplo, la GUI de Win32).

Si necesita consultar algo del usuario inmediatamente después del inicio, utilice :autocmd VimEnterpara activarlo.

información relacionada