Почему всплывающее диалоговое окно из .gvimrc и командной строки отличается?

Почему всплывающее диалоговое окно из .gvimrc и командной строки отличается?

Я использую функцию gVim confirm()для вывода диалогового окна, ожидающего нажатия кнопки пользователем. Однако, похоже, есть разница во внешнем виде диалогового окна при вызове из .gvimrc:

Использование команды: :let MyTestV = confirm("IN MY_GVIMRC")генерирует следующий диалог:

введите описание изображения здесь

Если эта строка (без :) добавляется в файл .gvimrc.vimrcтакже ), при открытии нового gVim появляется следующее:

введите описание изображения здесь

Обратите внимание, что диалоговое окно появляется до того, как на экране появляется само окно gVim.

1) Почему внешний вид двух диалогов отличается?

2) Где мне поместить команду, чтобы диалоговое окно отображалось так, как ожидается?

решение1

Я подозреваю, что это разновидность типичного класса ошибок "состояния гонки". Запустите версию Vim без графического интерфейса и выполните команду confirm(), и вы увидите, откуда берется дополнительный текст. По сути, Vim помещает confirm()текст без графического интерфейса во всплывающее окно графического интерфейса, потому что на момент .vimrcзапуска графический интерфейс еще не был доступен.

Предлагаю вам отправить сообщение bugsпо адресу vim.org(адрес слегка замаскирован, чтобы замедлить спам-ботов) с отчетом об этом. Вы даже можете дать ссылку на этот вопрос SuperUser.

Редактировать:Эта проблема даже хуже, чем я подозревал. Я решил проверить, смогу ли я ее воспроизвести, и вставил эту команду в свой .vimrc:

echo confirm('test')

И я получил тот же результат, что и вы, носдобавлена ​​дополнительная строка, состоящая из 1возвращаемого значения функции confirmed(). Что-то здесь определенно не так.

Редактирование два:Если отсрочка confirm()диалога вас не смущает, вы можете сделать следующее:

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

решение2

Я думаю, вы сталкиваетесь с неопределенным поведением; функции, взаимодействующие с пользователем, не должны выполняться из ~/.vimrc, поскольку графический интерфейс пользователя еще не был должным образом инициализирован. :help input()содержит предупреждение:

ПРИМЕЧАНИЕ. Эту функцию нельзя использовать в файле запуска для версий, которые работают только в режиме графического интерфейса (например, Win32 GUI).

Если вам необходимо запросить что-либо у пользователя сразу после запуска, используйте :autocmd VimEnterдля этого функцию.

Связанный контент