используя опцию -W vim - PullRequest
       13

используя опцию -W vim

6 голосов
/ 20 октября 2010

опции vim -w и -W теоретически имеют следующий эффект:

-w {scriptout} Все введенные вами символы записываются в файл "scriptout", пока вы не выйдете из Vim. Это полезно, если вы хотите создать файл сценария, который будет использоваться с "vim -s" или ": источник!" Когда «сценарий» файл уже существует, новые символы добавлены. Смотрите также | Комплекс повтор |. {scriptout} не может начать с цифры. {не в Vi}

-W {scriptout} Как и -w, но не добавлять, перезаписать существующий файл. {не в Vi}

Но когда я делаю это, файл {scriptout} всегда начинается с шестнадцатеричной последовательности, такой как 80 fd 60 (иногда это 80 fd 62).

Я использую gvimportable.exe 7.3 с portableapps.com. С переключателем -u NONE он делает то же самое.

Для чего это «магическое число»? В Windows с gvim.exe я не могу воспроизвести сценарий до тех пор, пока не удалю эти три старших байта…

Кажется, что эта функция, которая может быть очень полезной, плохо документирована.

Спасибо за ваши ответы.

Ответы [ 2 ]

6 голосов
/ 25 ноября 2010

(Этот ответ, вероятно, значительно фрагментирован, мне потребовалось некоторое время, чтобы поиграть - я тоже хотел найти решение, потому что оно меня заинтриговало, а не просто награду в 200: P. Он более или менее показывает мой ход мыслей и экспериментирование.)

Теперь я могу воспроизвести его с 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 ... (вы знаете аргументы!), i <</kbd> Ctrl + Alt + S (контракт) Ctrl + Alt + S (расширенный) > Esc Z Q производит это для меня:

0000000: 80fd 6269 3c80 fd63 80fd 623e 1b5a 51    ..bi<..c..b>.ZQ

Резюме: так что у нас есть то, что я считаю решением; gVim отлавливает оконные сообщения в некоторой форме и - должен или не должен - помещает их в scriptout. Если вы думаете, что это не должно (или хотели бы знать, почему они остались, или если они вообще должны быть, или вам вообще нужно заботиться), спросите в списке Vim, я думаю.

1 голос
/ 25 ноября 2010

По-моему, это ошибка в коде GUI gVim.

При использовании gVim 7.3, если я запускаю gvim -u NONE -W scriptout, я вижу проблему, но если я запускаю vim -u NONE -W scriptout, тогданежелательных байтов нет.

Я также тестировал Vim 7.2 из оболочки в Linux, версию Vim, включенную в Snow Leopard (7.2), а также версии GUI и терминала MacVim 7.2 (с mvim -W/Applications/MacVim/Contents/MacOS/Vim -W соответственно) и все они работали правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...