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

374
ysap

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

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

enter image description here

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

enter image description here

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

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

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

1

2 ответа на вопрос

1
Heptite

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

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

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

echo confirm('test') 

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

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

autocmd VimEnter * let MyTestV = confirm("IN MY_GVIMRC") 
Спасибо за ответ. Помещение этого файла в файл запуска не означало быть чем-то постоянным, просто я играл с файлами запуска и недавно обнаруженной функцией verify (). Я был просто удивлен, увидев такое поведение. Ваше решение для Edit Two имеет смысл (и было подтверждено @IngoKarkat). ysap 10 лет назад 0
1
Ingo Karkat

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

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

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

Благодарю. Возможно Вы правы. Ваше решение было также предложено @Heptite. Мне просто интересно, следует ли об этом сообщать как об ошибке, как он предположил (вероятно, нет, поскольку это ожидается, если GUI действительно будет перезапущен после сценариев инициализации). ysap 10 лет назад 0
Ответ на сообщение об ошибке от Braam Moolenaar подтверждает, что это ожидаемое поведение. ysap 10 лет назад 0