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


363

在命令行上使用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成为提交注释,变基等的默认编辑器。我仍然想看看是否也可以将其用作diff工具。

更新5:

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

Answers:


672

在最新版本(20163月发布的v1.0 )中,您现在可以将VS Code用作默认的git commit / diff工具。从文档中引用:

  1. 确保您可以从命令行运行code --help并获得帮助。

    • 如果看不到帮助,请按照下列步骤操作:

      • Mac:选择Shell命令:在命令面板的路径中安装“代码”命令

        • 当您在VS Code中按下shift+ + P时,将弹出命令面板。(shift+ ctrl+ P在Windows中)
      • Windows:确保在安装过程中选择了“ 添加到PATH ”。
      • Linux:请确保您通过我们的新.deb或.rpm软件包安装了Code。
  2. 从命令行运行 git config --global core.editor "code --wait"

现在,您可以运行git config --global -eVS Code并将其用作配置Git的编辑器。 在此处输入图片说明 添加以下内容以启用对使用VS Code作为差异工具的支持:

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

这利用了--diff您可以传递给VS Code 的新选项来并排比较两个文件。

总结一下,下面是一些可以在VS Code中使用Git的示例:

  • git rebase HEAD~3 -i 允许使用VS Code进行交互式变基
  • git commit 允许使用VS Code提交消息
  • git add -p然后e进行交互式添加
  • git difftool <commit>^ <commit> 允许使用VS Code作为差异编辑器进行更改

84
我还发现--new-window该命令的addinng 会有所帮助。这样git操作将在新窗口中打开。
jrotello '16

2
当我们谈论命令行时,我们的意思是Ctrl+Shift+P?该矿无法正常工作(无code --help货),我不明白这是什么意思:“确保在安装过程中选择了添加到PATH”我应该怎么做才能检查它?有人可以帮帮我吗?
Paolo Falomo '16

2
请注意,从v1.1开始,您需要禁用“热退出”功能,或者记住在退出vscode之前显式保存文件,否则git不会看到任何更改。如果希望提醒您在退出时进行保存,则可以通过编辑用户设置来禁用此功能:"files.hotExit": "off"在配置底部插入
Jack Ukleja

6
我必须使用git config core.editor "code -n --wait"从外部命令行运行的VS Code 1.17.2。双方codecode --wait让我的“提交终止由于空提交信息。”
罗伯特·卡尔洪

3
而合并现已还有:[合并]工具= vscode [合并工具“vscode”] CMD =代码--wait $已合并
斯汀

31

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

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

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

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

下次您执行此操作时git rebase -i HEAD~3,它将弹出Visual Studio代码。VSCode关闭后,Git将重新获得领先。

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

希望对您有所帮助。


谢谢!-w和的意义何在?您在哪里找到该文件?
加里·伊万公园

1
好点子。它来自Atom -w等待。我编辑了答案。
Frank Boucher 2015年

我已经设置好了,很高兴地说它正在工作。如果我现在也可以像使用Visual Studio Code一样进行文件差异处理,那太好了!:-)
Gary Ewan Park

10
现在,这似乎不再适用于VS Code的最新更新。你有什么想法?谢谢!
加里·伊万公园

2
@GaryEwanPark:您需要从bin子目录中启动code.cmd(或* nix上的代码),以使命令行选项起作用。理想情况下,您可以将bin子目录添加到您的%PATH%环境变量中(安装程序也会为您完成此操作),然后将运行编辑器配置为。git config --global core.editor "code --wait"
IInspectable

13

您需要使用命令:

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


1
-n--new-window使git打开新的编辑器窗口的-w缩写,并且是--wait使git等待您再次关闭窗口的缩写。这是唯一对我有用的答案,因为如果没有VS Code,我--wait将无法工作--new-window
Jan Aagaard '18

11

另一个有用的选项是设置EDITOR环境变量。许多实用程序都使用此环境变量来了解要使用的编辑器。如果未core.editor设置,Git也会使用它。

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

export EDITOR="code --wait"

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

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


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

  1. 从本地终端工作时。
  2. 通过SSH会话连接时。

这在VS Code(或任何其他GUI编辑器)中尤其有用,因为没有GUI便无法使用。

在Linux OS上,将其放入您的~/.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

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


2

我打开我的文件,.gitconfig并修改为:

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

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

但是,我注意到在尝试git commitGit Bash控制台中执行任意操作后,看到以下消息:

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

不确定这可能会带来什么后果。


我也曾尝试过,但是,我遇到了“致命的错误:C:\ Users \ gep13 / .gitconfig中错误的配置文件第14行”,然后我注意到我有反斜杠,其中有正斜杠。更改这些回合使其可以工作,但是像您一样,我看到“ Renderer进程已启动”输出,该输出实际上为我输出了两次,然后显示:“ [[11956:0504/091108:ERROR:ipc_channel_win.cc(136)]”管道错误:109“,但是该提交实际上似乎已经起作用。
加里·伊万公园

啊,有趣。看来,我的建议仅在提交之前完全关闭Code (不是很方便!)的情况下才有效。如果打开了代码,我会遇到与您在更新中报告的错误相同的错误。
miqh 2015年

确实很有趣。我猜这就是Notepad ++的-multiInst标志起作用的地方。我想知道VSCode是否有类似的东西。
加里·伊万公园

仅供参考,app-0.1.0/resources/app/env.js似乎包含Code可执行文件采用的一些命令行标志。没有人暗示行为等同于-multiInst虽然。
miqh 2015年

您需要添加该--wait标志,并且--new-window强烈建议使用该标志,这样,提交msg / diff /无论什么内容都不会只是在已经打开的编辑器中显示为新选项卡,从而要求您关闭文件为了通知git您已完成编辑而进行的工作。
同步

1

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

.txt在Windows 10中默认的文件编辑器是Visual Studio Code,运行GitPad使其成为Git的默认编辑器。我还没有遇到问题中提到的问题(Git等到我关闭了VS Code窗口)。

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


您指的是默认编辑器是什么?我尝试使用此处描述的内容:donovanbrown.com/post/2015/07/07/…但这似乎并不起作用。并不是真的想要指向一个特定的exe,因为随着代码的更新,它会改变。
加里·伊万公园

1
@Gary,我没有指向一个特定的文件,代码是在列表中,当我做了Right click> Open with> Chose another app。我希望它在安装时进行自我注册(并在每次更新时更新注册表,以便Shell可以找到它),但是我在注册表中找不到“以代码打开”上下文菜单项以外的任何内容。所以,对此,我真的没有更明确的答案。
Şafak古尔

嗯,这很奇怪,我在执行此操作时出现的列表中没有代码作为条目。
加里·伊万公园


1

我只想在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”
rjt011000

0

我不确定您可以执行此操作,但是可以在gitconfig文件中尝试这些添加。

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

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


正如我在问题中提到的那样,我不认为将支持合并,因为我不认为Visual Studio Code知道如何做到这一点,我怀疑它只能进行diff和提交消息传递。
加里·伊万公园

0

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


0

在Mac Terminal应用程序中运行此命令

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

2
当您收到错误消息时,这不太起作用:由于空的提交消息而中止提交。等待标志将需要添加。例如--wait。
贝尔菲尔德

0

在使用64位内部人员版的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”了。开始编辑上的文件。目录

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.