
Я использую функцию 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
для этого функцию.