Более эффективные перемещения, редактируя файлы Python в энергии

Примечание: Габр спрашивает о подходе, который может обойти ограничения GetVersionEx. Код JCL использует GetVersionEx и, таким образом, подвержен уровню совместимости. Эта информация предназначена только для людей, которым не нужно обходить уровень совместимости.

Используя Jedi JCL, вы можете добавить модуль JclSysInfo и вызвать функцию GetWindowsVersion. Возвращает перечислимый тип TWindowsVersion.

В настоящее время JCL содержит все поставляемые версии Windows и меняется каждый раз, когда Microsoft поставляет новую версию Windows в коробке:

  TWindowsVersion =
   (wvUnknown, wvWin95, wvWin95OSR2, wvWin98, wvWin98SE, wvWinME,
    wvWinNT31, wvWinNT35, wvWinNT351, wvWinNT4, wvWin2000, wvWinXP,
    wvWin2003, wvWinXP64, wvWin2003R2, wvWinVista, wvWinServer2008,
    wvWin7, wvWinServer2008R2);

Если вы хотите знать, используете ли вы 64-битные окна 7 вместо 32-битного, затем вызовите JclSysInfo.IsWindows64.

Обратите внимание, что JCL allso обрабатывает выпуски, такие как Pro, Ultimate и т. Д. Для этого вызова GetWindowsEdition и возвращает один из них:

TWindowsEdition =
   (weUnknown, weWinXPHome, weWinXPPro, weWinXPHomeN, weWinXPProN, weWinXPHomeK,
    weWinXPProK, weWinXPHomeKN, weWinXPProKN, weWinXPStarter, weWinXPMediaCenter,
    weWinXPTablet, weWinVistaStarter, weWinVistaHomeBasic, weWinVistaHomeBasicN,
    weWinVistaHomePremium, weWinVistaBusiness, weWinVistaBusinessN,
    weWinVistaEnterprise, weWinVistaUltimate, weWin7Starter, weWin7HomeBasic,
    weWin7HomePremium, weWin7Professional, weWin7Enterprise, weWin7Ultimate);

Для исторического интереса вы можете проверить издание уровня NT также с функцией NtProductType он возвращает:

 TNtProductType =       (ptUnknown, ptWorkStation, ptServer, ptAdvancedServer,        
        ptPersonal, ptProfessional, ptDatacenterServer, 
        ptEnterprise, ptWebEdition);

Обратите внимание, что «N редакций» обнаружены выше. Это версия Windows (для Европы), созданная в соответствии с антимонопольными правилами ЕС. Это довольно хорошая градация обнаружения внутри JCL.

Вот пример функции, которая поможет вам обнаружить Vista и сделать что-то особенное в Vista.

function IsSupported:Boolean;
begin
  case GetWindowsVersion of
     wvVista:  result := false; 
    else
      result := true;
  end;
end;

Обратите внимание, что если вы хотите выполнить проверку «больше, чем», вам следует просто использовать другие методы. Также обратите внимание, что проверка версий часто может стать причиной поломки в будущем. Я обычно выбираю, чтобы предупредить пользователей и продолжить, чтобы мой двоичный код не стал фактическим источником поломки в будущем.

Недавно я попытался установить приложение, и установщик проверил свободное место на моем диске и не смог установить, потому что у меня было более 2 гигабайт свободного места. Значение 32-разрядного целого со знаком в установщике стало отрицательным, что нарушило установщик. Я должен был установить это в VM, чтобы заставить это работать. Добавление «умного кода» часто делает ваше приложение «глупее». Будьте осторожны.

Между прочим, я обнаружил, что из командной строки вы можете запустить WMIC.exe и набрать path Win32_OperatingSystem («Выбрать * из Win32_OperatingSystem» у меня не работает). В будущем, возможно, JCL может быть расширен для использования информации WMI.

52
задан 21 May 2009 в 15:25
поделиться

2 ответа

Перемещать блоки с отступом очень просто, если для параметра установлено значение foldmethod = indent . Например, если вы находитесь в строке def main (): в следующем фрагменте:

def main():
+-- 35 lines: gps.init()-----------------------------------------------------

if __name__ == "__main__": main()

, тогда dj берет на себя всю функцию main, и ее можно вставить в другое место.

6
ответ дан 7 November 2019 в 09:32
поделиться

python.vim

Облегчает навигацию по блокам кода Python.

Ярлыки:

  • ] t - Перейти к началу блока
  • ] e - Перейти к концу блока
  • ] v - Выбрать блок (Visual Line Mode)
  • ] < - Сдвинуть блок влево
  • ]> - Сдвиг блока вправо
  • ] # - Выбор комментария
  • ] u - Раскомментировать выбор
  • ] c - Выбрать текущий / предыдущий класс
  • ] d - Выбрать текущую / предыдущую функцию
  • ] - Перейти к предыдущей строке с таким же / меньшим отступом
  • ] - Перейти к следующей строке с помощью тот же / нижний отступ

python_match.vim

extends % :

  • % - циклический переход через if / elif / else, try / except / catch,for / continue / break
  • g% - движение противоположно %
  • [% - перейти к началу текущего блока кода
  • ]% - перейти к концу текущего блока кода

Все вышеупомянутые движения работают с нормальным режимом, Визуальный режим и режим ожидания оператора, поэтому:

  • d]% - удалить до конца текущего блока
  • v]% d - должны делать то же самое, проходя через визуальный режим, чтобы вы можете увидеть, что удаляется
  • V]% d - выше, но с выделением строки
20
ответ дан 7 November 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: