这篇文章是针对KeithTheBiped等人的其他优秀评论的补充。但是,在VB6中,我们可以通过一些方式使立即窗口“像”现代终端窗口,并捕获输出结果并使用Debug.Print将其传递回立即窗口,类似于终端窗口,但当然没有任何交互元素。
这对大多数命令有效,但无法捕获"git push"阶段的某些输出。为了方便(在我看来),这是一个可以接受的折衷,因为它不需要使用shell。
我们可以使用命令提示符(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
你需要:
一旦你完成了这些,并可以成功运行任何简单执行并将其输出到即时窗口,就像这样:
?runcmdtooutput("ver")
Microsoft Windows [Version 10.0.16299.309]
从这里开始,您可以运行Git,并将大多数内容显示到即时窗口中,就像这样简单使用,但我们可以做得更好。
假设您已经安装了命令行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
)来完成。但是,这些命令会直接在“立即窗口”中运行并显示其输出,无需其他努力。
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,如果需要的话,但我认为即时窗口已经足够直观了。
在某些时候,将任何函数限制为仅在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