Вот макрос, который может вам помочь. Он удалит отступ, если он обнаружит, что вы в настоящее время создаете namespace
. Это не идеально, но, похоже, работает до сих пор.
Public Sub aftekeypress(ByVal key As String, ByVal sel As TextSelection, ByVal completion As Boolean) _
Handles TextDocumentKeyPressEvents.AfterKeyPress
If (Not completion And key = vbCr) Then
'Only perform this if we are using smart indent
If DTE.Properties("TextEditor", "C/C++").Item("IndentStyle").Value = 2 Then
Dim textDocument As TextDocument = DTE.ActiveDocument.Object("TextDocument")
Dim startPoint As EditPoint = sel.ActivePoint.CreateEditPoint()
Dim matchPoint As EditPoint = sel.ActivePoint.CreateEditPoint()
Dim findOptions As Integer = vsFindOptions.vsFindOptionsMatchCase + vsFindOptions.vsFindOptionsMatchWholeWord + vsFindOptions.vsFindOptionsBackwards
If startPoint.FindPattern("namespace", findOptions, matchPoint) Then
Dim lines = matchPoint.GetLines(matchPoint.Line, sel.ActivePoint.Line)
' Make sure we are still in the namespace {} but nothing has been typed
If System.Text.RegularExpressions.Regex.IsMatch(lines, "^[\s]*(namespace[\s\w]+)?[\s\{]+$") Then
sel.Unindent()
End If
End If
End If
End If
End Sub
Поскольку он работает все время, вы должны убедиться, что вы устанавливаете внутри макроса в ваших EnvironmentEvents
project item внутри MyMacros. Вы можете получить доступ только к этому модулю в проводнике макросов (Tools-> Macros-> Macro Explorer).
Одно примечание, он не поддерживает «упакованные» пространств имен, таких как
namespace A { namespace B {
...
}
}
EDIT
Для поддержки «упакованы» пространств имен, таких как пример выше и/или поддержки комментарии после пространства имен, например namespace A { /* Example */
, вы можете попробовать использовать следующую строку:
If System.Text.RegularExpressions.Regex.IsMatch(lines, "^[\s]*(namespace.+)?[\s\{]+$") Then
У меня еще не было возможности проверить его, но он работает.
Вы можете полностью отключить автоотмещение. Или установите его на отступ меньшую величину (скажем, 2 пробела вместо 1 вкладки) – jalf
Это (неконфигурируемые настройки отступов) является одной из многих причин, по которым я прекратил редактировать файлы в Visual Studio несколько лет назад ... :) –
Я буду присудить награду тому, кто найдет решение, которое не имеет побочных эффектов, или как можно меньше побочных эффектов. На данный момент лучшим ответом, ИМО, является бакар; если лучшие ответы не будут предоставлены, я дам ему ответ. –