Sublime Text 3, konversi spasi menjadi tab

192

Saya tahu ada banyak posting tentang ini, tetapi saya tidak bisa membuatnya berfungsi.
Saya menggunakan tab untuk pengkodean. Apakah ada cara, untuk mengubah selalu spasi menjadi tab? Yaitu terbuka dan di Simpan file? Adakah yang punya ide?

// edit:
Keinginan saya adalah melakukan ini secara otomatis ! -> buka, simpan atau on the fly
Apakah ada yang tahu caranya?


Saya mencoba ini :

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

Dan di sini adalah Pengaturan pengguna saya:

{
    "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
sumber
Plugin yang Anda posting sebenarnya berfungsi dengan baik untuk saya di ST3, build 3059. Bisakah Anda membuka konsol dengan Ctrl + ~dan melihat apakah itu memberi Anda kesalahan plugin? Dan jika Anda memiliki Paket Kontrol yang diinstal, dapatkah Anda melihat apakah ExpandTabsOnSaveterdaftar sebagai plugin yang diinstal?
angerson
gila, tampaknya akan diinstal (terdaftar di bawah daftar paket) dan di konsol saya tidak dapat menemukan kesalahan :-(
chris
Coba tambahkan print("debug")atau mirip dengan plugin untuk melihat apakah itu menjalankan atau tidak di simpan.
Angerson
OMG, itu berhasil! adalah direktori yang salah pada mesin windows, paket terdaftar di pengguna / .../ AppData / Roaming / SublimeText3 / Paket Terima kasih banyak!
chris
Pastikan Anda mengatur tampilan itu sebagai tampilan aktif untuk jendela sebelum menjalankan perintah. Mungkin tidak terlalu mungkin, tetapi saat Anda mempostingnya, ada kemungkinan memperluas tab dari halaman yang berbeda dari yang Anda coba simpan. Bahkan dengan tampilan fokus, saya kira ada kemungkinan itu bisa menyimpan ke file yang salah, tetapi setidaknya Anda dapat meminimalkan risikonya.
skuroda

Jawaban:

376

Di sudut kanan bawah jendela Teks Sublime Anda, Anda akan melihat indikator lekukan yang sangat mirip seperti ini:

Menu opsi lekukan

Mengkliknya akan membuka menu dengan opsi untuk menyesuaikan preferensi indentasi Anda, dan yang lebih penting Convert Indentation to Tabs/Spaces,.

masukkan deskripsi gambar di sini

Menu yang sama tercantum di bawah View -> Indentation.

Angerson
sumber
42
ya saya tahu. Keinginan saya adalah membuat ini secara otomatis ... ada ide?
chris
2
@ Chris ツ Ah. Bisakah Anda memformat ulang pertanyaan Anda agar lebih jelas? Saya merindukan makna Anda, sehingga orang lain mungkin juga.
Angerson
Saya tidak memiliki bilah status di bagian bawah - bagaimana cara mendapatkannya?
geoides
1
Dan ini dilakukan pada seluruh file, dan tidak bisa dilakukan hanya pada seleksi.
not2qubit
Sangat bagus. Saya juga melakukan 'command-a' untuk memilih semua, 'command- [' untuk un-indent, kemudian 'edit> line> reindent' untuk memperbaiki file. Saya yakin ini bisa dibangun menjadi makro.
Brooks DuBois
130

Di bagian bawah jendela Sublime, Anda akan melihat sesuatu yang mewakili pengaturan tab / spasi Anda.

Anda kemudian akan mendapatkan dropdown dengan banyak opsi. Opsi yang Anda pedulikan adalah:

  • Konversi Lekukan ke Spasi
  • Konversikan Indentasi ke Tab

Terapkan pengaturan yang Anda inginkan ke seluruh dokumen.

Semoga ini membantu.

erier
sumber
2
Saya berharap ini bisa dilakukan saat memuat dan secara otomatis ... untuk semua file yang saya buka. Maksud saya: konversi ruang indentasi menjadi tab. Ini akan dijalankan secara otomatis saat memuat :-)
Filip OvertoneSinger Rydlo
1
Saya mendengar Anda tentang itu. Saya lebih suka tab TETAPI saya mengerti mengapa banyak kode ditulis dengan spasi. Dengan spasi, tidak akan ada perbedaan antara IDE - ruang adalah ruang adalah ruang. Tab dapat mengambil jumlah ruang variabel antara IDE dan membuat kode terlihat aneh.
erier
Halo @ Hijau - apa yang tidak berhasil? Mari kita
selesaikan ini
80

Seperti yang mungkin sudah Anda ketahui, Anda dapat menyesuaikan pengaturan indentasi Anda dalam Preferences.sublime-settings, misalnya:

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

Ini akan mengatur editor Anda untuk menggunakan tab yang lebar 4 spasi dan akan menimpa perilaku default yang menyebabkan Sublime cocok dengan indentasi file apa pun yang Anda edit. Dengan pengaturan ini, indentasi ulang file akan menyebabkan spasi diganti dengan tab.

Sejauh indentasi ulang saat membuka file, itu tidak semudah itu (tapi mungkin bukan ide bagus karena perubahan spasi putih mendatangkan malapetaka pada file diffs). Apa yang mungkin merupakan tindakan yang lebih baik: Anda dapat memetakan jalan pintas untuk indentasi ulang dan hanya memicu ketika Anda membuka file baru yang perlu diperbaiki.

justin
sumber
13

Anda bisa menggunakan palet perintah untuk menyelesaikan masalah ini.

Langkah 1: Ctrl + Shift + P(untuk mengaktifkan palet perintah)

Langkah 2: Ketik "Indentasi", Pilih "Indentation: Convert to Tabs"

Jojoleo
sumber
1
Luar biasa. Terima kasih.
RJ
Solusi terbaik. Terima kasih!
Matthew K
7

Dalam kasus saya, baris ini memecahkan masalah:

"translate_tabs_to_spaces": false
vljs
sumber
4

Berikut adalah solusi yang akan secara otomatis dikonversi ke tab setiap kali Anda membuka file.

Buat file ini .../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")

CATATAN. Itu menyebabkan file berada dalam keadaan tidak disimpan setelah membukanya, bahkan jika tidak ada konversi spasi-ke-tab yang sebenarnya terjadi ... mungkin beberapa dapat membantu dengan perbaikan untuk itu ...

TheStoryCoder
sumber
Saya pikir maksud Anda .../Packages/User/on_file_load.py, bukan.php
Pranav Nutalapati
@ ParranNutalapati Terima kasih telah menangkapnya.
TheStoryCoder
Ya, tentu. Tidak masalah.
Pranav Nutalapati
coba on_loadbukan on_load_async.
Pedro Góes
3

Untuk secara otomatis mengonversi spasi menjadi tab pada save , tambahkan skrip Python berikut ke subfolder yang baru dibuat bernama "UnexpandTabsOnSave" dalam "$ 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' )

Terima kasih atas sumber awalnya.

sean2078
sumber
0

Anda dapat mengganti tab dengan spasi di semua file proyek dengan:

  1. Melakukan Ganti Semua Ctrl+Shif+F
  2. Setel pencarian regex ^\A(.*)$
  3. Setel direktori ke Your dir
  4. Ganti oleh \1

    masukkan deskripsi gambar di sini

  5. Ini akan menyebabkan semua file proyek dibuka, dengan buffernya ditandai sebagai kotor. Dengan ini, Anda sekarang dapat secara opsional mengaktifkan pengaturan Sublime Text berikutnya, untuk memangkas semua file yang tertinggal di ruang putih dan memastikan baris baru di akhir setiap file.

    Anda dapat mengaktifkan pengaturan ini dengan masuk ke menu Preferences -> Settingsdan menambahkan konten ini ke file pengaturan Anda:

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. Buka konsol Sublime Text, dengan masuk ke menu View -> Show Console (Ctrl+`)dan jalankan perintah: 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. Sekarang, simpan semua file yang diubah dengan masuk ke menu File -> Save All
pengguna
sumber
0

jika Anda memiliki Mac cukup gunakan opsi bantuan (biasanya opsi terakhir pada bilah menu Mac) lalu ketik: "tab indentation" dan pilih lebar lekukan tab

tetapi secara umum, Anda dapat mengikuti jalur ini: view -> indentation

Ali
sumber
0

Gunakan perintah berikut untuk menyelesaikannya:

autopep8 -i <filename>.py
Sharyar Vohra
sumber