Visual Studio Code: format nie używa ustawień wcięcia

143

Podczas korzystania z Format Codepolecenia w programie Visual Studio Code nie honoruje moich ustawień wcięcia ( "editor.tabSize": 2). Zamiast tego używa rozmiaru zakładki 4. Jakieś pomysły, dlaczego tak się dzieje?

Dzięki!

AndyPerlitch
źródło
Jaki język? Visual Studio Code deleguje formatowanie do programu formatującego język. Niektóre programy formatujące przestrzegają ustawienia wcięcia. Na przykład C #, który jest obsługiwany przez OmniSharp i powinien być skonfigurowany za pomocą omnisharp.json
Ian Yang
Zajęło mi to dużo czasu, zanim się zorientowałem: miałem plik .cs z mieszanymi tabulatorami i wcięciami spacji i chciałem sformatować go ze wszystkimi tabulatorami (b / c większość linii miała tabulatory). Próbowałem różnych wartości ustawień z „Formatuj dokument” i „Formatuj wybór”, ale nie miałem szczęścia. W końcu znalazłem akcję „Przekształć wcięcie w tabulatory” (zobacz obrazek w odpowiedzi @ Maleki) i zrobiłem to, co chciałem zrobić. (Niedawno odkryłem również ctrl-shift-p! ... tak, jestem nowy w VS Code)
KevinVictor

Odpowiedzi:

228

Liczba spacji używanych do formatowania jest pobierana z innej lokalizacji. Używam wersji 1.0 i oto, co zrobiłem, aby to naprawić (zakładam, że używasz spacji zamiast tabulatorów):

U dołu edytora po prawej stronie kliknij „Spacje: #”:

pasek stanu po prawej stronie

Następnie u góry pojawi się menu. Wybierz „Wcięcie przy użyciu spacji”:

wybierz typ wcięcia

Na koniec możesz wybrać, o ile spacji mają być wcięte pliki.

wybierz rozmiar zakładki

Następnym razem, gdy formatujesz plik, powinieneś być w stanie uzyskać skonfigurowane odstępy.

Maleki
źródło
28
To ustawienie nie jest używane podczas stosowania formatu automatycznego (kliknij prawym przyciskiem myszy -> Formatuj kod). Zawsze zajmuje 4 spacje.
kiml42
Musisz mieć jedno i drugie - skonfigurować swoje osobiste ustawienia dla obszaru roboczego lub edytora (lub obu). Nowe pliki przyjmą to ustawienie i pokażą na przykład „2” na pasku stanu, jak na tych zrzutach ekranu. Następnie możesz autoformatować. W przypadku istniejących plików najpierw ustaw obszar roboczy / ustawienia edytora na „użyj tabulatorów” lub „użyj spacji” i ustaw liczbę spacji, a następnie możesz zastosować powyższą metodę, aby automatycznie sformatować istniejące pliki.
rmcsharry,
5
Skonfiguruj ustawienia użytkownika i obszaru roboczego, ustaw je na dolnym pasku, ponownie otwarty plik - nadal autoformatowanie używa 4 spacji ...
Jared
3
Musieliśmy wyjść i ponownie uruchomić vscode po ustawieniu domyślnych ustawień użytkownika i obszaru roboczego. Dopiero wtedy przestał próbować używać 4 spacji na moich plikach JS.
John Pettitt,
11
@Jared Myślę, że używasz JS-CSS-HTMLwtyczki. W takim przypadku naciśnij F1i wybierz formater i ustaw tam swoje wcięcie. Wydaje się, że przesłania wszystkie opcje omówione powyżej.
Atif Mohammed Ameenuddin
112

Visual Studio Code domyślnie wykrywa bieżące wcięcie i używa tego - ignorując plik .editorconfig

Ustaw również „editor.detectIndentation” na false

(Pliki -> Preferencje -> Ustawienia)

zrzut ekranu

jnkb
źródło
Jeśli tak się stanie, prawdopodobnie masz niespójne wcięcia w pliku. Miałem plik z tabulatorami wszędzie z wyjątkiem kilku wierszy z dwiema spacjami (nie wiadomo dlaczego), które zostały wykryte jako używające tabulatorów, ale z tabulatorami o rozmiarze 2.
isanae
49

Jeśli odpowiedź @ Maleki nie działa dla Ciebie, sprawdź i zobacz, czy masz .editorconfigplik w folderze projektu.

Na przykład Angular CLI generuje jeden z nowym projektem, który wygląda tak

# Editor configuration, see http://editorconfig.org
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
max_line_length = off
trim_trailing_whitespace = false

Zmiana indent_sizetutaj jest wymagana, ponieważ wydaje się, że zastąpi wszystko w .vscodeobszarze roboczym lub ustawieniach użytkownika.

seangwright
źródło
5
Musiałem zrestartować VSCode, aby zmiana odniosła skutek w IDE.
JOpuckman
3
W moim przypadku było to spowodowane .editorconfigplikiem w moim katalogu domowym. W jakiś sposób powoduje, że VSCode ignoruje wszelkie ustawienia specyficzne dla obszaru roboczego. Bardzo irytujące.
xji
20

Jeśli używasz wtyczki (w moim przypadku Vetur, dla vue.js), mogą one ustawić własne ustawienia formatowania kart.

Otwórz ustawienia, wyszukaj „format” i przejrzyj odpowiednie ustawienia wtyczek, które mogą nadpisywać globalny format karty. To zadziałało dla mnie; po zaktualizowaniu ustawień karty Vetur, aby pasowały do ​​moich preferencji (w moim przypadku 4-rozmiarowe karty), formatowanie dokumentów .vue zaczęło działać poprawnie:

wprowadź opis obrazu tutaj

Ciabaros
źródło
To prawda, w moim przypadku musiałem ustawić rozmiar karty również w ustawieniach rozszerzenia Prettier.
tonix
Warto zauważyć, że SCSS Formatterwtyczka używa na przykład własnych ustawień, więc musisz przejść do, Settings > Extensions > SCSS Formatter > Use Tabsaby zmusić ją na przykład do używania zakładek.
SmartyP
13

Dla mnie ten problem był spowodowany użyciem prettierwtyczki VSCode bez ładniejszego pliku konfiguracyjnego w obszarze roboczym.

Wyłączenie wtyczki rozwiązało problem. Prawdopodobnie można było to naprawić, opierając się na ładniejszej konfiguracji.

uwaga na ogon
źródło
1
Dla mnie była to wtyczka „Beautify”.
Matthew Smith
Miałem ten sam problem z plikiem konfiguracyjnym „Clang-Format” i „.clang-format”.
repkap11
6

Najprawdopodobniej masz zainstalowane jakieś rozszerzenie formatujące, np. JS-CSS-HTML Formatter .

Jeśli tak jest, po prostu otwórz Command Palette, wpisz „Formatter” i wybierz Formatter Config. Następnie edytuj wartość, "indent_size"jak chcesz.

PS Nie zapomnij ponownie uruchomić Visual Studio Code po edycji :)

Albert Timashev
źródło
6

poniższe ustawienia rozwiązały mój problem

  "editor.detectIndentation": false,
  "editor.insertSpaces": false,
  "editor.tabSize": 2,
rashidnk
źródło
działa, jeśli pracujesz z plikami tylko z 2 spacjami!
Dominux
2

Jeśli przyszedłeś tu z Google, ponieważ zakładka nie ma wcięć, może to być również spowodowane tym, że opcja „Tab Moves Focus” jest włączona. Znajduje się w prawym dolnym rogu i jeśli masz wystarczająco duży monitor, możesz go przegapić, mimo że jest podświetlony.

wprowadź opis obrazu tutaj

Kliknij zielony obszar lub Ctrl + M, aby zatrzymać. Nie jestem pewien, czy można go całkowicie wyłączyć, ale znowu nie wiem, dlaczego edytor kodu miałby mieszać w czymś takim jak wcięcia.

StingyJack
źródło
2

Miałem podobny problem - bez względu na to, co zrobiłem, nie mogłem ustawić rozmiaru karty na 2, mimo że jest to w moich ustawieniach użytkownika - wynikało to z rozszerzenia EditorConfig . Szuka .editorconfigpliku w twoim bieżącym katalogu roboczym, a jeśli go nie znajdzie (lub ten, który znajdzie, nie określa root=true), będzie kontynuował przeglądanie katalogów nadrzędnych, dopóki go nie znajdzie.

Okazało się, że .editorconfigw katalogu nadrzędnym katalogu, w którym umieściłem wszystkie moje nowe projekty kodu, określono tabSize równą 4. Usunięcie tego pliku rozwiązało mój problem.

bantic
źródło
1

Czasami mam ten sam problem. VSCode po prostu nagle straci rozum i całkowicie zignoruje wszelkie ustawienia wcięć, które mu powiem, mimo że wcinał ten sam plik przez cały dzień.

Mam editor.tabSizeustawiony na 2 (jak również editor.formatOnSavezestaw do true). Kiedy VSCode psuje plik, używam opcji u dołu edytora, aby zmienić typ i rozmiar wcięcia, mając nadzieję, że coś zadziała, ale VSCode nalega na użycie rozmiaru wcięcia 4.

Poprawka? Uruchom ponownie VSCode. Powinien powrócić ze statusem wcięcia pokazującym coś nie tak (w moim przypadku 4). W moim przypadku musiałem zmienić ustawienie, a następnie zapisać, aby faktycznie dokonać zmiany, ale to prawdopodobnie z powodu mojego editor.formatOnSaveustawienia.

Nie wiem, dlaczego tak się dzieje, ale dla mnie zwykle dzieje się tak, gdy edytuję zagnieżdżony obiekt w pliku JS. Nagle zrobi bardzo dziwne wcięcie w obiekcie, mimo że pracowałem nad tym plikiem przez jakiś czas i wcinanie było w porządku.

MrOBrian
źródło
0

Wtyczka VSCode Vetur; używane w aplikacjach VueJS unieważniało to ustawienie.

Ustawienie vetur.format.options.tabSize na preferowaną przeze mnie liczbę spacji sprawiło, że zadziałało.

Swoot
źródło
0

Myślę, że vscode domyślnie używa autopep8 do formatowania .py.

„PEP 8 - Style Guide for Python Code | Python.org”

Zgodnie z tą witryną, poniższe mogą wyjaśnić, dlaczego vscode zawsze używa 4 spacji.

Użyj 4 spacji na poziom wcięcia.

Choi
źródło
-1

Wyłącz wszystkie wtyczki (następnie włączaj pojedynczo i weryfikuj)

fider
źródło