Sublime Text 2: Pangkas spasi di belakang sesuai permintaan

99

Saya tahu bahwa Sublime Text 2 dapat menghapus spasi kosong pada file setelah disimpan.

Saat bekerja dalam tim dan melakukan perubahan ke file, ini cenderung menghasilkan perbedaan besar yang membuat tinjauan kode rekan lebih rumit. Untuk alasan itu saya lebih suka hanya melakukan pembersihan ruang putih ketika saya melakukan perubahan besar pada file dan membiarkan spasi seperti itu untuk perubahan kecil.

Saya ingin tahu apakah ada perintah untuk mengeksekusi pemangkasan ruang putih sesuai permintaan pada file, selain "Activate trimming on save > Save file > Deactivate trimming".

Pencarian di Dokumentasi dan stackoverflow tidak menunjukkan sesuatu yang relevan, semua tautan tampaknya berbicara tentang pemangkasan otomatis saat penyimpanan.

José Luis
sumber
1
Ini tidak secara langsung menjawab pertanyaan Anda, tetapi mungkin membantu jika Anda menggunakan Git untuk kontrol versi: $ mv .git/hooks/pre-commit.sample .git/hooks/pre-commityang saya dapatkan dari blog ini .
Paul Fioravanti
97
Untuk sesama Googler: cara non-sesuai permintaan adalah dengan menambahkan setelan ini:"trim_trailing_white_space_on_save": true
Nate Glenn
3
Sebagai penyempurnaan untuk komentar @Nate Glenn, perhatikan bahwa pemangkasan spasi dari penurunan harga dapat menimbulkan masalah bagi Anda, terutama jika Anda memangkas ruang kosong yang disengaja orang lain dan melakukannya tanpa menyadarinya. Anda dapat mengedit Markdown.sublime-settingsdan menonaktifkan trim global saat menyimpan dan mencegah kecelakaan.
tehfoo
PENTING: Jika ada lebih dari 1 baris di antara {} kurung kurawal pastikan Anda meletakkan ',' pada baris di atas atau Anda akan mendapatkan kesalahan saat mencoba menyimpan.
slindsey3000
1
"Saat bekerja dalam tim dan melakukan perubahan pada file, hal ini cenderung menghasilkan perbedaan besar yang membuat peninjauan kode rekan lebih rumit" Masalah yang lebih dalam di sini adalah komit dengan spasi kosong tidak boleh masuk ke repo di tempat pertama, idealnya - justru karena hal itu menciptakan semacam tambalan kotor yang Anda maksud. Larang spasi kosong di belakang dalam standar pengkodean Anda, dan tangkap komit dengan spasi putih yang buruk di kait linter / komit Anda.
Frank Farmer

Jawaban:

71

Hati-hati: menggunakan plugin ini membuat Sublime Text jauh lebih lambat

Saya menggunakan plugin TrailingSpaces untuk ini.

Sorot spasi tertinggal dan hapus dalam sekejap.

ST2 menyediakan cara untuk secara otomatis menghapus spasi setelah penyimpanan file. Bergantung pada pengaturan Anda, mungkin lebih berguna untuk hanya menyorotnya dan / atau menghapusnya secara manual. Plugin ini menyediakan hal itu!

Penggunaan: klik "Edit / Trailing Spaces / Delete".

Untuk menambahkan pengikatan kunci, buka "Preferensi / Pengikatan Kunci - Pengguna" dan tambahkan:

{ "keys": ["ctrl+alt+t"], "command": "delete_trailing_spaces" }
Sridhar Katakam
sumber
1
Ya, saya suka jawaban ini yang terbaik ... upgrade aman + berfungsi - terima kasih
Rob
1
Saya perhatikan bahwa fitur ctrl + F untuk menemukan kata menjadi lambat setelah saya menginstal plugin ini jadi saya menghapusnya, dapatkah Anda memberi tahu saya jika situasi yang sama terjadi pada Anda ?.
dennisbot
Ctrl + Shift + T digunakan untuk membuka tab yang terakhir ditutup di Sublim. Jadi saya lebih suka Ctrl + Alt + T
Pawel
5
Ada opsi bernama trailing_spaces_trim_on_save, yang dapat Anda atur truemasuk Preferences > Package Settings > Trailing Spaces > Settings - User. Anda dapat menggunakan ini daripada mengikat pintasan keyboard, saya merasa ini lebih baik untuk kebutuhan saya
dspacejs
Peringatan: menggulir file besar menjadi lebih lambat secara signifikan dengan plugin ini terpasang.
compie
67

Saya menggunakan langkah-langkah ini untuk solusi cepat sesuai permintaan dalam Sublime Text:

  1. Temukan> Ganti ...
  2. Menemukan apa: [ \t]+\n
  3. Ubah dengan: \n
  4. Menggantikan semua

Anda juga dapat melakukan ini untuk sekumpulan besar file melalui

  1. Temukan> Temukan di File ...
  2. Temukan: [ \t]+\n
  3. Dimana:
  4. Menggantikan: \n
  5. Menggantikan
Jason Nikmat
sumber
5
Metode ini berfungsi untuk semua baris kecuali yang terakhir.
Joncom
1
@Joncom benar tentang baris terakhir. Di Sublime Text 3, \tsepertinya tidak cocok dengan spasi, jadi jawaban seperti yang tertulis hanya menghapus tab yang tertinggal. Saya rasa saya lebih suka \s+\n, tetapi perhatikan bahwa ini juga menghapus baris kosong. Jika Anda ingin menghapus spasi pada baris akhir juga Anda dapat menambahkan \s+\zsebagai begitu: (\s+\n|\s+\z).
canhascodez
3
([\t ]+\n|\s+\z)<- tidak menghapus baris kosong.
canhascodez
4
Regex yang benar harus [ \t]+$dan menggantinya dengan tidak ada.
Codesmith
27

Anda cukup menggunakan regex untuk menghapus spasi di belakang:

  1. Temukan> Ganti ...
  2. Menemukan apa: [^\S\r\n]+$
  3. Ganti dengan: biarkan kosong.
  4. Klik 'Ganti Semua'

[^\S\r\n]+$adalah Regex untuk "setidaknya satu karakter spasi (jadi spasi dan tab tetapi bukan baris baru, menggunakan negasi ganda) diikuti dengan akhir baris"

Ekspresi Reguler harus diaktifkan: Aktifkan ekspresi reguler adalah dialog penelusuran

antou
sumber
22

Berikut adalah cara super sederhana yang tidak menggunakan plugin atau pengaturan dan berfungsi di banyak situasi.

  1. Multi-Select dan gerakkan kursor ke akhir setiap baris
  2. Tahan CTRL-Shift, Tekan Kiri, Kanan
  3. Spasi dan tab di akhir baris sekarang harus dipilih. Tekan Delete atau Backspace

    Catatan - Karakter khusus seperti (dan + juga dapat dipilih di akhir baris pada saat ini, bukan hanya spasi.

Cara Multi-Pilih semua baris:

Salah satu caranya adalah dengan menggunakan tombol tengah mouse untuk memilih secara vertikal lalu tekan Tombol Putus jika pilihannya kecil.

Dengan tombol pintas:

  1. CTRL-A (pilih semua)
  2. CTRL-SHIFT-L (tempatkan kursor pada semua baris yang dipilih)
  3. AKHIR (Ke akhir baris)

Anda juga dapat menggunakan fungsi find untuk menemukan sesuatu yang akan ada di setiap baris, seperti karakter spasi:

  1. \ s (menggunakan regex)
  2. Klik Temukan Semua
  3. Tekan tombol "End" untuk mendapatkan beberapa kursor di akhir setiap baris

Contoh teks:

text and number     44  more text and a space  
text and number 44  more text and 2 tabs        
text and number 44  more text and no space or tab

text and number 44  more text after a line feed
shanemgrey
sumber
2
Catatan: Untuk menyorot semua baris dengan multi-kursor di posisi terakhir, Anda dapat menggunakan CTRL + A diikuti dengan CTRL + SHIFT + L diikuti dengan END.
Richard Marskell - Drackir
2
Dengan menggunakan teknik ini pada kumpulan data lain, saya menemukan bahwa teknik ini tidak sempurna. Sublime Text juga akan menyorot karakter khusus seperti) dan + bersama dengan spasi tambahan. Hati-hati jika beberapa data diakhiri dengan karakter khusus.
shanemgrey
2
Selain itu, FYI \sdalam regex tidak hanya mencocokkan karakter spasi, tetapi juga tab dan baris baru (yaitu "spasi putih") tidak hanya spasi. :)
Richard Marskell - Drackir
13

Saya menemukan soulution di sini: http://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

Anda dapat mengubah paket

trim_trailing_white_space.py

terletak di direktori paket default, dengan cara ini:

import sublime, sublime_plugin

def trim_trailing_white_space(view):
    trailing_white_space = view.find_all("[\t ]+$")
    trailing_white_space.reverse()
    edit = view.begin_edit()
    for r in trailing_white_space:
        view.erase(edit, r)
    view.end_edit(edit)

class TrimTrailingWhiteSpaceCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        trim_trailing_white_space(self.view)

class TrimTrailingWhiteSpace(sublime_plugin.EventListener):
    def on_pre_save(self, view):
        if view.settings().get("trim_trailing_white_space_on_save") == True:
            trim_trailing_white_space(view)

class EnsureNewlineAtEof(sublime_plugin.EventListener):
    def on_pre_save(self, view):
        if view.settings().get("ensure_newline_at_eof_on_save") == True:
            if view.size() > 0 and view.substr(view.size() - 1) != '\n':
                edit = view.begin_edit()
                view.insert(edit, view.size(), "\n")
                view.end_edit(edit)

Sekarang Anda dapat menambahkan perintah ke konfigurasi peta kunci Anda:

{ "keys": ["your_shortcut"], "command": "trim_trailing_white_space" }
Riccardo Marotti
sumber
Solusi terbaik bagi saya, saya tidak ingin menambahkan plugin hanya dengan melakukan ini. Terima kasih.
puro_nervio
Bagi saya ini adalah solusi yang tepat, Thx
Vikrame