【问题标题】:Visual Studio, per solution indentation settingsVisual Studio,每个解决方案的缩进设置
【发布时间】:2010-11-15 18:34:37
【问题描述】:

我正在做一些不同的事情,有些使用制表符,有些使用 2 个空格作为缩进,另一些用户使用 4 个空格作为缩进等。

在 Visual Studio 中设置此选项的选项位于工具->选项->文本编辑器->->选项卡

有没有办法根据每个解决方案覆盖这些设置?

【问题讨论】:

  • 我希望它可以根据每个文件检测制表符/缩进样式。即,当打开文件时,它将对该文件使用制表符/缩进样式。 Sublime Text 做到了。

标签: visual-studio-2008 indentation


【解决方案1】:

更新: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

还有类似的extension for Visual Studio Code

【讨论】:

【解决方案2】:

这是实现您正在寻找的东西的一种(公认的 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。 您现在有一个宏,每次打开解决方案时都会触发。 您只需将解决方案映射到所需的缩进即可。

【讨论】:

  • 破解,是的,但它有效。谢谢。对于 C# 开发人员,它是 DTE.Properties("TextEditor", "CSharp")
  • 如果你把它放在一个解决方案中,你必须把它放在所有解决方案中。几乎不可用,尤其是对于公共项目。 EditorConfig(下面的下一个答案)恕我直言更好。
【解决方案3】:

现在还有另一个名为“Rebracer”的插件...链接在这里:http://visualstudiogallery.msdn.microsoft.com/410e9b9f-65f3-4495-b68e-15567e543c58

【讨论】:

  • Rebracer 扩展运行良好。由于它集成并修改了 Visual Studio 的内置设置,因此在不占用资源的情况下达到目的。
【解决方案4】:

来自 VS 扩展 EditorConfig (http://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328) 网站:

EditorConfig 项目定义了用于配置的简单文件格式 常见的文本编辑器选项如缩进大小。这些 配置文件旨在与项目的源代码并排放置 代码,允许文本编辑器在一个文件一个文件上使用正确的选项 基础。 EditorConfig 项目为许多常见文本提供插件 编辑器,使格式完全跨平台。

(强调我的)

完全披露:我无法亲自测试它(因为 ReSharper 接管了)。

【讨论】:

    【解决方案5】:

    VS2017 RC 增加了对 .editorconfig 格式的支持。

    【讨论】:

    • 是的,但是一个完成的文件的例子会很好:)
    【解决方案6】:

    您可以使用 props.Item("InsertTabs") = bool 设置插入制表符/空格设置

    看看这个:https://github.com/jamesfoster/VS-Whitespace-Macros

    【讨论】:

      【解决方案7】:

      更新: 似乎缩进不是由 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>
      

      【讨论】:

      • 哪个 resharper 设置用于将缩进设置为 2 个空格或 4 个空格?
      • @EndyTjahjono 这是一个 VS 设置:工具 > 选项 > 文本编辑器 >(语言)> 选项卡 >“选项卡大小”或“缩进大小”。 VS2012 的好处是您可以使用快速启动搜索 (CTRL+Q) 并键入“Tabs”直接跳转到所有可用的语言设置。
      • 但是 VS 设置是全局的(不是每个解决方案/项目),您建议使用 resharper,因为它具有每个解决方案/项目的设置?
      • 你明白了——我正在更改 resharper 中的一些其他设置,所以我认为它也可以管理缩进。我只是再次通过 resharper 查看选项卡设置,但我找不到它。因此,需要注意的是“对于几乎任何设置,除了 resharper 无法管理的设置,例如缩进大小”。我会更新答案,请随意投反对票,因为我没有给予足够的关注。
      • 感谢您的更新。仅供参考,我并没有试图纠正你,但实际上希望 resharper 具有每个项目的缩进设置,我只是还没有找到设置它的地方。
      【解决方案8】:

      因此,公认的解决方案是“您只需将您的解决方案映射到所需的缩进”,这很好,但您如何做到这一点?在浪费了大量时间试图弄清楚这一点之后,我找到了一种我更喜欢here 的方法。此方法加载任意数量的导出设置,这些设置对于每个解决方案都可能不同。设置可以包括任何内容,从缩进到颜色,甚至是窗口布局(我认为)。

      • 在 Visual Studio 2008 中,打开工具 > 宏 > 宏浏览器
      • 双击 MyMacros > Module1(如果您没有 Module1,请右键单击 MyMacros 并选择“新建模块...”来创建它)。
      • 在宏浏览器窗口中,双击左侧的“EnvironmentEvents”。
      • 在左上角的下拉菜单中,选择“SolutionEvents”。
      • 在右上角的下拉菜单中,选择“已打开”。
      • 自动添加处理 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
        
      • 保存宏。

      • 使用“工具”>“选项”来更改您的 UI 以设置选项卡设置以及您想要设置的任何其他内容。
      • 工具 > 导入和导出设置... > 导出选定的环境设置 > 下一步
      • 要仅导出选项卡设置,请取消选中“所有设置”,然后选中选项 > 文本编辑器 > C/C++
      • 单击下一步,然后键入“solution.vssettings”作为“您要为设置文件命名什么?”并将文件保存到您想要使用这些设置的解决方案的任何位置。
      • 将 solution.vssettings 拖到解决方案资源管理器窗口中的任意位置。
      • 退出 Visual Studio,下次打开包含 solution.vssettings 的解决方案时,它应该会加载这些设置。

      如果宏没有运行,可能是因为 MS 安全补丁。基于this,添加如下字符串:

      <AllowDComReflection enabled="true"/>
      

      以下三个文件中的标签下方:

      "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"
      

      确保以管理员权限启动用于编辑这些文件的编辑器(即右键单击记事本并选择“以管理员身份运行”)。

      我还发现 a plug-in 应该与上面建议的宏执行相同的操作,但由于某种原因,在我运行它的安装程序后它没有执行任何操作。

      【讨论】:

        【解决方案9】:

        clang-format 为格式化源代码提供了相当复杂的选项。

        Visual Studio 插件非常简陋,即它不会自动运行,但可以很好地完成工作(即手动调用时)。

        http://llvm.org/builds/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-23
          相关资源
          最近更新 更多