我正在做一些不同的事情,有些使用制表符,有些使用 2 个空格作为缩进,另一些用户使用 4 个空格作为缩进等。
在 Visual Studio 中设置此选项的选项位于 Tools->Options->Text Editor-><language>->Tabs
有没有办法在每个解决方案的基础上覆盖这些设置?
我正在做一些不同的事情,有些使用制表符,有些使用 2 个空格作为缩进,另一些用户使用 4 个空格作为缩进等。
在 Visual Studio 中设置此选项的选项位于 Tools->Options->Text Editor-><language>->Tabs
有没有办法在每个解决方案的基础上覆盖这些设置?
更新:VS 2017 原生支持 EditorConfig:https ://blogs.msdn.microsoft.com/dotnet/2016/12/15/code-style-configuration-in-the-vs2017-rc-update/
在 VS 2010 及更高版本中,有一个扩展可以根据解决方案/项目根目录中的.editorconfig文件设置缩进:
http://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328
Visual Studio Code也有类似的扩展。
这是实现您正在寻找的东西的一种(公认的hacky)方法:
1)创建一个更改缩进的宏(source)
Sub Set-Indent(indent As integer)
Dim props As EnvDTE.Properties = DTE.Properties("TextEditor", "C/C++")
Dim ts As EnvDTE.Property = props.Item("TabSize")
Dim ins As EnvDTE.Property = props.Item("IndentSize")
ts.Value = indent
ins.Value = indent
End Sub
2) 将其与您的解决方案加载挂钩:在宏资源管理器中,选择
EnvironmentEvents
,SolutionEvents
在第一个下拉列表中选择,Opened
在第二个下拉列表中选择。您现在有一个宏,每次打开解决方案时都会触发。您只需要将您的解决方案映射到所需的缩进。
现在还有另一个名为“Rebracer”的加载项......链接在这里:http: //visualstudiogallery.msdn.microsoft.com/410e9b9f-65f3-4495-b68e-15567e543c58
从 VS 扩展 EditorConfig ( http://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328 ) 网站:
EditorConfig 项目定义了一种简单的文件格式,用于配置常见的文本编辑器选项,例如缩进大小。这些配置文件旨在与项目的源代码并排放置,允许文本编辑器在逐个文件的基础上使用正确的选项。EditorConfig 项目为许多常见的文本编辑器提供插件,使格式完全跨平台。
(强调我的)
完全披露:我无法亲自测试它(因为 ReSharper 接管了)。
VS2017 RC 增加了对 .editorconfig 格式的支持。
您可以设置插入制表符/空格设置props.Item("InsertTabs") = bool
更新:似乎缩进不是由 Resharper 管理的,所以这个答案实际上并没有解决具体问题。但是,它确实适用于一般条款;即“Visual Studio,每个解决方案设置”,以防有人偶然发现这里。
如果您使用的是Resharper,则可以仅为解决方案保存格式设置(实际上是任何设置)。您可以进一步指定是否仅适合您(即不提交源代码管理)或共享解决方案特定设置(即提交源代码管理)。
Resharper > Options > Code Editing > C# (or whatever language) > Formatting Style > Braces Layout
然后在窗口底部,Save To
选择“解决方案 XYZ 个人”(或共享,取决于您的目的)。
这将创建一个 xml 文件YOURSOLUTION.sln.DotSettings.user
,其值如下:
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue">NEXT_LINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/CASE_BLOCK_BRACES/@EntryValue">NEXT_LINE</s:String>
因此,公认的解决方案说“您只需将您的解决方案映射到所需的缩进”,这很好,除了您如何做到这一点?在浪费了很多时间试图弄清楚之后,我在这里找到了一种我更喜欢的方法。此方法加载任意数量的导出设置,这些设置对于每个解决方案都可能不同。设置可以包括任何东西,从缩进到颜色甚至是窗口布局(我认为)。
自动添加处理 SolutionEvents.Opened 事件的代码。将该代码更改为以下内容:
Private Sub SolutionEvents_Opened() Handles SolutionEvents.Opened
Dim item As ProjectItem = DTE.Solution.FindProjectItem("solution.vssettings")
If Not item Is Nothing Then
'MsgBox("Uncomment this to see a message when settings are loaded")
Dim name = item.FileNames(1)
DTE.ExecuteCommand("Tools.ImportandExportSettings", "/import:""" & name & """")
End If
End Sub
保存宏。
如果宏没有运行,可能是因为 MS 安全补丁。在此基础上,添加以下字符串:
<AllowDComReflection enabled="true"/>
以下三个文件中的 <runtime> 标记下方:
"C:\Program Files (x86)\Common Files\Microsoft Shared\VSA\9.0\VsaEnv\vsmsvr.exe.config"
"C:\Program Files (x86)\Common Files\Microsoft Shared\VSA\9.0\VsaEnv\vsaenv.exe.config"
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe.config"
确保以管理员权限启动用于编辑这些文件的编辑器(即右键单击记事本并选择“以管理员身份运行”)。
我还发现了一个插件,它应该与上面建议的宏做同样的事情,但由于某种原因,在我运行它的安装程序后它没有做任何事情。
clang-format 为格式化源代码提供了相当复杂的选项。
Visual Studio 插件非常简陋,即它不会自动运行,但它可以很好地完成工作(即手动调用时)。