(Этот ответ, вероятно, фрагментирован значительно, мне потребовалось некоторое время, чтобы поиграть - я тоже хотел найти решение, потому что это заинтриговало меня - не только щедрость 200: П. Это более или менее показывает мой ход мысли и экспериментирование.)
Теперь я могу воспроизвести его с помощью gvim
на Linux, то есть /usr/bin/vim.gnome -g
; бег как vim -g
делает так же.
Копаясь в код: (бесполезно в этом случае, но весело делать и научиться делать)
Я просмотрел исходный код, и теперь я могу объяснить это несколько (но не полезно!); он получает outfile
FILE (src/globals.h:1004
) комплект (src/main.h:2275
); это затем записывается в src/getchar.h:1501
в методе updatescript
, который используется gotchars
(строка 1215), который используется vgetorpeek
, который используется vgetc
и vpeekc
... (нет, я не знаю, где это происходит!), то они используются в ряде мест.
В любом случае, я полагаю, что ключ находится где-то в src/gui.c
, но я не знаю, где на данный момент! Также возможно, что некоторая ключевая последовательность «отправляется» (физически или практически, я не знаю), но, видя, что проблема одинакова на разных платформах, скорее всего, это проблема Vim, чем в противном случае.
Интересные ситуации приводит к вероятному объяснению:
Также стоит отметить, что если вы автоматически бросить курить, gvim -u NONE -w scriptout -c quit
(:quit
после загрузки) или gvim -u NONE -w scriptout -c quit
(мгновенное :quit
, никогда не показывает GUI), то файл сценария остается пустым.
Кроме того, если вы открыты Gvim, а затем закройте его с помощью кнопки X, не нажимая ни одной клавиши:
0000000: 80fd 6280 fd63 80fd 62 ..b..c..b
Если открыть Gvim, щелкнуть по кнопке, нажмите назад и использовать :q
:
0000000: 80fd 6280 fd63 80fd 6280 fd2c 80fd 2e3a ..b..c..b..,...:
0000010: 710d q.
Итак, я думаю, что события окна внутренне переведены на что-то другое. 80 fd 62
- открытая последовательность, а 80 fd 63 80 fd 62
- близкая последовательность.
Я нашел еще один способ запускать 80fd
, что приводит меня к тому, что это своего рода «пользователь имеет доступ к окну»; по умолчанию с GNOME в Ubuntu, Ctrl + Alt + S что-то делает с окном (не помню, как он называется, переводит его в строку заголовка, приложение внутри теряет управление клавиатурой и т. д.). gvim ...
(вы знаете, аргументы!), я<Ctrl + Alt + S (контракт) Ctrl + Alt + S (расширенный) >EscZ Q производит это для я:
0000000: 80fd 6269 3c80 fd63 80fd 623e 1b5a 51 ..bi<..c..b>.ZQ
Реферат:, так что у нас есть то, на что я верю, это решение; gVim ловит оконные сообщения в той или иной форме и - должен ли он или не должен - помещает их в свой scriptout
. Если вы думаете, что это не должно (или хотели бы знать, почему они остались или если они даже предназначены или вам вообще нужно заботиться), спросите, пожалуйста, в списке Vim.
Когда я тестировал с помощью опции '-W', vim не добавлял лишних символов в начало файла. Вы должны попробовать еще раз, не используя '.vimrc', используя' vim -u NONE -W somefile' –
Вот что я сделал ... все-таки 'vim -u NONE -W scriptout', ZQ и' xxd' my_scriptout покажет '80fd 605a 51 '(..'ZQ) – Benoit
Я посмотрел на это пару недель назад и не смог воспроизвести его в Linux ... теперь, когда я знаю, что вы используете мой gVim Portable (yay!), Я попробую еще раз в Windows и посмотрим, смогу ли я это понять. (Завтра, а не сегодня.) –