Podniosły tekst 3, zamień spacje na tabulatory


192

Wiem, że jest wiele postów na ten temat, ale nie mogłem go uruchomić.
Używam zakładek do kodowania. Czy istnieje sposób na konwersję zawsze spacji na tabulatory? Czyli na otwartych i na Zapisz pliki? Czy ktoś ma pomysł?

// edit:
Moim pragnieniem jest zrobienie tego automatycznie ! -> otwórz, zapisz lub w locie
Czy ktoś wie jak to zrobić?


Próbowałem tego :

import sublime, sublime_plugin, os

class ExpandTabsOnSave(sublime_plugin.EventListener):
  # Run ST's 'expand_tabs' command when saving a file
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.window().run_command('expand_tabs')

A oto moje ustawienia użytkownika:

{
    "auto_complete_selector": "source - comment, meta.tag - punctuation.definition.tag.begin",
    "auto_indent": true,
    "detect_indentation": true,
    "draw_white_space": "all",
    "ensure_newline_at_eof_on_save": true,
    "expand_tabs_on_save": true,
    "font_face": "SourceCodePro-Regular",
    "font_size": 10,
    "format_on_save": true,
    "ignored_packages":
    [
        "Vintage"
    ],
    "indent_to_bracket": true,
    "open_files_in_new_window": false,
    "smart_indent": true,
    "tab_size": 4,
    "translate_tabs_to_spaces": false,
    "trim_automatic_white_space": true,
    "trim_trailing_white_space_on_save": true,
    "use_tab_stops": false,
    "word_wrap": false
}

Opublikowana przez Ciebie wtyczka działa właściwie dla mnie na ST3, kompilacja 3059. Czy możesz otworzyć konsolę Ctrl + ~i sprawdzić, czy występują jakieś błędy? A jeśli masz zainstalowany pakiet kontroli, czy możesz sprawdzić, czy ExpandTabsOnSavejest wymieniony jako zainstalowana wtyczka?
angerson

zwariowany, wydaje się być zainstalowany (wymieniony w listach pakietów) iw konsoli nie mogę znaleźć żadnych błędów :-(
chris

Spróbuj dodać print("debug")wtyczkę lub podobną wtyczkę, aby sprawdzić, czy jest wykonywana, czy nie przy zapisywaniu.
angerson

omg, to działa! był niewłaściwy katalog na komputerze z systemem Windows, paczki są wymienione w użytkownik /.../ AppData / Roaming / SublimeText3 / Pakiety Bardzo dziękuję!
Chris

Upewnij się, że ustawiłeś ten widok jako widok aktywny dla okna przed uruchomieniem polecenia. Może nie jest to bardzo prawdopodobne, ale po opublikowaniu może rozwinąć zakładki innej strony niż ta, którą próbujesz zapisać. Przypuszczam, że nawet w przypadku widoku fokusowego istnieje możliwość zapisania do niewłaściwego pliku, ale przynajmniej możesz zminimalizować ryzyko.
skuroda

Odpowiedzi:


377

W prawym dolnym rogu okna Sublime Text zobaczysz wskaźnik wcięcia, który wygląda mniej więcej tak:

Menu opcji wcięcia

Kliknięcie spowoduje otwarcie menu z opcjami, aby dostosować swoje preferencje wcięcia, a co ważniejsze, Convert Indentation to Tabs/Spaces.

wprowadź opis zdjęcia tutaj

To samo menu znajduje się w części View -> Indentation.


42
tak, wiem. Moim pragnieniem jest zrobienie tego automatycznie ... jakiś pomysł?
Chris

2
@chris ツ Ah. Czy możesz sformatować swoje pytanie, aby stało się to bardziej oczywiste? Tęskniłem za twoim znaczeniem, więc inni też mogą.
angerson

Nie mam tego paska stanu na dole - jak go zdobyć?
geoidesic

1
Dotyczy to całego pliku i nie można tego zrobić tylko w przypadku zaznaczenia.
not2qubit

Bardzo dobrze. Zrobiłem też „Command-a”, aby zaznaczyć wszystko, „Command- [”, aby cofnąć wcięcie, a następnie „edit> line> reindent”, aby naprawić plik. Jestem pewien, że można to wbudować w makro.
Brooks DuBois,

130

U dołu okna Sublime zobaczysz coś, co reprezentuje twoje ustawienie tabulatorów / spacji.

Otrzymasz listę rozwijaną z wieloma opcjami. Dostępne opcje to:

  • Konwertuj wcięcia na spacje
  • Konwertuj wcięcia na tabulatory

Zastosuj wybrane ustawienie do całego dokumentu.

Mam nadzieję że to pomoże.


2
Chciałbym, aby można było to zrobić po załadowaniu i automatycznie ... dla wszystkich plików, które otwieram. Mam na myśli: konwersję spacji w tabulatory. Byłby uruchamiany automatycznie przy ładowaniu :-)
Filip OvertoneSinger Rydlo

1
Słyszę cię na ten temat. Wolę tabulacje, ale rozumiem, dlaczego dużo kodu jest pisane spacjami. W przypadku spacji nie będzie niezgodności między IDE - spacja jest spacją jest spacją. Tabulatory mogą zajmować zmienną liczbę spacji między IDE i powodować, że kod wygląda dziwnie.
erier

Cześć @Green - co na to nie działa?
Rozpracujmy

80

Jak zapewne wiesz, możesz dostosować ustawienia wcięcia Preferences.sublime-settings, na przykład:

"detect_indentation": true,
"tab_size": 4,
"translate_tabs_to_spaces": false

Spowoduje to ustawienie edytora do używania kart o szerokości 4 spacji i zastąpi domyślne zachowanie, które powoduje, że Sublime dopasowuje wcięcie dowolnego edytowanego pliku. Przy tych ustawieniach ponowne wcięcie pliku spowoduje zastąpienie spacji tabulatorami.

Jeśli chodzi o automatyczne ponowne wcięcie przy otwieraniu pliku, nie jest to wcale takie łatwe (ale prawdopodobnie nie jest to świetny pomysł, ponieważ zmiany białych znaków sieją spustoszenie w różnicach plików). Co może być lepszym sposobem działania: możesz zmapować skrót do ponownego wcięcia i po prostu uruchomić go po otwarciu nowego pliku, który wymaga naprawy.


13

Aby rozwiązać ten problem, możesz użyć palety poleceń.

Krok 1: Ctrl + Shift + P(aby aktywować paletę poleceń)

Krok 2: Wpisz „Wcięcie”, wybierz "Indentation: Convert to Tabs"


1
Doskonały. Dziękuję Ci.
RJ

Najlepsze rozwiązanie Dzięki!
Matthew K

7

W moim przypadku ta linia rozwiązała problem:

"translate_tabs_to_spaces": false

4

Oto rozwiązanie, które będzie automatycznie konwertować na zakładki przy każdym otwarciu pliku.

Utwórz ten plik .../Packages/User/on_file_load.py:

import sublime
import sublime_plugin

class OnFileLoadEventListener(sublime_plugin.EventListener):

    def on_load_async(self, view):
        view.run_command("unexpand_tabs")

UWAGA. Powoduje, że plik jest w niezapisanym stanie po otwarciu, nawet jeśli nie nastąpiła faktyczna konwersja spacji do tabulacji ... może niektóre mogą pomóc w rozwiązaniu tego problemu ...


Myślę, że miałeś na myśli .../Packages/User/on_file_load.py, nie.php
Pranav Nutalapati

@PranavNutalapati Dzięki za złapanie tego.
TheStoryCoder,

Tak jasne Nie ma problemu.
Pranav Nutalapati

spróbuj on_loadzamiast on_load_async.
Pedro Góes,

3

Aby automatycznie przekonwertować spacje na tabulatory podczas zapisywania , dodaj następujący skrypt Python do nowo utworzonego podfolderu o nazwie „UnexandTabsOnSave” w ramach „$ SUBLIME_HOME $ \ Packages \”:

import sublime, sublime_plugin, os

class ConvertSpacesToTabsOnSave( sublime_plugin.EventListener ):
  # Run Sublime's 'unexpand_tabs' command when saving any file
  def on_pre_save( self, view ):
    view.window().run_command( 'unexpand_tabs' )

Dziękujemy za początkowe zasoby.


0

Możesz zastąpić tabulatory spacjami we wszystkich plikach projektu przez:

  1. Robi Zamień wszystko Ctrl+Shif+F
  2. Ustaw wyszukiwanie wyrażeń regularnych ^\A(.*)$
  3. Ustaw katalog na Your dir
  4. Zastąpiony przez \1

    wprowadź opis zdjęcia tutaj

  5. Spowoduje to otwarcie wszystkich plików projektu, a ich bufor zostanie oznaczony jako brudny. Dzięki temu możesz teraz opcjonalnie włączyć te następne ustawienia Podniosłego tekstu, aby przyciąć wszystkie pliki na końcu białych znaków i zapewnić nową linię na końcu każdego pliku.

    Możesz włączyć te ustawienia, przechodząc do menu Preferences -> Settingsi dodając te treści do pliku ustawień:

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. Otwórz konsolę Sublime Text, przechodząc do menu View -> Show Console (Ctrl+`)i uruchom polecenie: import threading; threading.Thread( args=(set(),), target=lambda counterset: [ (view.run_command( "expand_tabs", {"set_translate_tabs": True} ), print( "Processing {:>5} view of {:>5}, view id {} {}".format( len( counterset ) + 1, len( window.views() ), view.id(), ( "Finished converting!" if len( counterset ) > len( window.views() ) - 2 else "" ) ) ), counterset.add( len( counterset ) ) ) for view in window.views() ] ).start()
  7. Teraz zapisz wszystkie zmienione pliki, przechodząc do menu File -> Save All

0

jeśli masz komputer Mac, skorzystaj z opcji pomocy (zwykle ostatnia opcja na pasku menu komputera Mac), a następnie wpisz: „wcięcie tabulatora” i wybierz szerokość wcięcia tabulatora

ale ogólnie rzecz biorąc, możesz podążać tą ścieżką: widok -> wcięcie



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.