Как автоматически удалить конечные пробелы в Visual Studio 2008? - PullRequest
119 голосов
/ 17 сентября 2008

Можно ли настроить Visual Studio 2008 для автоматического удаления пробельных символов в конце каждой строки при сохранении файла? Кажется, здесь нет встроенной опции, так есть ли какие-либо расширения для этого?

Ответы [ 16 ]

71 голосов
/ 17 сентября 2008

Найти / заменить с помощью регулярных выражений

В диалоговом окне «Найти и заменить» разверните Параметры поиска , установите флажок Использовать , выберите Регулярные выражения

Найти что : ":Zs#$"

Заменить на : ""

нажмите Заменить все

В других редакторах ( обычный синтаксический анализатор регулярных выражений) ":Zs#$" будет "\s*$".

63 голосов
/ 03 июля 2012

CodeMaid - очень популярное расширение Visual Studio, которое делает это автоматически вместе с другими полезными утилитами.

Я установил его для очистки файла при сохранении, который, по моему мнению, используется по умолчанию.

30 голосов
/ 30 марта 2009

Вы можете создать макрос, который будет выполняться после сохранения, чтобы сделать это для вас.

Добавьте следующее в модуль EnvironmentEvents для ваших макросов.

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

Я уже некоторое время пользуюсь этим без проблем. Я не создал макрос, но изменил его по сравнению с тем, который находится в ace_guidelines.vsmacros, который можно найти с помощью быстрого поиска в Google.

16 голосов
/ 17 сентября 2008

Перед сохранением вы можете использовать ярлык автоформатирования CTRL + K + D .

9 голосов
/ 05 февраля 2011

Вы можете сделать это легко с помощью этих трех действий:

  • Ctrl + A (выделить весь текст)

  • Правка -> Дополнительно -> Удалить горизонтальные пробелы

  • Правка -> Дополнительно -> Выбор формата

Подождите несколько секунд и все готово.

Это Ctrl + Z 'в случае, если что-то пошло не так.

7 голосов
/ 16 января 2011

Взяв элементы из всех уже полученных ответов, вот код, с которым я закончил. (В основном я пишу код на C ++, но при необходимости легко проверять различные расширения файлов.)

Спасибо всем, кто внес свой вклад!

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
3 голосов
/ 17 сентября 2008
2 голосов
/ 03 августа 2011

Я использую VWD 2010 Express, где, к сожалению, макросы не поддерживаются. Поэтому я просто копирую / вставляю в Блокнот ++ в верхнем левом меню Edit> Blank Operations> Trim Trailing Space, также доступны другие связанные операции Затем скопируйте / вставьте обратно в Visual Studio.

Можно также использовать NetBeans вместо Notepad ++, который имеет «Удалить конечные пробелы» в меню «Источник».

1 голос
/ 29 января 2016

Мне лично нравится Конечный визуализатор пробельных символов Расширение Visual Studio, которое имеет поддержку обратно через Visual Studio 2012.

1 голос
/ 17 февраля 2010

Я думаю, что Jeff Muir версия могла бы быть немного улучшена, если бы она обрезала только файлы исходного кода (в моем случае C #, но легко добавить больше расширений). Также я добавил проверку, чтобы убедиться, что окно документа видно, потому что некоторые ситуации без этой проверки показывают мне странные ошибки (например, файлы LINQ to 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...