Jak naprawić / przekonwertować wcięcia w przestrzeni w Sublime Text?


228

Przykład: Jeśli mam dokument z wcięciem na dwie spacje i chcę, aby zawierał wcięcie na 4 spacje, jak mam go automatycznie przekonwertować za pomocą edytora Sublime Text?

Odpowiedzi:


525

Oto fajna sztuczka w Sublime Text 2 lub 3, aby przekonwertować odstępy między wcięciami w dokumencie.

TL; DR:

Przekształcanie z 2 spacji na 4 spacje:

Upewnij się, że szerokość tabulacji jest ustawiona na 2. Przekształć wcięcie 2 spacji w tabulatory, przełącz na szerokość tabulatora 4, a następnie przekonwertuj wcięcie z powrotem na spacje.

Szczegółowy opis:

Iść do:

View -> Indentation

Powinien brzmieć:

  • Indent using spaces [x]
  • Tab width: 2

Wybierz:

  • Convert Indentation to Tabs

Następnie wybierz:

  • Tab width: 4
  • Convert Indentation to Spaces

Gotowe.


5
Dziękuję Ci! : D Zaoszczędziłem dużo czasu. Uwaga. Możesz także zrobić „find: space-space => select all => tab”
Automatico

11
Stworzyłem Makro dla wzniosłego, które robi to wszystko dla ciebie gist.github.com/joshmfrankel/5707020 . Ciesz się :-)
Josh Frankel

2
Chcę zauważyć, że „Konwertuj wcięcie na spacje” działa również, jeśli masz plik tekstowy, w którym tabulatory nie zajmują całej szerokości tabulatorów. Powiedzmy, że w przypadku pliku, w którym autor użył tabulatorów do sformatowania kolumn, więc jeśli chcesz znaleźć i zamienić tabulatory, wynikowe kolumny nie będą już ustawione w kolejce. Użycie „Konwertuj wcięcie na spacje” zapewni prawidłowe wyrównanie
Joe Pinsonault,

Stworzyłem również makra i przykładowe skróty dla tego współpracownika, zanim zobaczyłem makro Josha. Mój używa ctrl + 2 i ctrl + 4, aby umożliwić przełączanie się tam iz powrotem: gist.github.com/beaugunderson/8588871
Beau

74

Odkryłem, że lepiej jest, aby moje zdrowie psychiczne miało zdefiniowane preferencje użytkownika:

"translate_tabs_to_spaces": true,
"tab_size": 2,
"indent_to_bracket": true,
"detect_indentation": false

Jest detect_indentation: falseto szczególnie ważne, ponieważ zmusza Sublime do honorowania tych ustawień w każdym pliku, w przeciwieństwie do View -> Indentationustawień.

Jeśli chcesz się podobać, możesz także zdefiniować skrót klawiaturowy, aby automatycznie ponownie wciąć kod (YMMV), wklejając Sublime -> Preferences -> Key Binding - User:

[
  { "keys": ["ctrl+i"], "command": "reindent" }
]

i wizualizacji białych znaków:

"indent_guide_options": ["draw_active"],
"trim_trailing_white_space_on_save": true,
"ensure_newline_at_eof_on_save": true,
"draw_white_space": "all",
"rulers": [120],

9

W moim odczuciu znalazłem prostsze rozwiązanie niż Magne:

Na komputerze Mac:

"cmd+f" => "  "(two spaces) => "alt+enter" => "arrow right" => "  "(two more spaces) => set tab width to 4(this can be done before or after.

Na Windows lub innych platformach zmiany cmd+fi alt+enterze Niezależnie findand select allskróty klawiszowe są.

Uwaga: ta metoda jest podatna na „błędy”, jeśli masz więcej niż jedną spację w kodzie. Jest więc mniej bezpieczny niż metoda Magne'a, ale jest szybszy (przynajmniej dla mnie).


Nie mogłem tego uruchomić, ale skorzystałem z tej zasady i po prostu zrobiłem wyszukiwanie i zamieniłem (cmd-Option-F na Macu) i zastąpiłem „” (4 spacje) „” (2 spacje). I zadziałało!
evanbikes,

Znalazłem teraz inny sposób na zrobienie tego, ale jest on specyficzny dla języka. Jeśli masz taką wtyczkę formatującą RubyFormat, możesz po prostu ustawić żądany rozmiar tabulatora, a następnie ponownie sformatować kod. W takim przypadku RubyFormatbyłoby cmd+shift+R.
Automatico

7

Podczas gdy wiele sugestii działa podczas konwersji 2 -> 4 spacji. Wystąpiły problemy podczas konwersji 4 -> 2.

Oto, co wykorzystałem:

Sublime Text 3/Packages/User/to-2.sublime-macro

[
  { "args": null, "command": "select_all" },
  { "args": { "set_translate_tabs": true }, "command": "unexpand_tabs" },
  { "args": { "setting": "tab_size", "value": 1 }, "command": "set_setting" },
  { "args": { "set_translate_tabs": true }, "command": "expand_tabs" },
  { "args": { "setting": "tab_size", "value": 2 }, "command": "set_setting" }
]

5

Jeśli znajdziesz wyszukiwanie i zamień szybciej w użyciu, możesz użyć wyrażenia regularnego w następujący sposób:

Znajdź (regex): (^|\G) {2}(Zamiast „{2}” <space>{2} możesz po prostu napisać dwie spacje. Użyj go tutaj dla zachowania przejrzystości.)

Zamień na 4 spacje lub cokolwiek chcesz \t.


5

Napisałem do tego wtyczkę. Możesz go znaleźć tutaj lub poszukać „ReIndent” w kontroli pakietów. Przeważnie robi to samo, co napisał Kyle Finley, ale w wygodny sposób ze skrótami do konwersji między 2 a 4 i odwrotnie.


2

Musisz dodać ten kod do niestandardowych przypisań klawiszy:

{ "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }

naciskając kombinację klawiszy Ctrl + F12, plik zostanie przywrócony do rozmiaru tabulatora 4. Jeśli chcesz mieć inny rozmiar tabulatora, po prostu zmień liczbę „wartość”. Format to prosty Json.


Podoba mi się dzięki! Dodałem 2 i 4 w ten sposób:{ "keys": ["ctrl+f10"], "command": "set_setting", "args": {"setting": "translate_tabs_to_spaces", "value": 2} }, { "keys": ["ctrl+f11"], "command": "set_setting", "args": {"setting": "tab_size", "value": 2} }, { "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} },
JREAM

0

Najłatwiejszą rzeczą, jaką zrobiłem, było

zmieniłem moje wcięcie na tabulatory

i to rozwiązało mój problem.

Możesz zrobić to samo,

w miejsca

jak również w zależności od potrzeb.

Wspomniał migawkę tego samego.

wprowadź opis zdjęcia tutaj


Tak, ale pytanie dotyczy sytuacji, w której zarówno zaczynasz, jak i kończysz wcięciem jako spacją.
Magne

0

Ostatnio napotkałem podobny problem. Korzystałem z wysublimowanego edytora. to nie jest problem z kodem, ale z edytorem.

Poniższa zmiana ustawień preferencji zadziałała dla mnie.

Menu Sublime Text -> Preferencje -> Ustawienia: Specyficzne dla składni :

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}
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.