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
}
Chris
źródło
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.

angerson
źródło
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.

erier
źródło
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.

justin
źródło
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"

Jojoleo
źródło
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
vljs
źródło
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 ...

TheStoryCoder
źródło
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.

sean2078
źródło
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
użytkownik
źródło
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

Ali
źródło
0

Aby rozwiązać problem, użyj następującego polecenia:

autopep8 -i <filename>.py
Sharyar Vohra
źródło