Visual studio &引用;Tabify";Visual Studio解决方案中的所有文件?
中有一个“tabify”命令 编辑>高级>选项卡化选定行 (而且Power Tools 2010还以每个文件为基础提供此功能)但是有没有办法为解决方案中的所有代码文件提供此功能 ReSharper有一个清理命令,但我发现唯一半合适的选项是在所有文件上运行格式化,这比我想要的要多(我不想运行一个完整的格式化,只是Tabify)。据我所知,“Tabify”的作用是——它只用一个选项卡替换了“”(4个空格),它不会更改格式或任何其他内容 虽然我建议使用文档格式,但是“禁忌化”可以通过自定义应用程序轻松完成,该应用程序将在您想要的所有文件上模拟相同的操作Visual studio &引用;Tabify";Visual Studio解决方案中的所有文件?,visual-studio,visual-studio-2010,tabs,Visual Studio,Visual Studio 2010,Tabs,中有一个“tabify”命令 编辑>高级>选项卡化选定行 (而且Power Tools 2010还以每个文件为基础提供此功能)但是有没有办法为解决方案中的所有代码文件提供此功能 ReSharper有一个清理命令,但我发现唯一半合适的选项是在所有文件上运行格式化,这比我想要的要多(我不想运行一个完整的格式化,只是Tabify)。据我所知,“Tabify”的作用是——它只用一个选项卡替换了“”(4个空格),它不会更改格式或任何其他内容 虽然我建议使用文档格式,但是“禁忌化”可以通过自定义应用程序轻松
希望这有帮助 如果您添加了扩展名(如果您没有扩展名,我会推荐),那么它会添加一个选项来对文件进行tabify。这并不适用于解决方案中的所有文件,但在按文件编辑每个文件时会提示输入。不完全是你想要的,而是一个帮助
您还可以尝试将IDE编辑器设置设置为使用选项卡,然后使用菜单“编辑高级格式文档”(CTRL+E,D)。这将用一个制表符替换多组制表符长度的空格,该制表符应可通过宏为解决方案中的所有文件编写脚本。请求包含指向可执行此任务的IDE宏的链接:
以下是Visual Studio宏的示例代码,该宏在开放式解决方案中自动格式化所有*.cs、*.h、*.cpp和*.hpp文件,包括将空间转换为选项卡(取决于工具>选项>文本编辑器>特定语言或“所有语言”>选项卡中的选项卡设置): 说明(Visual Studio 2005,但与较新版本类似):
我使用Siegmund Frenzel的代码更新了代码,以支持*.h、*.cpp和*.hpp文件,如下所示:
对于vs2010,您可以使用以下查找和替换(此示例适用于制表符到4个空格) 在查找框中,输入:
^{*}
(^{
空格*}
选项卡)
在替换框中,输入\1
(\1
空格)
选中条件框并设置为正则表达式。
较新版本的vs使用不同的正则表达式语法,但相同的语法应该是可行的
更新
这通过对vb文件执行一次来实现,但对resx文件需要多次执行,因此您可能需要根据文件类型执行多次…宏已从Visual Studio 2013中删除(并且使用JavaScript而不是VBScript),因此要在Visual Studio 2019中工作:
.cs
、.aspx
和.ascx
,因此,如果需要C++/其他文件扩展名,请更改这些扩展名有一种使用
dotnet
CLI的新方法:
dotnet工具安装-g dotnet格式
SolutionFile.sln
替换为解决方案文件的路径:dotnet格式解决方案文件.sln
.editorconfig
的缩进样式将用于确定代码是否使用制表符或空格。嘿,关于这个问题有什么消息吗?有一个基于正则表达式的很好的解决方案:这个答案的可能重复对我帮助很大:您可以在解决方案的所有源代码上运行以下代码Regex.Replace(sInput,“4_spaces”,“\t”)代码>它将以与Power Tools相同的方式对源代码进行选项卡化。将代码中的“4_空格”更改为实际空格,因为StackOverflow会删除多个空格。需要检查它,但可能会出现诸如自定义缩进之类的边缘情况,这可能需要特殊处理,全局搜索和替换可能无法正常工作。但是谢谢你的提示。克里斯·埃尔格尔链接+1。他的宏实现了OP的要求。Chris Eargle链接现在没有任何结果。@William,我在该页面的存档中添加了一个链接。谢谢。@Andrewornold,我已经更新了答案,包括源代码和说明。用户没有要求将空格转换为制表符,而不是将制表符转换为空格(“tabify”而不是“Unabify”)?请详细说明如何在VS2013中使用Microsoft Productivity Power Tools进行tabify?谢谢。当它检测到为tabbify或spaceify文件提供的混合选项卡和空格时,它会在编辑窗口顶部提供一个“提示栏”。如果你在保存的时候加载广告时,内存就支持这一点,我认为没有其他方法可以强制对文件执行此操作。如果你只是想修复标签/空间,这个扩展就可以做到:是的。我找到了提示栏。但是,似乎没有办法将整个解决方案的文件设置为选项卡。无论如何,再次感谢。我不明白为什么电动工具一直要求我使用tabify,同一个文件。。。
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Public Module ConvertTabsToSpaces
Public Sub FormatSolution()
Dim sol As Solution = DTE.Solution
For i As Integer = 1 To sol.Projects.Count
FormatProject(sol.Projects.Item(i))
Next
End Sub
Private Sub FormatProject(ByVal proj As Project)
If Not proj.ProjectItems Is Nothing Then
For i As Integer = 1 To proj.ProjectItems.Count
FormatProjectItem(proj.ProjectItems.Item(i))
Next
End If
End Sub
Private Sub FormatProjectItem(ByVal projectItem As ProjectItem)
If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
If projectItem.Name.LastIndexOf(".cs") = projectItem.Name.Length - 3 Then
Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
window.Activate()
projectItem.Document.DTE.ExecuteCommand("Edit.FormatDocument")
window.Close(vsSaveChanges.vsSaveChangesYes)
ElseIf ((projectItem.Name.LastIndexOf(".cpp") = projectItem.Name.Length - 4) OrElse (projectItem.Name.LastIndexOf(".hpp") = projectItem.Name.Length - 4) OrElse (projectItem.Name.LastIndexOf(".h") = projectItem.Name.Length - 2)) Then
Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
window.Activate()
projectItem.Document.DTE.ExecuteCommand("Edit.SelectAll")
projectItem.Document.DTE.ExecuteCommand("Edit.FormatSelection")
window.Close(vsSaveChanges.vsSaveChangesYes)
End If
End If
'Be sure to format all of the ProjectItems.
If Not projectItem.ProjectItems Is Nothing Then
For i As Integer = 1 To projectItem.ProjectItems.Count
FormatProjectItem(projectItem.ProjectItems.Item(i))
Next
End If
'Format the SubProject if it exists.
If Not projectItem.SubProject Is Nothing Then
FormatProject(projectItem.SubProject)
End If
End Sub
End Module
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports Microsoft.VisualStudio.Shell
Imports VisualCommanderExt
Public Class ConvertTabsToSpaces
Implements ICommand
Sub Run(DTE As DTE2, package As Package) Implements ICommand.Run
Dim sol As Solution = dte.Solution
For i As Integer = 1 To sol.Projects.Count
FormatProject(sol.Projects.Item(i))
Next
End Sub
Private Sub FormatProject(ByVal proj As Project)
If Not proj.ProjectItems Is Nothing Then
For i As Integer = 1 To proj.ProjectItems.Count
FormatProjectItem(proj.ProjectItems.Item(i))
Next
End If
End Sub
Private Sub FormatProjectItem(ByVal projectItem As ProjectItem)
If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
If (projectItem.Name.LastIndexOf(".cs") = projectItem.Name.Length - 3 OrElse (projectItem.Name.LastIndexOf(".aspx") = projectItem.Name.Length - 5 OrElse (projectItem.Name.LastIndexOf(".ascx") = projectItem.Name.Length - 5))) Then
Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
window.Activate()
Try
projectItem.Document.DTE.ExecuteCommand("Edit.RemoveAndSort")
Catch
' Do nothing
End Try
Try
projectItem.Document.DTE.ExecuteCommand("Edit.SelectAll")
projectItem.Document.DTE.ExecuteCommand("Edit.FormatSelection")
Catch
' Do nothing
End Try
window.Close(vsSaveChanges.vsSaveChangesYes)
End If
End If
'Be sure to format all of the ProjectItems
If Not projectItem.ProjectItems Is Nothing Then
For i As Integer = 1 To projectItem.ProjectItems.Count
FormatProjectItem(projectItem.ProjectItems.Item(i))
Next
End If
'Format the SubProject if it exists
If Not projectItem.SubProject Is Nothing Then
FormatProject(projectItem.SubProject)
End If
End Sub
End Class