Это действительно дополнение к другим превосходным комментариям KeithTheBiped и других ...
Но в VB6 можно несколько принудительно заставить Immediate Window действовать так, чтобы действовал как современное окно терминала с некоторыми оговорками. Если мы создадим вспомогательную функцию для запуска команды, каким-то образом запишем выходные данные, а затем используем Debug.Print для ретрансляции этого обратно в окно «Немедленно» ПОХОЖЕ на окно терминала, но без каких-либо интерактивных элементов, конечно.
Это работает для большинства команд, но не может захватить некоторые выходные данные в фазе git push
. Приемлемый компромисс, для удобства нет оболочки (imo).
Мы можем сделать это, используя командную строку (cmd.exe /c
), используя каналы 1>
и 2>
, предназначенные для временных файлов. Я не предоставляю пару базовых функций, но предоставляю источники, если у вас их еще нет.
Рассмотрим следующую функцию:
Public Function RunCmdToOutput(ByVal cmd As String, Optional ByRef ErrStr As String = "") As String
Const p_enSW_HIDE = 0
On Error GoTo RunError
Dim A As String, B As String
A = TempFile
B = TempFile
ShellAndWait "cmd /c " & cmd & " 1> " & A & " 2> " & B, p_enSW_HIDE
RunCmdToOutput = ReadEntireFileAndDelete(A)
ErrStr = ReadEntireFileAndDelete(B)
Exit Function
RunError:
RunCmdToOutput = ""
ErrStr = "ShellOut.RunCmdToOutput: Command Execution Error - [" & Err.Number & "] " & Err.Description
End Function
Вам понадобится:
- TempFile - возвращает уникальное и несуществующее имя файла, к которому у вашей программы есть доступ для чтения / записи. Вероятно, следует использовать GetShortPathName API для сокращения длинных имен путей.
- ShellAndWait - Стандарт «запустите процесс и дождитесь его завершения».
- ReadEntireFileAndDelete - только то, что он говорит ... Захватите содержимое, удалите файл, верните строку.
После того, как вы выполнили это и можете успешно запустить любое простое выполнение и вывод в окно Immediate, например:
?runcmdtooutput("ver")
Microsoft Windows [Version 10.0.16299.309]
Отсюда вы можете запустить Git и отобразить MOST в окне Immediate, и можете использовать его так же просто, как мы, но мы можем добиться большего.
Предполагая, что вы уже установили Git из командной строки и путь обновлен, чтобы он стал доступен, вы можете создать несколько новых функций (надеюсь, в модуле):
Private Function GitCmd(ByVal C As String, Optional ByVal NoOutput As Boolean = False) As String
Dim ErrSt As String
GitCmd = RunCmdToOutput(C, ErrSt)
If Not NoOutput Then Debug.Print GitCmd ' Because it also returns the string
If ErrSt <> "" Then Debug.Print "ERR: " & ErrSt
End Function
Public Function Git(ByVal C As String) As Boolean
GitCmd "git " & C
Git = True
End Function
Отсюда вы можете ПОЧТИ запускать команды Git из непосредственного окна. Помните, Git () - это функция, поэтому вы должны передавать аргумент в виде строки ... Всего один необходимый символ. Конечно, VB автоматически завершит строку, так что вам НЕ НУЖЕН трейлинг, но я его включу. Используйте синтаксис:
Git "status"
Git "add ."
Git "commit -m ""Some Git Commit"""
Git "pull -r"
Git "push"
Он не допускает интерактивные команды git (git add -p
), но вы можете просто перебить его (git add . -f
). Но команды запускаются и напрямую отображают свой вывод в окне Immediate без особых усилий.
git "status"
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
...
Вы поняли.
Оттуда вы также можете автоматизировать вещи. Создавайте вспомогательные функции для пакетирования часто используемых команд Git и т. Д. Или просто устраняйте некоторые неудобные синтаксисы. С RunCmdToOutput
вы также можете переделать некоторые из них, чтобы использовать MsgBox, если хотите, но я подумал, что Immediate Window достаточно интуитивно понятен.
В какой-то момент также может быть важно ограничить выполнение любых функций только в IDE, но это необязательно.
Public Function IsIDE() As Boolean
On Error GoTo IDEInUse
Debug.Print 1 \ 0 'division by zero error - Debug is ignored by compile
IsIDE = False
Exit Function
IDEInUse:
IsIDE = True
End Function
Public Function GitStatus()
If Not IsIDE Then Exit Function
GitCmd "git status"
GitStatus = True
End Function