1

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

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

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

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

1) Почему есть разница в появлении двух диалогов?

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

2 ответа2

1

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

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

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

1

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

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

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

echo confirm('test')

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

Изменить два: если задержка вашего диалога confirm() не является проблемой, вы можете сделать это вместо этого:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .