it-swarm-id.com

Bagaimana cara secara otomatis menghapus spasi spasi di Visual Studio 2008?

Apakah mungkin untuk mengkonfigurasi Visual Studio 2008 untuk secara otomatis menghapus karakter spasi di akhir setiap baris saat menyimpan file? Tampaknya tidak ada opsi bawaan, jadi apakah ada ekstensi yang tersedia untuk melakukan ini?

120
ChrisN

CodeMaid adalah ekstensi Visual Studio yang sangat populer dan melakukan ini secara otomatis bersama dengan pembersihan bermanfaat lainnya.

Saya mengaturnya untuk membersihkan file di save, yang saya percaya adalah default.

65
arserbin3

Temukan/Mengganti menggunakan Ekspresi Reguler

Dalam dialog Temukan dan Ganti, rentangkan Temukan Opsi, centang Gunakan, pilih Ekspresi reguler

Temukan Apa: ":Zs#$ "

Ganti dengan: ""

klik Ganti Semua

Di editor lain (a normal parser Ekspresi Reguler) ":Zs#$" akan menjadi "\s*$ ".

71
Greg Ogle

Anda dapat membuat makro yang dijalankan setelah menyimpan untuk melakukan ini untuk Anda.

Tambahkan berikut ini ke dalam Modul EnvironmentEvents untuk makro Anda.

Private saved As Boolean = False
Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _
                                         Handles DocumentEvents.DocumentSaved
    If Not saved Then
        Try
            DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
                                 "\t", _
                                 vsFindOptions.vsFindOptionsRegularExpression, _
                                 "  ", _
                                 vsFindTarget.vsFindTargetCurrentDocument, , , _
                                 vsFindResultsLocation.vsFindResultsNone)

            ' Remove all the trailing whitespaces.
            DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
                                 ":Zs+$", _
                                 vsFindOptions.vsFindOptionsRegularExpression, _
                                 String.Empty, _
                                 vsFindTarget.vsFindTargetCurrentDocument, , , _
                                 vsFindResultsLocation.vsFindResultsNone)

            saved = True
            document.Save()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception")
        End Try
    Else
        saved = False
    End If
End Sub

Saya telah menggunakan ini untuk beberapa waktu sekarang tanpa masalah. Saya tidak membuat makro, tetapi memodifikasinya dari yang ada di ace_guidelines.vsmacros yang dapat ditemukan dengan pencarian google cepat.

30
Dyaus

Sebelum menyimpan, Anda mungkin dapat menggunakan pintasan format-otomatis CTRL+K+D.

16
Vyrotek

Anda dapat melakukan ini dengan mudah dengan tiga tindakan ini:

  • Ctrl + A (pilih semua teks)

  • Edit -> Advanced -> Hapus Horizontal Whitespace

  • Edit -> Lanjutan -> Pemilihan Format

Tunggu beberapa detik dan selesai.

Nya Ctrl + Zbisa kalau-kalau ada yang salah.

9
iPixel

Mengambil elemen dari semua jawaban yang sudah diberikan, inilah kode yang akhirnya saya dapatkan. (Saya terutama menulis kode C++, tetapi mudah untuk memeriksa ekstensi file yang berbeda, sesuai kebutuhan.)

Terima kasih untuk semua orang yang berkontribusi!

Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _
    Handles DocumentEvents.DocumentSaved
    Dim fileName As String
    Dim result As vsFindResult

    Try
        fileName = document.Name.ToLower()

        If fileName.EndsWith(".cs") _
        Or fileName.EndsWith(".cpp") _
        Or fileName.EndsWith(".c") _
        Or fileName.EndsWith(".h") Then
            ' Remove trailing whitespace
            result = DTE.Find.FindReplace( _
                vsFindAction.vsFindActionReplaceAll, _
                "{:b}+$", _
                vsFindOptions.vsFindOptionsRegularExpression, _
                String.Empty, _
                vsFindTarget.vsFindTargetFiles, _
                document.FullName, _
                "", _
                vsFindResultsLocation.vsFindResultsNone)

            If result = vsFindResult.vsFindResultReplaced Then
                ' Triggers DocumentEvents_DocumentSaved event again
                document.Save()
            End If
        End If
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception")
    End Try
End Sub
7
ChrisN

Anda dapat menggunakan makro seperti yang dijelaskan dalam Menghapus spasi dan menulis ulang komentar, menggunakan pencarian regex

3
Jorge Ferreira

Saya menggunakan VWD 2010 Ekspresikan di mana makro tidak didukung, sayangnya. Jadi saya hanya melakukan copy/paste ke Notepad ++ menu kiri atas Edit> Blank Operations> Trim Trailing Space ada operasi terkait lainnya yang tersedia juga. Kemudian salin/tempel kembali ke Visual Studio.

Anda juga dapat menggunakan NetBeans bukan Notepad ++, yang memiliki "Hapus spasi tambahan" di bawah menu "Sumber".

2
Evgenii

Kecuali jika ini adalah proyek satu orang, jangan lakukan itu. Itu harus sepele untuk diff file lokal Anda terhadap repositori kode sumber Anda, dan membersihkan spasi putih akan mengubah baris yang tidak perlu Anda ubah. Saya sangat mengerti; Saya suka mendapatkan seragam putih saya semua - tapi ini adalah sesuatu yang Anda harus menyerah demi kolaborasi yang lebih bersih.

1
Kevin Conner

Saya pikir versi Jeff Muir bisa sedikit ditingkatkan jika hanya memotong file kode sumber (dalam kasus saya C #, tetapi mudah untuk menambahkan lebih banyak ekstensi ). Saya juga menambahkan tanda centang untuk memastikan bahwa jendela dokumen terlihat karena beberapa situasi tanpa tanda centang itu menunjukkan kesalahan aneh (misalnya LINQ ke file SQL '* .dbml').

Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) Handles DocumentEvents.DocumentSaved
    Dim result As vsFindResult
    Try
        If (document.ActiveWindow Is Nothing) Then
            Return
        End If
        If (document.Name.ToLower().EndsWith(".cs")) Then
            document.Activate()
            result = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, ":Zs+$", vsFindOptions.vsFindOptionsRegularExpression, String.Empty, vsFindTarget.vsFindTargetCurrentDocument, , , vsFindResultsLocation.vsFindResultsNone)
            If result = vsFindResult.vsFindResultReplaced Then
                document.Save()
            End If
        End If
    Catch ex As Exception
        MsgBox(ex.Message & Chr(13) & "Document: " & document.FullName, MsgBoxStyle.OkOnly, "Trim White Space exception")
    End Try
End Sub
1
David Abella

Saya pribadi suka Trailing Whitespace Visualizer ekstensi Visual Studio yang memiliki dukungan kembali melalui Visual Studio 2012.

1
pwhe23

Saya menggunakan ArtisticStyle (C++) untuk melakukan ini dan juga memformat ulang kode saya. Namun, saya harus menambahkan ini sebagai alat eksternal dan Anda harus memicunya sendiri sehingga Anda mungkin tidak menyukainya.

Namun, saya merasa sangat baik bahwa saya dapat memformat ulang kode dengan cara yang lebih khusus (misalnya, parameter fungsi multiline) sehingga saya dapat membayar harga untuk menjalankannya secara manual. Alat ini gratis.

0
Marcin Gil

Membangun jawaban Dyaus dan ekspresi reguler dari hubungkan laporan , inilah makro yang menangani simpan semua, tidak mengganti tab dengan spasi, dan tidak memerlukan variabel statis. Kemungkinan turunnya? Tampaknya agak lambat, mungkin karena beberapa panggilan ke FindReplace.

Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _
                                         Handles DocumentEvents.DocumentSaved
    Try
        ' Remove all the trailing whitespaces.
        If vsFindResult.vsFindResultReplaced = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
                             "{:b}+$", _
                             vsFindOptions.vsFindOptionsRegularExpression, _
                             String.Empty, _
                             vsFindTarget.vsFindTargetFiles, _
                             document.FullName, , _
                             vsFindResultsLocation.vsFindResultsNone) Then
            document.Save()
        End If
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception")
    End Try
End Sub

Bagi siapa pun yang mencoba menggunakan ini dalam add-in Visual Studio 2012, ekspresi reguler yang akhirnya saya gunakan adalah [ \t]+(?=\r?$) (jangan lupa untuk menghindari backslash jika perlu). Saya tiba di sini setelah beberapa upaya sia-sia untuk memperbaiki masalah dengan konversi mentah dari {:b}+$ Gagal mencocokkan pengembalian kereta.

0
Michael Urman

Saya rasa saya memiliki versi makro ini yang tidak akan crash VS2010 pada refactor, dan juga tidak akan menggantung IDE saat menyimpan file non-teks. Coba ini:

Private Sub DocumentEvents_DocumentSaved( _
    ByVal document As EnvDTE.Document) _
    Handles DocumentEvents.DocumentSaved
    ' See if we're saving a text file
    Dim textDocument As EnvDTE.TextDocument = _
        TryCast(document.Object(), EnvDTE.TextDocument)

    If textDocument IsNot Nothing Then
        ' Perform search/replace on the text document directly
        ' Convert tabs to spaces
        Dim convertedTabs = textDocument.ReplacePattern("\t", "    ", _
            vsFindOptions.vsFindOptionsRegularExpression)

        ' Remove trailing whitespace from each line
        Dim removedTrailingWS = textDocument.ReplacePattern(":Zs+$", "", _
            vsFindOptions.vsFindOptionsRegularExpression)

        ' Re-save the document if either replace was successful
        ' (NOTE: Should recurse only once; the searches will fail next time)
        If convertedTabs Or removedTrailingWS Then
            document.Save()
        End If
    End If
End Sub
0
Julian