ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 Visual Studio Code 作为 git 的默认编辑器?

在命令行使用 git 时,我想知道是否可以使用 Visual Studio Code 作为默认编辑器,即在创建提交注释并从命令行查看文件的差异时。

我知道不可能用它来进行合并(至少现在),但有谁知道是否可以用它来查看差异,如果可以,需要哪些命令行选项.gitconfig 文件来实现这一点?

更新 1:

我尝试了一种类似于我为 Notepad++ in the past 所做的方法,即

#!/bin/sh

"c:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"

并使用:

#!/bin/sh

"C:\Users\gep13\AppData\Local\Code\app-0.1.0\Code.exe" "$*"

但这会导致错误消息:

C:\temp\testrepo [master +1 ~0 -0]> git commit
[8660:0504/084217:ERROR:crash_reporter_win.cc(70)] Cannot initialize out-of-process crash handler
Aborting commit due to empty commit message.
C:\temp\testrepo [master +1 ~0 -0]>

代码以预期的内容正确打开,但它不等待响应,即单击保存并关闭窗口以返回提示。

更新 2:

我刚刚收到一位开发 VSCode 的开发人员的回复。看起来目前不支持此功能:-(

https://twitter.com/IsidorN/status/595501573880553472

如果您有兴趣看到添加此功能,您可能需要考虑在此处添加您的投票:

http://visualstudio.uservoice.com/forums/293070-visual-studio-code/suggestions/7756482-support-git-configure-diff-and-merge-tools

更新 3:

我一直reliably informed VSCode 团队已经采用了此功能,因此我期待未来的版本将包含它。

更新 4:

感谢下面的@f-boucheros 评论,我已经能够让 VS Code 作为提交评论、rebase 等的默认编辑器工作。我仍然想看看是否也可以将它用作差异工具。

更新 5:

根据该问题的公认答案,现在可以使用 V1.0 版本的代码。


l
leerssej

在最新版本(v1.0,发布于 2016 年 3 月)中,您现在可以use VS Code as the default git commit/diff tool。从文档中引用:

确保您可以从命令行运行 code --help 并获得帮助。如果您没有看到帮助,请按照以下步骤操作: Mac:选择 Shell 命令:在命令面板的路径中安装“代码”命令。命令面板是在 VS Code 中按 shift + ⌘ + P 时弹出的内容。 (Windows 中的 shift + ctrl + P) Windows:确保在安装过程中选择了 Add to PATH。 Linux:确保您通过我们新的 .deb 或 .rpm 包安装了 Code。从命令行运行 git config --global core.editor "code --wait" 现在您可以运行 git config --global -e 并使用 VS Code 作为编辑器来配置 Git。添加以下内容以启用对使用 VS Code 作为差异工具的支持:

[diff]
    tool = default-difftool
[difftool "default-difftool"]
    cmd = code --wait --diff $LOCAL $REMOTE

这利用了可以传递给 VS Code 的新 --diff 选项来并排比较两个文件。总而言之,以下是一些可以在 VS Code 中使用 Git 的示例: git rebase HEAD~3 -i 允许使用 VS Code 进行交互式 rebase git commit 允许将 VS Code 用于提交消息 git add -p 后跟 e for交互式添加 git difftool ^ 允许使用 VS Code 作为差异编辑器进行更改


我还发现在命令中添加 --new-window 很有帮助。这样 git 操作将在新窗口中打开。
当我们谈论 命令行 时,我们的意思是 Ctrl+Shift+P ?我的不工作(没有 code --help 可用),我不明白什么意思:“确保在安装过程中选择了添加到 PATH”我应该怎么做才能检查它?有人可以帮帮我吗?
请注意,从 v1.1 开始,您需要禁用“热退出”或记住在退出 vscode 之前明确保存文件,否则 git 将看不到任何更改。如果您希望在退出时被提醒保存,您可以通过编辑您的用户设置来禁用此功能:在您的配置底部插入 "files.hotExit": "off"
我必须将 git config core.editor "code -n --wait" 与 VS Code 1.17.2 一起使用,从外部命令行运行。 codecode --wait 都让我收到“由于提交消息为空而中止提交”。
现在可以使用合并了: [merge] tool = vscode [mergetool "vscode"] cmd = code --wait $MERGED
F
Frank Boucher

据我了解,VSCode 不再在 AppData 中。

因此,通过在命令提示符窗口中执行该命令来设置默认的 git 编辑器:

git config --global core.editor "'C:\Program Files (x86)\Microsoft VS Code\code.exe' -w"

参数-w--wait是等待窗口关闭后再返回。 Visual Studio Code 基于 Atom 编辑器。如果您还安装了 atom 执行命令 atom --help。您将看到帮助中的最后一个参数是等待。

下次您执行 git rebase -i HEAD~3 时,它将弹出 Visual Studio Code。一旦 VSCode 关闭,Git 将夺回领先地位。

注意:我当前的 VSCode 版本是 0.9.2

我希望有帮助。


谢谢! -w 的意义是什么?您在哪里找到了相关文档?
好点子。它来自 Atom -w 代表等待。我编辑了我的答案。
我已经设置好了,我很高兴地说它正在工作。如果我现在可以让它像 Visual Studio Code 一样工作,也可以对文件进行差异化,那就太好了! :-)
这现在似乎不再适用于 VS Code 的最新更新。你有什么想法?谢谢!
@GaryEwanPark:您需要从 bin 子目录启动 code.cmd (或 *nix 上的 code ),以获取命令行选项工作。理想情况下,您应该将 bin 子目录添加到您的 %PATH% 环境变量中(安装程序也会为您执行此操作),并配置运行 git config --global core.editor "code --wait" 的编辑器。
R
Reid Moffat
git config --global core.editor "code --wait"

或者

git config --global core.editor "code -w"

验证:

git config --global -e

您的配置将在 Visual Studio Code 中打开。


对于检查,它实际上应该是 git config --global - e
R
Ruslan Stelmachenko

另一个有用的选项是设置 EDITORVISUAL 环境变量。许多应用程序和实用程序使用这些环境变量来了解要使用的编辑器。如果未设置 core.editor,Git 也会使用其中之一(取决于 Git 版本)。

您可以使用以下方法为当前会话设置它:

export EDITOR="code --wait"
export VISUAL="$EDITOR"

这样,不仅 git,许多其他应用程序都将使用 VS Code 作为编辑器。

例如,要使此更改永久生效,请将其添加到您的 ~/.profile。有关更多选项,请参阅 this question

这种方法的另一个优点是您可以为不同的情况设置不同的编辑器:

当您在本地终端工作时。当您通过 SSH 会话连接时。

这对于 VS Code(或任何其他 GUI 编辑器)尤其有用,因为它在没有 GUI 的情况下无法工作。

在 Linux 操作系统上,将其放入您的 ~/.profile

# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then # SSH mode
  export EDITOR='vim'
else # Local terminal mode
  export EDITOR='code -w'
fi
export VISUAL="$EDITOR"

这样当你使用本地终端时,$SSH_CONNECTION 环境变量将为空,所以会使用 code -w 编辑器,但是当你通过 SSH 连接时,$SSH_CONNECTION 环境变量将是一个非空字符串,因此将使用 vim 编辑器。它是控制台编辑器,因此即使您通过 SSH 连接它也可以工作。

有关 EDITORVISUAL 环境变量的区别,请参阅 this question


我发现,至少在 macOS 上使用 Git 2.30.1,如果没有提供 core.editor 配置,Git 使用 $VISUAL 环境变量,而不是 $EDITOR。所以我喜欢这个答案,但我还在 fi 下方添加了一行,说明 export VISUAL="$EDITOR" 以同步它们。
GIT_EDITOR='code --wait' 在 Ubuntu 22.04 上为我工作;混帐 2.34.1; VS 代码 1.68.1。设置 EDITOR 没有,设置 git config --global core.editor "code --wait" 没有。
I
IluxaKuk

您需要使用命令:

git config --global core.editor "'C:\Program Files\Microsoft VS Code\code.exe' -n -w"

确保你可以从 Git Bash 启动你的编辑器

如果您想使用带有短路径的 Code.exe,可以通过将以下行添加到您的 .bash_profile 来执行此操作:

alias vscode="C:/Program\ Files/Microsoft\ VS\ Code/Code.exe"

现在,您可以仅使用 vscode 命令(或您命名的任何名称)调用它

一些附加信息:

安装程序会将 Visual Studio Code 添加到您的 %PATH%,因此您可以从控制台键入“code”以打开该文件夹上的 VS Code。您需要在安装后重新启动控制台,以使对 %PATH% 环境变量的更改生效。


-n--new-window的缩写,让git打开一个新的编辑器窗口,-w--wait的缩写,让git等待你再次关闭窗口。这是唯一对我有用的答案,因为如果我已经打开了 VS Code,--wait 将无法在没有 --new-window 的情况下工作。
m
miqh

我打开了我的 .gitconfig 并对其进行了修改:

[core]
    editor = 'C:/Users/miqid/AppData/Local/Code/app-0.1.0/Code.exe'

这对我有用(我在 Windows 8 上)。

但是,我注意到在我的 Git Bash 控制台中尝试任意 git commit 后,我看到以下消息:

[9168:0504/160114:INFO:renderer_main.cc(212)] Renderer process started

不确定这可能会产生什么后果。


我也尝试过,但是,我得到“致命:C:\Users\gep13/.gitconfig 中的错误配置文件第 14 行”然后我注意到我有反斜杠,你有正斜杠。更改这些回合使它起作用,但是像您一样,我看到“渲染器进程已启动”输出,它实际上为我输出了两次,然后显示:“[11956:0504/091108:ERROR:ipc_channel_win.cc(136)] 管道错误:109”,但提交实际上似乎奏效了。
啊,有趣。看来我的建议只有在提交之前完全关闭代码(不是很方便!)时才有效。如果 Code 已打开,我会遇到您在更新中报告的相同错误。
确实很有趣。我想这就是 Notepad++ 的 -multiInst 标志发挥作用的地方。我想知道 VSCode 是否有类似的东西。
仅供参考,app-0.1.0/resources/app/env.js 似乎包含代码可执行文件采用的一些命令行标志。没有人建议与 -multiInst 等效的行为。
您需要添加 --wait 标志,并且强烈建议使用 --new-window 标志,以便提交 msg/diff/whatever 不会在已打开的编辑器中显示为新选项卡,需要您关闭您可能仍在处理的文件,以向 git 发出您已完成编辑的信号。
W
Wasif Hossain

好消息!在撰写本文时,此功能已在 0.10.12-insiders 版本中实现,并通过 0.10.14-insiders 执行。因此,我们将在即将发布的版本 1.0 Release of VS Code 中使用它。

实施参考:Implement -w/--wait command line arg


你能评论一下我如何能够在 VSCode 中使用差异查看器来查看 git 中的差异吗?
M
Mohammed

在您的 Mac 终端应用程序中运行此命令

git config --global core.editor "/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code"

当您收到错误消息时,这并不完全有效:Aborting commit due to empty commit message。需要添加等待标志。例如——等待。
V
VonC

除了 export EDITOR="code --wait",请注意,在 VSCode v1.47(2020 年 6 月)中,这些差异编辑器将承受 VSCode 重新加载/重新启动。
请参阅issue 99290

使用提交 1428d44,差异编辑器现在有机会在重新加载后幸存下来,并且这可以正常工作,除非 git 资源上的差异编辑器被打开为活动的:

commit 24f1b69 解决了这个问题)


Ş
Şafak Gür

GitPad 将您当前的文本编辑器设置为 Git 的默认编辑器。

我在 Windows 10 中用于 .txt 文件的默认编辑器是 Visual Studio Code,运行 GitPad 曾经使它成为 Git 的默认编辑器。我没有遇到问题中提到的问题(在我的情况下,Git 等到 VS Code 窗口关闭)。

.exe 文件的链接对我不起作用,您可能需要自己编译源代码。)


作为默认编辑器,您指的是什么?我尝试使用此处描述的内容:donovanbrown.com/post/2015/07/07/… 但这似乎不起作用。不要真的想指向特定的 exe,因为它会随着代码的更新而改变。
@Gary,我不必指向特定文件,当我执行 Right click > 时,代码就在列表中Open with > Chose another app。我希望它在设置时register itself(并在每次更新时更新注册表,以便 shell 可以找到它),但除了注册表中的“使用代码打开”上下文菜单项之外,我找不到任何其他内容。所以我真的没有更明确的答案,对不起。
嗯,这很奇怪,我没有代码作为我这样做时出现的列表中的条目。
V
Victor Ma

只想将这些反斜杠添加到以前的答案中,我在 Windows 10 CMD 上,如果没有空格前的反斜杠,它就无法工作。

git config --global core.editor "C:\\Users\\your_user_name\\AppData\\Local\\Programs\\Microsoft\ VS\ Code\\Code.exe"

我能够添加: git config --global core.editor "'C:\Users\cbre_admin\AppData\Local\Programs\Microsoft VS Code\Code.exe' -w"
z
ztrat4dkyle

.gitconfig 文件中需要哪些命令行选项才能实现这一点?

我必须将此添加到我的 .gitconfig 文件中才能使 git-lense 工作:


[core]
    # Make sure that interactive rebases open correctly with vs code
    editor = code -w -n

-n 是可选的 – 正如 Alex 在下面提到的,它是 --new-window 的缩写,我觉得它很有帮助:)


如上一个答案中所述,您还可以通过 CLI 配置此设置,使用命令:git config --global core.editor "code -w -n"
-w--wait 的缩写
P
Pham Nhut

我在 vscode terminal 中默认添加了 git bash 如果你像我一样懒惰。那我劝你也跟我一样。

Step1:打开设置:Ctrl + ,

Step2:搜索.json --> 选择文件setting.json

Step3:将代码粘贴在文件末尾,但在括号'}'中 "terminal.integrated.defaultProfile.windows": "gitbash", "terminal.integrated.shell.windows":"E:\app\git\Git \bin\bash.exe",


S
SJMan

我不确定你能做到这一点,但是你可以在你的 gitconfig 文件中尝试这些添加。

尝试从这些值替换 kdiff3 以指向 Visual Studio 代码可执行文件。

[merge] tool = kdiff3 [mergetool "kdiff3"] path = C:/Program Files/KDiff3/kdiff3.exe keepBackup = false trustExitCode = false


正如我在问题中提到的那样,我认为不支持合并,因为我认为 Visual Studio Code 不知道如何做到这一点,我怀疑它只能进行差异和提交消息传递。
Z
Zidu

我将 Visual Studio Code 设置为默认打开 .txt 文件。接下来我确实使用了简单的命令:git config --global core.editor "'C:\Users\UserName\AppData\Local\Code\app-0.7.10\Code.exe\'"。一切都很好。


L
LuisCarlos Rodriguez

在使用 64 位 Insiders 版本的 Windows 10 上,命令应该是:

git config --global core.editor "'C:\Program Files\Microsoft VS Code Insiders\bin\code-insiders.cmd'"

您还可以在“Program Files”目录中将“code-insiders.cmd”重命名为“code.cmd”,这样您现在就可以使用“code”命令了。开始编辑 .目录


I
Igor Kurkov

在 Windows 10 上的 2022 年,您应该有下一条路径:

git config --global core.editor "'C:\Users\<your username here>\AppData\Local\Programs\Microsoft VS Code\code.exe' -w"