Sublime Text 3, boşlukları sekmelere dönüştür


192

Bu konuda çok fazla yazı olduğunu biliyorum, ama işe yaramadım.
Kodlama için sekmeler kullanıyorum. Her zaman boşlukları sekmelere dönüştürmenin bir yolu var mı? Yani açık ve Dosyaları kaydet? Bir fikriniz var mı?

// edit:
Arzum bunu otomatik olarak yapmak ! -> aç, kaydet veya anında
Herkes nasıl yapılacağını biliyor mu?


Denedim bu :

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')

İşte kullanıcı ayarlarım:

{
    "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
}

Gönderdiğiniz eklenti aslında ST3, 3059 derlemesi için benim için iyi çalışıyor. Konsolu açabilir Ctrl + ~ve size herhangi bir eklenti hatası verip vermediğini görebilir misiniz ? Paket Kontrolü yüklüyse, ExpandTabsOnSaveyüklü bir eklenti olarak listelenip listelenmediğini görebiliyor musunuz?
angerson

deli biri, yüklü gibi görünüyor (liste paketleri altında listelenen) ve konsolda herhangi bir hata bulamıyorum :-(
chris

print("debug")Kaydedilip kaydedilmediğini görmek için eklentiyi eklemeyi veya buna benzer bir şeyi deneyin .
Mart'ta angerson

Aman tanrım, işleri! windows makinesinde yanlış dizin, paketleri kullanıcı /.../ AppData / Roaming / SublimeText3 / Paketler listelenmiştir Çok teşekkürler!
chris

Komutu çalıştırmadan önce bu görünümü pencere için etkin görünüm olarak ayarladığınızdan emin olun. Çok olası olmayabilir, ancak yayınladığınız gibi, kaydetmeye çalıştığınız sayfadan farklı bir sayfanın sekmelerini genişletmesi mümkündür. Odak görünümünde bile, yanlış bir dosyaya kaydetme şansı olduğunu düşünüyorum, ancak en azından riski en aza indirebilirsiniz.
Mart'ta skuroda

Yanıtlar:


377

Sublime Text pencerenizin sağ alt köşesinde, aşağıdakine çok benzeyen bir girinti göstergesi görürsünüz:

Girinti seçenekleri menüsü

Tıklandığında, girinti tercihlerinizi ve daha da önemlisi, ayarlama seçeneklerini içeren bir menü açılır Convert Indentation to Tabs/Spaces.

resim açıklamasını buraya girin

Aynı menü altında listelenmiştir View -> Indentation.


42
Evet biliyorum. Benim arzum bunu otomatik olarak yapmak ... herhangi bir fikir?
chris

2
@chris ツ Ah. Sorunuzu daha açık bir şekilde ortaya koymak için yeniden biçimlendirebilir misiniz? Anlamını kaçırdım, böylece diğerleri de olabilir.
angerson

Altta durum çubuğum yok - nasıl edinebilirim?
geoidesic

1
Ve tüm bu dosyada yapar ve olabilir değil bir seçime sadece yapılabilir.
not2qubit

Çok hoş. Ayrıca tümünü seçmek için 'command-a', girintiyi kaldırmak için 'command- [', ardından dosyayı düzeltmek için 'edit> line> reindent' yaptım. Eminim bu bir makro içine yerleştirilebilir.
Brooks DuBois

130

Sublime penceresinin altında, sekme / boşluk ayarınızı temsil eden bir şey görürsünüz.

Daha sonra bir dizi seçenek içeren bir açılır menü alırsınız. Önem verdiğiniz seçenekler şunlardır:

  • Girintiyi Boşluklara Dönüştür
  • Girintiyi Sekmelere Dönüştür

İstediğiniz ayarı belgenin tamamına uygulayın.

Bu yardımcı olur umarım.


2
Keşke bu yüklendiğinde ve otomatik olarak yapılabilseydi ... açtığım tüm dosyalar için. Demek istediğim, girinti boşluklarının sekmelere dönüştürülmesi.
Yüklemede

1
Seni duyuyorum. Sekmeleri tercih ederim AMA kodların neden boşluklarla yazıldığını anlıyorum. Boşluklarda IDE'ler arasında herhangi bir tutarsızlık olmayacaktır - bir boşluk bir boşluktur. Sekmeler IDE'ler arasında değişken sayıda alan kaplayabilir ve kodun garip görünmesini sağlayabilir.
erier

Merhaba @Yeşil - bu konuda ne işe yaramaz? Hadi bunu
halledelim

80

Bildiğiniz gibi girinti ayarlarınızı aşağıdaki gibi özelleştirebilirsiniz Preferences.sublime-settings:

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

Bu, düzenleyicinizi 4 boşluk genişliğinde sekmeleri kullanacak ve Sublime'ın düzenlediğiniz dosyanın girintisiyle eşleşmesine neden olan varsayılan davranışı geçersiz kılacaktır. Bu ayarlarla, dosyanın yeniden girintilenmesi boşlukların sekmelerle değiştirilmesine neden olur.

Bir dosyayı açarken otomatik olarak yeniden girintilendiği sürece, bu o kadar kolay değildir (ancak boşluk değişiklikleri dosya farklarında hasara yol açtığından muhtemelen iyi bir fikir değildir). Daha iyi bir işlem yöntemi olabilir: yeniden girintili bir kısayolu eşleyebilir ve düzeltilmesi gereken yeni bir dosyayı açtığınızda bunu tetikleyebilirsiniz.


13

Bu sorunu çözmek için komut paletini kullanabilirsiniz.

Adım 1: Ctrl + Shift + P(Komut paletini etkinleştirmek için)

2. Adım: "Girinti" yazın, "Indentation: Convert to Tabs"


1
Mükemmel. Teşekkür ederim.
RJ

En iyi çözüm. Teşekkürler!
Matthew K

7

Benim durumumda, bu satır sorunu çözdü:

"translate_tabs_to_spaces": false

4

İşte bir dosyayı her açtığınızda otomatik olarak sekmelere dönüşecek bir çözüm.

Bu dosyayı oluştur .../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")

NOT. Gerçek bir sekmeden sekmeye dönüştürme gerçekleşmemiş olsa bile, dosyanın açıldıktan sonra kaydedilmemiş bir durumda olmasına neden olabilir ... belki bazıları bunun için bir düzeltmeye yardımcı olabilir ...


Sanırım demek .../Packages/User/on_file_load.pyistemiyorsun, değil.php
Pranav Nutalapati

@PranavNutalapati Bunu yakaladığınız için teşekkürler.
TheStoryCoder

Evet tabi. Sorun değil.
Pranav Nutalapati

on_loadyerine deneyin on_load_async.
Pedro Góes

3

Boşlukları kaydetme sırasında sekmelere otomatik olarak dönüştürmek için , aşağıdaki Python komut dosyasını "$ SUBLIME_HOME $ \ Packages \" içinde "UnexpandTabsOnSave" adlı yeni bir alt klasöre ekleyin:

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' )

İlk kaynak için teşekkürler.


0

Sekmeleri tüm proje dosyalarındaki boşluklarla aşağıdaki yollarla değiştirebilirsiniz:

  1. Tümünü Değiştir Ctrl+Shif+F
  2. Normal ifade aramasını ayarlama ^\A(.*)$
  3. Dizini olarak ayarla Your dir
  4. Değiştiren \1

    resim açıklamasını buraya girin

  5. Bu, arabellek kirli olarak işaretlenmiş tüm proje dosyalarının açılmasına neden olur. Bununla artık beyaz boşluk izleyen tüm dosyaları kırpmak ve her dosyanın sonunda yeni bir satır olmasını sağlamak için isteğe bağlı olarak bu sonraki Yüce Metin ayarlarını etkinleştirebilirsiniz.

    Menüye Preferences -> Settingsgidip bu içeriği ayarlar dosyanıza ekleyerek bu ayarları etkinleştirebilirsiniz :

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. Menüye giderek Sublime Text konsolunu açın View -> Show Console (Ctrl+`)ve şu komutu çalıştırın: 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. Şimdi, değiştirilen tüm dosyaları menüye giderek kaydedin File -> Save All

0

Mac'iniz varsa sadece yardım seçeneğini kullanın (genellikle Mac'in menü çubuğundaki son seçenek), ardından "sekme girintisi" yazın ve bir sekme girintisi genişliği seçin

ancak genellikle şu yolu takip edebilirsiniz: view -> indentation



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.