如何将Visual Studio Code设置为git的默认编辑器?

660

当在命令行中使用 Git 时,我想知道是否可以将 Visual Studio Code 作为默认编辑器使用,例如在创建提交注释和从命令行查看文件差异时。

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

更新1:

我尝试了一个类似于我以前为Notepad++所做的方法,即

#!/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:

根据 可靠的消息,这个功能已被VSCode团队接手,所以我期待着未来发布会包括此功能。

更新4:

感谢@f-boucheros下面的评论,我已经能够使VS Code作为默认编辑器用于提交注释、rebase等等。我仍然希望看看是否可以将其作为diff工具使用。

更新5:

根据问题的接受答案,使用V1.0版本的Code现在可以实现此功能。


这个回答解决了你的问题吗?如何让Git使用我选择的编辑器进行提交? - Henke
19个回答

1109
在最新版本(v1.0,于2016年3月发布)中,您现在可以将VS Code作为默认的git提交/差异工具使用。引用自文档:
  1. 确保您可以从命令行运行code --help并获得帮助。
  • 如果您没有看到帮助,请按照以下步骤操作:
    • Mac:从命令面板中选择Shell Command: Install 'Code' command in path
      -  *Command Palette is what pops up when you press <kbd>shift</kbd> + <kbd></kbd> + <kbd>P</kbd> while inside VS 

代码。 (在Windows中按住shift + ctrl + P)*

 - Windows: Make sure you selected **Add to PATH** during the

installation. - Linux: Make sure you installed Code via our new .deb or .rpm packages. 2. From the command line, run git config --global core.editor "code --wait"

Now you can run git config --global -e and use VS Code as editor for configuring Git. enter image description here Add the following to enable support for using VS Code as diff tool:

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

这利用了你可以传递给VS Code的新--diff选项,以便比较两个文件并排显示。
总结一下,在以下情况下,你可以使用Git与VS Code一起使用的一些示例:
- git rebase HEAD~3 -i 允许你使用VS Code进行交互式变基 - git commit 允许你使用VS Code作为提交信息编辑器 - git add -p 后跟e进行交互式添加 - git difftool <commit>^ <commit> 允许你使用VS Code作为差异编辑器来查看更改内容

127
我发现将--new-window添加到命令中会很有帮助。这样Git操作将在一个新窗口中打开。 - jrotello
2
当我们谈论“命令行”时,我们指的是 Ctrl+Shift+P 吗?我的不起作用(没有 code --help 可用),我也不明白“确保在安装过程中选择了添加到 PATH”是什么意思。我该怎么检查它?有人能帮帮我吗? - Paolo Falomo
2
注意,从v1.1版本开始,您需要禁用“热退出”或在退出vscode之前明确保存文件,否则git将无法看到任何更改。如果您希望在退出时提醒保存,则可以通过编辑用户设置来禁用此功能:在配置文件底部插入"files.hotExit": "off" - Jack Ukleja
11
我不得不在外部命令行中使用 git config core.editor "code -n --wait",才能在 VS Code 1.17.2 中正常运行。无论是 code 还是 code --wait 都会导致 "Aborting commit due to empty commit message." 的错误提示。 - Robert Calhoun
6
现在并可用合并,以及:[合并] 工具 = vscode [合并工具 "vscode"] cmd = code --wait $MERGED - Sting
显示剩余10条评论

112
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 - Worm
1
git config --global core.editor "code --wait" 这个命令解决了问题。 - Rafa

55

据我所知,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。你会看到帮助中的最后一个参数是wait。

下次执行git rebase -i HEAD~3时,它将弹出Visual Studio Code。一旦VSCode关闭,Git将重新获得控制权。

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

希望这能帮到你。


谢谢! -w 的意义是什么?你在哪里找到了这个文档? - Gary Ewan Park
1
好的,这是来自Atom的“-w”表示等待。我编辑了我的答案。 - Frank Boucher
我已经设置好了,很高兴地说它正在运行。如果现在能让Visual Studio Code也做文件的差异比较,那就太好了! :-) - Gary Ewan Park
12
最近更新的VS Code似乎不能再使用此功能。你有任何想法吗?谢谢! - Gary Ewan Park
4
您需要从bin子目录启动code.cmd(在*nix上为code),才能让命令行选项起作用。最好将bin子目录添加到您的%PATH%环境变量中(安装程序也会为您执行此操作),并配置编辑器运行git config --global core.editor "code --wait" - IInspectable
只是分享一下我用过的方法,以防将来有人有用。在您喜欢的编辑器中进行替换。git config --global core.editor "'C:\Program Files\Microsoft VS Code\Code.exe'" --replace-all - mh0w

38

另一个有用的选项是设置EDITORVISUAL环境变量。这些环境变量被许多应用程序和实用程序用于确定使用哪个编辑器,Git也会在没有设置core.editor时使用它们中的一个(取决于Git版本)。

您可以使用以下命令为当前会话设置它们:

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

这种方法不仅适用于git,还适用于许多其他应用程序将使用VS Code作为编辑器。

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


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

  1. 当您从本地终端工作时。
  2. 当您通过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 环境变量的区别,请参见此问题


3
我发现,在至少在 macOS 上使用 Git 2.30.1 时,如果没有提供 core.editor 配置,Git 将使用 $VISUAL 环境变量而不是 $EDITOR。因此我喜欢这个答案,但我还在 fi 下面添加了一行代码,即 export VISUAL="$EDITOR",以将它们同步起来。 - Chris
在Ubuntu 22.04;git 2.34.1;VS Code 1.68.1上,GIT_EDITOR='code --wait' 对我有效。设置EDITOR无效,设置git config --global core.editor "code --wait"也无效。 - Matt Kleinsmith

20

您需要使用命令:

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%环境变量的更改生效。


3
-n--new-window的缩写,用于让git打开一个新的编辑器窗口;而-w--wait的缩写,用于让git等待你再次关闭窗口。这是我唯一可行的答案,因为如果我已经打开VS Code,则使用--wait不会起作用,除非加上--new-window参数。 - Jan Aagaard

16

我添加了一个答案,因为其他所有答案都不够简洁,或者无法满足我的实际情况。我正在使用搭载M1芯片的MacBook Air 2021。

要将VS Code设置为默认的git编辑器:

第一步

在命令行中运行git config --global core.editor "code --wait" 命令。

第二步

如果在此阶段尝试提交时出现错误,可能会看到以下错误信息:

"hint: Waiting for your editor to close the file... code -w: code: command not found error: There was a problem with the editor 'code -w'".

这意味着您没有在VS Code中安装"code" shell命令。使用 (command + shift + p) 打开VS Code中的命令中心。搜索"code"并选择"Shell Command: Install ‘code’ command in PATH"。这将把"code"添加到您的路径中。

第三步

在尝试安装"code"时,可能会出现以下错误:

"EACCES: permission denied, unlink '/usr/local/bin/code'".

我不知道是什么原因导致了这个问题,但是简单的卸载和重新安装可以解决它。要卸载,可以在VS Code命令中心中搜索"uninstall"并选择"Shell Command: Uninstall ‘code’ command in PATH"

第四步

运行git config --global -e 命令来测试您的新默认编辑器。您的配置文件应在VS Code文本编辑器中打开。

来源:

https://levelup.gitconnected.com/how-to-configure-git-to-use-vs-code-as-the-default-text-editor-ea3670ab525a

VS Code Denied Permission unlink 'usr/local/bin/code'


4
在您的Mac终端应用程序中运行此命令。
git config --global core.editor "/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code"

3
由于提交信息为空,这并不完全有效,您会收到错误消息:“Aborting commit due to empty commit message。” 需要添加一个等待标志。例如:--wait。 - Belfield
好奇怪,code 没有起作用,我需要完整路径。 - Sagnik Pradhan

3

我打开了我的.gitconfig文件,并进行了修改:

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

这对我有帮助(我使用Windows 8)。

然而,我注意到在尝试任意git commit之后,在我的Git Bash控制台中出现了以下消息:

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

我不确定这可能会有什么后果。


我也尝试过那个方法,但是我得到了“fatal: bad config file line 14 in C:\Users\gep13/.gitconfig”的错误提示,然后我注意到我的反斜杠与你的正斜杠不同。将它们改为一致后,问题得以解决,但像你一样,我看到了“Renderer process started”输出,对我来说实际上输出了两次,然后显示:“[11956:0504/091108:ERROR:ipc_channel_win.cc(136)] pipe error: 109”,但提交似乎确实成功了。 - Gary Ewan Park
啊,有趣。看来我的建议只在你提交之前完全关闭 Code (不是很方便!) 才能起作用。如果 Code 是打开的,我会遇到你在更新中报告的相同错误。 - miqh
确实很有趣。我猜这就是Notepad++的“-multiInst”标志发挥作用的地方。我想知道VSCode是否有类似的东西。 - Gary Ewan Park
仅供参考,app-0.1.0/resources/app/env.js 文件中包含一些 Code 可执行文件所接受的命令行标志。然而,没有一个标志提示其行为相当于 -multiInst - miqh
您需要添加 --wait 标志,高度建议还添加 --new-window 标志,这样提交信息/差异/等等就不会在已打开的编辑器中显示为新标签页,需要您关闭可能仍在使用的文件以向 git 发信号表示您已完成编辑。 - Isochronous

3
好消息!在撰写本文时,此功能已经在 0.10.12-insiders 版本中实现,并通过 0.10.14-insiders 进行了控制。因此,我们将在即将发布的版本VS Code 1.0中拥有它。
实施参考:实现-w / --wait命令行参数

你能否评论一下我如何在VSCode中使用diff查看器来查看git中的差异? - Gary Ewan Park

3

我把 git bash 设置为了 vscode 终端 的默认终端。 如果你像我一样懒,那么我建议你也这样做。

  • 步骤1:打开设置:Ctrl + ,

  • 步骤2:搜索 .json --> 选择文件 setting.json

  • 步骤3:将下面的代码复制到文件末尾但要放在括号内'}'

    "terminal.integrated.defaultProfile.windows": "gitbash", "terminal.integrated.shell.windows":"E:\app\git\Git\bin\bash.exe",


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接