
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:
:
Cuando se agrega esta línea (sin ) en un archivo .gvimrc
(y .vimrc
también en él), aparece lo siguiente cuando se abre un nuevo gVim:
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 .vimrc
ejecutarlo, la GUI aún no está disponible.
Le sugiero que envíe un correo electrónico bugs
a 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 1
el 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 VimEnter
para activarlo.