Jak używać Visual Studio Code jako domyślnego edytora dla Git


364

Kiedy używam git w wierszu poleceń, zastanawiam się, czy można użyć Visual Studio Code jako domyślnego edytora, tj. Podczas tworzenia komentarzy zatwierdzania i patrzenia na różnicę pliku z wiersza poleceń.

Rozumiem, że nie będzie można go używać do łączenia (przynajmniej w jednej chwili), ale czy ktoś wie, czy można go użyć do przeglądania różnic, a jeśli tak, to jakie opcje wiersza poleceń byłyby wymagane w plik .gitconfig, aby tak się stało?

AKTUALIZACJA 1:

Wypróbowałem podejście podobne do tego, co zrobiłem dla Notepad ++ w przeszłości , tj

#!/bin/sh

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

I używane:

#!/bin/sh

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

Ale powoduje to komunikat o błędzie:

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]>

Kod otwiera się poprawnie, z oczekiwaną treścią, ale nie czeka na odpowiedź, tj. Kliknij Zapisz i zamknij okno, aby wrócić do monitu.

AKTUALIZACJA 2:

Właśnie otrzymałem odpowiedź od jednego z programistów pracujących nad VSCode. Wygląda na to, że ta funkcja obecnie nie jest obsługiwana :-(

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

Jeśli chcesz zobaczyć dodanie tej funkcji, warto pomyśleć o dodaniu tutaj głosów:

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

AKTUALIZACJA 3:

Zostałem niezawodnie poinformowany, że ta funkcja została wybrana przez zespół VSCode, więc nie mogę się doczekać przyszłej wersji, która ją obejmie.

AKTUALIZACJA 4:

Dzięki komentarzowi @ f-boucheros poniżej mogłem sprawić, aby VS Code działał jako domyślny edytor komentarzy do zatwierdzania, rebase itp. Nadal chciałbym sprawdzić, czy można go również użyć jako narzędzia do porównywania.

AKTUALIZACJA 5:

Zgodnie z zaakceptowaną odpowiedzią na to pytanie jest to teraz możliwe przy użyciu wydania kodu V1.0.

Odpowiedzi:


673

W najnowszej wersji (wersja 1.0, wydana w marcu 2016 r. ) Można teraz używać kodu VS Code jako domyślnego narzędzia git commit / diff . Cytat z dokumentacji:

  1. Upewnij się, że możesz uruchomić code --helpz wiersza poleceń i uzyskasz pomoc.

    • jeśli nie widzisz pomocy, wykonaj następujące kroki:

      • Mac: wybierz polecenie Shell: zainstaluj polecenie „Kod” w ścieżce z palety poleceń.

        • Paleta poleceń pojawia się, gdy naciśniesz shift+ +, gdy jesteś Pw VS Code. ( shift+ ctrl+ Pw systemie Windows)
      • Windows: Upewnij się, że wybrałeś Dodaj do ŚCIEŻKI podczas instalacji.
      • Linux: upewnij się, że zainstalowałeś kod za pomocą naszych nowych pakietów .deb lub .rpm.
  2. Z linii poleceń uruchom git config --global core.editor "code --wait"

Teraz możesz uruchomić git config --global -ei używać VS Code jako edytora do konfiguracji Git. wprowadź opis zdjęcia tutaj Dodaj następujące elementy, aby włączyć obsługę używania kodu VS jako narzędzia różnicowego:

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

Wykorzystuje to nową --diffopcję, którą można przekazać do VS Code, aby porównać dwa pliki obok siebie.

Podsumowując, oto kilka przykładów użycia Git z VS Code:

  • git rebase HEAD~3 -i pozwala na interaktywny rebase przy użyciu VS Code
  • git commit pozwala na użycie kodu VS dla komunikatu zatwierdzenia
  • git add -pa następnie einteraktywne dodawanie
  • git difftool <commit>^ <commit> pozwala używać VS Code jako edytora różnic dla zmian

84
Uważam również, że dodanie --new-windowdo polecenia jest pomocne. W ten sposób operacja git otworzy się w nowym oknie.
jrotello

2
Kiedy mówimy o linii poleceń, mamy na myśli Ctrl+Shift+P? Mój nie działa (brak code --helpdostępnych) i nie rozumiem, co oznacza: „Upewnij się, że podczas instalacji wybrałeś opcję Dodaj do ŚCIEŻKI” Co mam zrobić, aby to sprawdzić? Czy ktoś może mi pomóc?
Paolo Falomo

2
Zauważ, że od wersji 1.1 musisz wyłączyć „hot exit” lub pamiętaj, aby jawnie zapisać plik przed wyjściem z vscode, inaczej git nie zobaczy żadnych zmian. Jeśli wolisz otrzymywać przypomnienie o zapisaniu przy wyjściu, możesz wyłączyć tę funkcję, edytując ustawienia użytkownika: Wstaw "files.hotExit": "off"na dole konfiguracji
Jack Ukleja

6
Musiałem używać git config core.editor "code -n --wait"z kodem VS 1.17.2, uruchamianym z zewnętrznego wiersza poleceń. Zarówno codei code --waitdostał mi „Przerwanie zobowiązać z powodu opróżnienia popełnić wiadomość.”
Robert Calhoun

3
Scalanie jest teraz dostępne, a także: [scal] narzędzie = vscode [scaletool "vscode"] cmd = kod - czekaj $ MERGED
Sting

31

Z tego co rozumiem, VSCode nie ma już w AppData.

Ustaw domyślny edytor git, wykonując to polecenie w oknie wiersza polecenia:

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

Parametr -w, --waitto czekać na okno zostanie zamknięte przed powrotem. Visual Studio Code jest oparty na edytorze Atom. jeśli masz również zainstalowany atom, wykonaj polecenie atom --help. Ostatni argument w pomocy zobaczysz: poczekaj.

Następnym razem, gdy to zrobisz git rebase -i HEAD~3, pojawi się wyskakujący kod Visual Studio. Gdy VSCode jest blisko, Git przejmie prowadzenie.

Uwaga: Moja obecna wersja VSCode to 0.9.2

Mam nadzieję, że ta pomoc.


Dzięki! Jakie jest znaczenie -wi gdzie znalazłeś to udokumentowane?
Gary Ewan Park

1
Słuszna uwaga. Pochodzi z Atomu - w jest dla Czekaj. Zredagowałem swoją odpowiedź.
Frank Boucher,

Skonfigurowałem to i cieszę się, że to działa. Gdybym mógł sprawić, by działało to teraz jako program Visual Studio Code, który również różnicuje pliki, byłoby świetnie! :-)
Gary Ewan Park

10
wydaje się, że teraz nie działa już z najnowszą aktualizacją VS Code. Czy masz jakies pomysły? Dzięki!
Gary Ewan Park,

2
@GaryEwanPark: Aby uruchomić opcje wiersza poleceń, musisz uruchomić code.cmd (lub kod na * nix) z podkatalogu bin . Idealnie byłoby dodać podkatalog bin do zmiennej środowiskowej% PATH% (instalator też to dla ciebie robi) i skonfigurować działający edytor git config --global core.editor "code --wait".
Widoczny

13

Musisz użyć polecenia:

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

Upewnij się, że możesz uruchomić edytor z Git Bash

Jeśli chcesz użyć Code.exe z krótką ścieżką, możesz to zrobić, dodając następujący wiersz do pliku .bash_profile:

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

A teraz możesz wywołać go za pomocą tylko vscodepolecenia (lub jakkolwiek to nazwałeś)

Niektóre dodatkowe informacje:

Instalator doda kod Visual Studio do% PATH%, więc w konsoli możesz wpisać „code”, aby otworzyć VS Code w tym folderze. Konieczne będzie zrestartowanie konsoli po instalacji, aby zmiana w zmiennej środowiskowej% PATH% zaczęła obowiązywać.


1
-njest skrótem od tego, --new-windowaby git otworzył nowe okno edytora i -wjest krótki, przez --waitco git czeka, aż zamkniesz okno ponownie. To jest jedyna odpowiedź, która działa dla mnie, ponieważ jeśli mam już otwarty kod VS --wait, nie będę bez niego działał --new-window.
Jan Aagaard,

11

Inną przydatną opcją jest ustawienie EDITORzmiennej środowiskowej. Ta zmienna środowiskowa jest używana przez wiele narzędzi do określania, jakiego edytora użyć. Git używa go również, jeśli nie core.editorjest ustawiony.

Możesz ustawić go dla bieżącej sesji, używając:

export EDITOR="code --wait"

W ten sposób nie tylko git, ale wiele innych aplikacji będzie używać VS Code jako edytora.

Aby ta zmiana była trwała, dodaj ją ~/.profilena przykład do swojego . Zobacz to pytanie, aby uzyskać więcej opcji.


Kolejną zaletą tego podejścia jest to, że można ustawić różne edytory dla różnych przypadków:

  1. Podczas pracy z lokalnego terminala.
  2. Gdy jesteś połączony przez sesję SSH.

Jest to przydatne szczególnie w przypadku VS Code (lub dowolnego innego edytora GUI), ponieważ po prostu nie działa bez GUI.

W systemie Linux włóż to do ~/.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

W ten sposób, gdy korzystasz z lokalnego terminala, $SSH_CONNECTIONzmienna środowiskowa będzie pusta, więc code -wedytor zostanie użyty, ale po połączeniu przez SSH, $SSH_CONNECTIONzmienna środowiskowa będzie niepustym ciągiem, więc vimedytor zostanie użyty. Jest to edytor konsoli, więc będzie działać, nawet jeśli jesteś podłączony przez SSH.


2

Otworzyłem mój .gitconfigi poprawiłem go:

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

To mi zrobiło (mam system Windows 8).

Zauważyłem jednak, że po wypróbowaniu dowolnego git commit, w mojej konsoli Git Bash widzę następujący komunikat:

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

Nie jestem pewien, jakie mogą być tego konsekwencje.


Próbowałem też tego, ale otrzymywałem „fatalny: zły plik 14 wiersza konfiguracji w C: \ Users \ gep13 / .gitconfig”, potem zauważyłem, że mam ukośniki odwrotne, w których masz ukośniki. Zmiana tych rund sprawiła, że ​​zadziałało, ale podobnie jak ty widzę wyjście „Proces renderowania rozpoczęty”, które faktycznie wydaje mi dwa razy, a następnie pokazuje: „[11956: 0504/091108: BŁĄD: ipc_channel_win.cc (136)] potok error: 109 ", ale zatwierdzenie wydaje się działać.
Gary Ewan Park

Ach, ciekawe. Wygląda na to, że moja sugestia działa tylko wtedy, gdy kod jest całkowicie zamknięty (niezbyt wygodne!) Przed dokonaniem zatwierdzenia. Wystąpił ten sam błąd, który zgłosiłeś w aktualizacji, jeśli Kod jest otwarty.
miqh

rzeczywiście interesujące. Wydaje mi się, że właśnie w tym przypadku powinna pojawić się flaga -multiInst dla Notepad ++. Zastanawiam się, czy jest coś podobnego do VSCode.
Gary Ewan Park

Po prostu FYI, app-0.1.0/resources/app/env.jswydaje się, że zawiera kilka flag wiersza poleceń, które przyjmuje plik wykonywalny Code. Żaden nie sugeruje zachowania równoważnego z tym, co -multiInstjednak.
miqh

musisz dodać --waitflagę, a --new-windowflaga jest również wysoce zalecana, aby zatwierdzenie msg / diff / cokolwiek nie pojawiło się tylko jako nowa karta w już otwartym edytorze, wymagając od ciebie zamknięcia plików, którymi nadal możesz być pracujemy nad tym, aby zasygnalizować gitowi, że skończyłeś edycję.
Izochroniczny

1

GitPad ustawia bieżący edytor tekstu jako domyślny edytor dla Git.

Mój domyślny edytor .txtplików w systemie Windows 10 to Visual Studio Code, a po uruchomieniu GitPad stał się domyślnym edytorem Git. Nie spotkałem się z problemami wymienionymi w pytaniu (Git czeka na zamknięcie okna VS Code w moim przypadku).

(Link do .exepliku nie działał dla mnie, być może będziesz musiał samodzielnie skompilować źródło).


Na co wskazywałeś jako domyślny edytor? Próbowałem użyć tego, co jest tu opisane: donovanbrown.com/post/2015/07/07/... Ale to nie wydaje się, żeby działało. Naprawdę nie chcę wskazywać konkretnego pliku exe, ponieważ zmieni się to wraz z aktualizacją kodu.
Gary Ewan Park

1
@Gary, nie trzeba wskazać konkretny plik, kod był na liście, gdy zrobiłem Right click> Open with> Chose another app. Spodziewałbym się, że zarejestruje się podczas instalacji (i aktualizuje rejestr przy każdej aktualizacji, aby powłoka mogła go znaleźć), ale nie mogłem znaleźć niczego innego niż element menu kontekstowego „Otwórz za pomocą kodu” w rejestrze. Naprawdę nie mam na to wyraźniejszej odpowiedzi, przepraszam.
Şafak Gür

Hmm, to dziwne, nie mam kodu jako wpisu na liście, która pojawia się, kiedy to robię.
Gary Ewan Park

1

Dobre wieści! W momencie pisania tej funkcji ta funkcja została już zaimplementowana w wersji dla osób posiadających wiedzę wewnętrzną 0.10.12 i przeprowadzona za pośrednictwem osób wewnętrznych . Dlatego będziemy go mieć w nadchodzącej wersji 1.0 Wydanie VS Code .

Wdrożenie Ref: Implement -w / - wait linia poleceń arg


czy możesz skomentować, w jaki sposób mógłbym używać przeglądarki różnic w VSCode do przeglądania różnic w git?
Gary Ewan Park,

1

Chcę tylko dodać te ukośniki do poprzednich odpowiedzi, jestem na systemie Windows 10 CMD i nie działa bez ukośników przed spacjami.

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

Mogłem dodać: git config --global core.editor "'C: \ Users \ cbre_admin \ AppData \ Local \ Programs \ Microsoft VS Code \ Code.exe' -w"
rjt011000

0

Nie jestem pewien, czy możesz to zrobić, ale możesz wypróbować te dodatki w pliku gitconfig.

Spróbuj zastąpić kdiff3 tymi wartościami, aby wskazać kod wykonywalny programu Visual Studio.

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


Jak wspomniałem w moim pytaniu, nie sądzę, aby scalanie było obsługiwane, ponieważ nie sądzę, aby Visual Studio Code wiedział, jak to zrobić, podejrzewam, że będzie w stanie tylko różnicować i zatwierdzać przesyłanie komunikatów.
Gary Ewan Park

0

Ustawiłem Visual Studio Code jako domyślny, aby otworzyć plik .txt. A następnie zrobiłem komendę użycie prosta git config --global core.editor "'C:\Users\UserName\AppData\Local\Code\app-0.7.10\Code.exe\'". I wszystko działa całkiem dobrze.


0

Uruchom to polecenie w aplikacji terminalu Mac

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

2
To nie do końca działa, gdy pojawia się komunikat o błędzie: Przerwanie zatwierdzenia z powodu pustego komunikatu zatwierdzenia. Konieczne będzie dodanie flagi oczekiwania. Na przykład - czekaj.
Belfield

0

w systemie Windows 10 przy użyciu 64-bitowej edycji informacji niejawnych polecenie powinno wyglądać następująco:

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

możesz także zmienić nazwę „code-insiders.cmd” na „code.cmd” w katalogu „Program Files”, w ten sposób możesz teraz użyć polecenia „code”. aby rozpocząć edycję plików w. informator

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.