如何在Visual Studio 2008中自动删除尾随空格?

Chr*_*isN 120 visual-studio-2008 visual-studio

是否可以将Visual Studio 2008配置为在保存文件时自动删除每行末尾的空格字符?似乎没有内置选项,那么有没有可用于执行此操作的扩展?

Gre*_*gle 71

使用正则表达式查找/替换

在查找和替换对话框中,展开查找选项,选中使用,选择正则表达式

找到什么:" :Zs#$"

替换为:""

单击全部替换

在其他编辑器(正常的正则表达式解析器)中," :Zs#$"将是" \s*$".

  • 在VS2012中我会使用:`[^\S\r \n] +(?=\r?$)` (42认同)
  • 如果你使用制表符,`[:Zs\t]#$`是一个有用的改编. (4认同)
  • 在 VSC-1.56.2 中,我使用 `\s+$` 或 `[ ]+$` :P (2认同)

ars*_*in3 65

CodeMaid是一个非常流行的Visual Studio扩展,可以自动执行此操作以及其他有用的清理.

我将其设置为在保存时清理文件,我认为这是默认设置.

  • @ arserbin3我认为你错过了Andriy的观点.我在一个巨大的开源项目中工作.我不拥有*代码 - 我正在为代码做出贡献.我不能改变项目的缩进指南.当我修改一些文件时,我希望VisualStudio删除尾随空格,而我不知道文件中的任何其他内容(标签,空格,缩进等).到目前为止,VisualStudio是*我唯一无法做到的*IDE.任何其他半生不熟的编辑器(更不用说IDE)都可以做到.我无法将CodeMaid配置为某种格式,因为格式不同. (6认同)
  • 这是此页面上的最佳解决方案。它很容易配置,根据需要或保存时自动为您完成,它与 VS 很好地集成,它还有许多其他非常有用的功能。很好找到arserbin3。 (3认同)

小智 30

您可以创建一个在保存后执行的宏来为您执行此操作.

将以下内容添加到您的宏的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
Run Code Online (Sandbox Code Playgroud)

我已经使用了一段时间,没有任何问题.我没有创建宏,但是从ace_guidelines.vsmacros中修改它,可以通过快速谷歌搜索找到它.

  • 请注意,这也会用两个空格替换制表符. (7认同)
  • 不幸的是,VS 2013中没有更多的宏. (2认同)

Vyr*_*tek 16

保存之前,您可以使用自动格式快捷键CTRL+ K+ D.


小智 9

您可以使用以下三个操作轻松完成此操作:

  • Ctrl+ A(选择所有文字)

  • 编辑 - >高级 - >删除水平空格

  • 编辑 - >高级 - >格式选择

等几秒钟完成.

如果出现问题,它是Ctrl+ Z'能够的.

  • 这个答案具有误导性,因为它还会删除缩进和所有格式。 (3认同)
  • 有一个执行此操作的快捷方式:ctrl+w,然后键入 Edit.RemoveHorizo​​ntalWhitespace (2认同)

Chr*_*isN 7

从已经给出的所有答案中取出元素,这是我最终得到的代码.(我主要编写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
Run Code Online (Sandbox Code Playgroud)


pwh*_*e23 7

我个人很喜欢Trailing Whitespace Visualizer Visual Studio 扩展,它在 Visual Studio 2012 中得到了支持。