如何控制 Visual Studio 中换行的缩进
How do I control indentation of wrapped lines in Visual Studio
我 Visual Studio 2019 年(在家社区;在办公室专业)。我也有 ReSharper。我设置行长为120;在 4 处缩进,并在大括号或分号处自动格式化。语言是C#
问题是换行的缩进是完全不可预测的(至少对我而言)。有时它如我所料缩进了 4 个字符;有时它位于 =>
或相同运算符(如 &&
)的括号下或右侧。因此,经常换行从字符 80 或 90 开始!
我怎样才能总是从上一行缩进 4 个字符?
不用说,我在 Visual Studio 和 Resharper Code Editing - Formatting 选项下尝试了十几种选项组合。 Visual studio 似乎没有 any 选项可以使它推送新行。 Resharper 在 C# - 格式样式下有括号部分。但没有什么能让包装变得简单
示例:
lstGroup.Select(s => new Group
{
...
Status = lookup.Where(w => w.LookupType == LookupConstants.CRIMETYPE &&
(int?)w.LookupIndex == (string.IsNullOrEmpty(s.TempCrimeType) ? 0
: Convert.ToInt32(s.TempCrimeType))).Select(w => w.LookupDescription).FirstOrDefault(),
...
});
(可能不清楚,但行不会 运行 超过字符;所以我希望它保持这种状态!)。语句末尾打分号后,变成
Status = lookup.Where(w => w.LookupType == LookupConstants.CRIMETYPE &&
(int?) w.LookupIndex == (string.IsNullOrEmpty(s.TempCrimeType)
? 0
: Convert.ToInt32(s.TempCrimeType))).Select(w => w.LookupDescription).FirstOrDefault(),
我不确定您是否可以完全简化换行 statements/expressions 的缩进,但以下选项应该会更容易。如果有什么仍然让您不快,请用示例修改您的问题。
制表符、缩进、对齐
- 将 "Parenthesis" 部分中的所有选项设置为 "Parenthesis and inside equally"
- 关闭 "Align Multiline Constructs"
中的所有选项
支撑布局
- 将"Expressions (initializers, switch expressions)"设置为"At next line indented (Whitesmiths style)"
- 还要考虑是否要将 "Lambda and delegate" 也更改为相同的样式
更新:要防止 ReSharper 重新包装您的代码,请转到 "Line breaks and wrapping" 页面并查找名为 "Wrap ..." 且值为 "Chop if long or multiline" 和 "Chop always" 的选项。根据需要将它们更改为 "Simple wrap"。您可能还想确保所有 "Keep existing arrangement..." 选项都已打开。您的特定示例受名为 "Wrap ternary expression".
的设置的影响
我 Visual Studio 2019 年(在家社区;在办公室专业)。我也有 ReSharper。我设置行长为120;在 4 处缩进,并在大括号或分号处自动格式化。语言是C#
问题是换行的缩进是完全不可预测的(至少对我而言)。有时它如我所料缩进了 4 个字符;有时它位于 =>
或相同运算符(如 &&
)的括号下或右侧。因此,经常换行从字符 80 或 90 开始!
我怎样才能总是从上一行缩进 4 个字符?
不用说,我在 Visual Studio 和 Resharper Code Editing - Formatting 选项下尝试了十几种选项组合。 Visual studio 似乎没有 any 选项可以使它推送新行。 Resharper 在 C# - 格式样式下有括号部分。但没有什么能让包装变得简单
示例:
lstGroup.Select(s => new Group
{
...
Status = lookup.Where(w => w.LookupType == LookupConstants.CRIMETYPE &&
(int?)w.LookupIndex == (string.IsNullOrEmpty(s.TempCrimeType) ? 0
: Convert.ToInt32(s.TempCrimeType))).Select(w => w.LookupDescription).FirstOrDefault(),
...
});
(可能不清楚,但行不会 运行 超过字符;所以我希望它保持这种状态!)。语句末尾打分号后,变成
Status = lookup.Where(w => w.LookupType == LookupConstants.CRIMETYPE &&
(int?) w.LookupIndex == (string.IsNullOrEmpty(s.TempCrimeType)
? 0
: Convert.ToInt32(s.TempCrimeType))).Select(w => w.LookupDescription).FirstOrDefault(),
我不确定您是否可以完全简化换行 statements/expressions 的缩进,但以下选项应该会更容易。如果有什么仍然让您不快,请用示例修改您的问题。
制表符、缩进、对齐
- 将 "Parenthesis" 部分中的所有选项设置为 "Parenthesis and inside equally"
- 关闭 "Align Multiline Constructs" 中的所有选项
支撑布局
- 将"Expressions (initializers, switch expressions)"设置为"At next line indented (Whitesmiths style)"
- 还要考虑是否要将 "Lambda and delegate" 也更改为相同的样式
更新:要防止 ReSharper 重新包装您的代码,请转到 "Line breaks and wrapping" 页面并查找名为 "Wrap ..." 且值为 "Chop if long or multiline" 和 "Chop always" 的选项。根据需要将它们更改为 "Simple wrap"。您可能还想确保所有 "Keep existing arrangement..." 选项都已打开。您的特定示例受名为 "Wrap ternary expression".
的设置的影响