Voici une macro qui pourrait vous aider. Elle supprimera l'indentation si elle détecte que vous êtes en train de créer un fichier de type namespace
. Il n'est pas parfait mais semble fonctionner jusqu'à présent.
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
Étant donné qu'elle fonctionne en permanence, vous devez vous assurer que vous installez la macro à l'intérieur de votre fichier EnvironmentEvents
élément du projet dans MyMacros. Vous ne pouvez accéder à ce module que dans l'explorateur de macros (Outils->Macros->Explorateur de macros).
Il convient de noter qu'il ne prend pas actuellement en charge les espaces de noms "emballés" tels que
namespace A { namespace B {
...
}
}
EDIT
Pour prendre en charge les espaces de noms "emballés" tels que l'exemple ci-dessus et/ou prendre en charge les commentaires après l'espace de noms, tels que namespace A { /* Example */
vous pouvez essayer d'utiliser la ligne suivante à la place :
If System.Text.RegularExpressions.Regex.IsMatch(lines, "^[\s]*(namespace.+)?[\s\{]+$") Then
Je n'ai pas encore eu l'occasion de le tester à fond, mais il semble que cela fonctionne.
0 votes
Vous pourriez désactiver entièrement l'indentation automatique. Ou le paramétrer pour qu'il soit indenté d'une quantité moindre (par exemple, 2 espaces au lieu d'une tabulation).
3 votes
Ce problème (paramètres d'indentation non configurables) est l'une des nombreuses raisons pour lesquelles j'ai arrêté d'éditer des fichiers dans Visual Studio il y a des années... :)
2 votes
J'attribuerai la prime à celui qui trouvera une solution sans effets secondaires, ou avec le moins d'effets secondaires possible. Pour l'instant, la meilleure réponse, selon moi, est celle de Bacar ; si aucune meilleure réponse n'est fournie, je lui attribuerai la réponse.
0 votes
C'est pourquoi j'utilise Eclipse CDT ;) Il est possible d'utiliser le compilateur VS dans Eclipse, cela peut donc valoir la peine d'essayer.
2 votes
visualstudio.uservoice.com/forums/121579-visual-studio/