Visual Studio,每个解决方案的缩进设置

99

我正在处理几个不同的事情,一些使用选项卡,一些使用两个空格进行缩进,另一个用户则使用4个空格。

在Visual Studio中设置这个选项的方法是:选择工具->选项->文本编辑器-><语言>->选项卡。

是否有一种方法可以针对每个解决方案覆盖这些设置?


18
希望它能够根据每个文件检测制表符/缩进风格。例如,当打开一个文件时,它会使用该文件的制表符/缩进风格。Sublime Text可以实现此功能。 - IsmailS
9个回答

101

3
我喜欢这个工具——它设置快捷,没有其他选项那样容易出现卡顿问题,而且还有一个额外的好处,就是如果需要,你可以在解决方案中针对不同项目更改设置。 - Kara Potts
请注意,我不得不使用来自https://github.com/editorconfig/editorconfig/issues/116的0.4.0更新来进行vs2012update3的编程。谢谢。 - SteelBytes
这正是我一直在寻找的。[*.js] indent_style = space indent_size = 2有了这三行代码,我就可以遵循项目的jshint严格要求,而不必改变我的工作流程以双空格缩进代替制表符或全局更改我的VS .js文本编辑器缩进设置。 - TaeKwonJoe
1
VS2017 v15.3现在支持许多编码风格属性 - Frédéric
在VS2019中,您可以使用.editorconfig覆盖所有文件的首选项,包括每个解决方案的C++。 - AntonK
显示剩余5条评论

21

这里有一种(虽然有些欺骗性)实现你所需求的方法:

1)创建一个可以改变缩进的宏(来源

 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。 现在您有了一个在每次打开解决方案时都会触发的宏。 您只需要将您的解决方案映射到所需的缩进即可。


8
可以,它是黑客方式,但它有效。谢谢。对于C#开发者,它是DTE.Properties("TextEditor", "CSharp")。 - Mike Stockdale
2
如果您将此放入一个解决方案中,那么您必须将其放入所有解决方案中。对于公共项目来说几乎无用。在我看来,EditorConfig 更好。 - rustyx

7

Rebracer扩展非常好用。由于它与并修改了Visual Studio内置设置,因此它可以在不占用过多资源的情况下实现其目的。 - Alex Essilfie

4

从Visual Studio扩展程序EditorConfig(http://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328)的网站:

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

(强调我的)

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


2

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


5
是的,但提供一个完成文件的示例会更好 :) - toddmo

0

0

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

Visual Studio 插件相当基本,即它不会自动运行,但它在手动调用时表现良好。

http://llvm.org/builds/


0

更新:看起来Resharper并不管理缩进,所以这个答案实际上并没有解决具体的问题。然而,它在一般情况下适用;即如果有人在这里寻找“Visual Studio,每个解决方案的设置”


如果您使用 Resharper,您可以仅为解决方案保存格式设置(实际上是任何设置)。您还可以进一步指定是仅适用于自己(即不提交到源代码控制),还是共享针对特定解决方案的设置(即提交到源代码控制)。
Resharper > Options > Code Editing > C# (or whatever language) > Formatting Style > Braces Layout

然后在窗口底部,在 保存到 下拉菜单中选择 "Solution XYZ personal"(或 shared,根据您的目的而定)。

这将创建一个名为 YOURSOLUTION.sln.DotSettings.user 的 xml 文件,其中包含以下值:

<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 Settings - Save for Solution Only


1
哪个resharper设置用于将缩进设置为2个空格或4个空格? - Endy Tjahjono
@EndyTjahjono 这是一个VS设置:工具 > 选项 > 文本编辑器 > (语言) > 制表符 > "制表符大小"或"缩进大小"。而且,VS2012的好处是你可以使用快速启动搜索 (CTRL+Q) 并输入 "Tabs" 来直接跳转到所有可用的语言设置。 - drzaus
但是那个VS设置是全局的(不是每个解决方案/项目),而你建议使用resharper,因为它具有每个解决方案/项目的设置? - Endy Tjahjono
你抓住我了——我正在更改resharper中的一些其他设置,所以我假设它也会管理缩进。我再次查看了resharper获取选项卡设置,但找不到它。因此这个警告是“几乎适用于任何设置,除了resharper不管理的设置,比如缩进大小”。我会更新答案,如果由于我没有注意而导致不良评价,请放心给我负面评价。 - drzaus
谢谢更新。顺便说一下,我并不是想纠正你,而是希望 Resharper 有每个项目的缩进设置,只是我还没有找到设置的地方。 - Endy Tjahjono
没问题,不用担心。我想我可能在扩展程序“EditorConfig”中找到了真正的答案——请看下面我的第二个回答。 - drzaus

0

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

在Visual Studio 2008中,打开“工具”>“宏”>“宏资源管理器”。
双击“MyMacros”>“Module1”(如果没有“Module1”,右键单击“MyMacros”,然后选择“新建模块...”来创建它)。
在宏资源管理器窗口中,左侧双击“EnvironmentEvents”。
在左上角下拉菜单中,选择“SolutionEvents”。
在右上角下拉菜单中,选择“Opened”。
自动添加处理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"/>

在以下三个文件中的<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"

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

我还发现了一个插件,据说可以执行上述建议的宏所做的相同操作,但出于某种原因,在我运行其安装程序后它没有起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接