Как отмена VIM является используемым деревом?

Запрос WMI:

"Select * from Win32_OperatingSystem"

РЕДАКТИРОВАНИЕ: На самом деле лучше был бы:

"Select Version from Win32_OperatingSystem"

Вы могли реализовать это в Дельфи как так:

function OperatingSystemDisplayName: string;

  function GetWMIObject(const objectName: string): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;
    Moniker: IMoniker;
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, PChar(objectName), chEaten, Moniker));
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
  end;

  function VarToString(const Value: OleVariant): string;
  begin
    if VarIsStr(Value) then begin
      Result := Trim(Value);
    end else begin
      Result := '';
    end;
  end;

  function FullVersionString(const Item: OleVariant): string;
  var
    Caption, ServicePack, Version, Architecture: string;
  begin
    Caption := VarToString(Item.Caption);
    ServicePack := VarToString(Item.CSDVersion);
    Version := VarToString(Item.Version);
    Architecture := ArchitectureDisplayName(SystemArchitecture);
    Result := Caption;
    if ServicePack <> '' then begin
      Result := Result + ' ' + ServicePack;
    end;
    Result := Result + ', version ' + Version + ', ' + Architecture;
  end;

var
  objWMIService: OleVariant;
  colItems: OleVariant;
  Item: OleVariant;
  oEnum: IEnumvariant;
  iValue: LongWord;

begin
  Try
    objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
    colItems := objWMIService.ExecQuery('SELECT Caption, CSDVersion, Version FROM Win32_OperatingSystem', 'WQL', 0);
    oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
    if oEnum.Next(1, Item, iValue)=0 then begin
      Result := FullVersionString(Item);
      exit;
    end;
  Except
    // yes, I know this is nasty, but come what may I want to use the fallback code below should the WMI code fail
  End;

  (* Fallback, relies on the deprecated function GetVersionEx, reports erroneous values
     when manifest does not contain supportedOS matching the executing system *)
  Result := TOSVersion.ToString;
end;
129
задан Community 23 May 2017 в 10:31
поделиться

3 ответа

См. Также : h undo-redo , в котором перечислены все команды и их использование.

Есть два способа пройти по дереву отмены. Один - вернуться «в прошлое». g + и g- будут проходить все узлы в дереве в хронологическом или обратном хронологическом порядке (что может немного сбивать с толку, потому что может произвольно переходить между ветвями отмены, но если вы будете делать g- достаточно долго, вы всегда доберетесь туда, куда вам нужно идти). : ранее и : позже принимают дескриптор времени, например 7m или 1h ; опять же, вы можете произвольно переключаться между ветвями отмены.

Другой способ - перейти к определенным узлам в дереве, используя : undo n , где n - это номер действия. (Все действия, т. е. добавления, удаления, замены текста нумеруются последовательно по мере их выполнения.) Вы можете посмотреть количество действий на листьях дерева отмены с помощью : undolist . Это позволит вам легко перепрыгивать между ветками. Затем вы можете использовать u и Ctrl-R для перемещения вверх и вниз по этой ветке.

В справке Vim есть несколько хороших примеров. Лучший способ понять, как это работает, - немного поиграться с этим.

138
ответ дан 24 November 2019 в 00:31
поделиться

На этой странице объясняется все, что вам нужно знать:

http://vimdoc.sourceforge.net/htmldoc/usr_32.html

16
ответ дан 24 November 2019 в 00:31
поделиться

If you're using vim, you can navigate through the undo tree using:

  • u: (undo) move back in the undo tree
  • Ctrl+R: (redo) move forward in the undo tree

Other ways of bringing document back or forward in time:

  • :earlier 15m: move back in time 15 minutes
  • :later 15m: move front in time 15 minutes
15
ответ дан 24 November 2019 в 00:31
поделиться
Другие вопросы по тегам:

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