sangre sangrado sangra sale repentino repente razon que precio porque para niños nasal nariz medicamentos mayores dela cauterizacion bueno adultos c++ visual-studio namespaces indentation

c++ - sale - sangrado de nariz en niños



¿Hay alguna manera de hacer que Visual Studio deje de sangrar espacios de nombres? (7)

Visual Studio sigue intentando sangrar el código dentro de los espacios de nombres.

Por ejemplo:

namespace Foo { void Bar(); void Bar() { } }

Ahora, si lo deshago manualmente, se mantendrá así. Pero desafortunadamente si agrego algo justo antes de void Bar(); - como un comentario - VS seguirá intentando sangrarlo.

Esto es tan molesto que, básicamente, debido a esta única razón, casi nunca uso espacios de nombres en C ++. No puedo entender por qué trata de sangrarlos (¿cuál es el sentido de sangrar 1 o incluso 5 pestañas de todo el archivo ?), O cómo hacer que se detenga.

¿Hay alguna manera de detener este comportamiento? Una opción de configuración, un complemento, una configuración de registro, incluso un truco que modifica devenv.exe directamente.


Aquí hay una macro que podría ayudarte. Eliminará la sangría si detecta que está creando actualmente un namespace . No es perfecto, pero parece funcionar hasta ahora.

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

Dado que se ejecuta todo el tiempo, debe asegurarse de que está instalando la macro dentro de su elemento de proyecto EnvironmentEvents dentro de MyMacros. Solo puede acceder a este módulo en el Explorador de macros (Herramientas-> Macros-> Explorador de macros).

Una nota, actualmente no admite espacios de nombres "empaquetados" como

namespace A { namespace B { ... } }

EDITAR

Para admitir espacios de nombres "empaquetados" como el ejemplo anterior y / o comentarios de soporte después del espacio de nombres, como el namespace A { /* Example */ , puede intentar usar la siguiente línea:

If System.Text.RegularExpressions.Regex.IsMatch(lines, "^[/s]*(namespace.+)?[/s/{]+$") Then

No he tenido la oportunidad de probarlo mucho todavía, pero parece estar funcionando.


Como KindDragon señala, Visual Studio 2013 Update 2 tiene una opción para detener la sangría.

Puede desmarcar HERRAMIENTAS -> Opciones -> Editor de texto -> C / C ++ -> Formatear -> Sangría -> Aplicar sangría al contenido del espacio de nombres.


Entiendo el problema cuando hay espacios de nombres anidados. Solía ​​empaquetar todos los namespace en una sola línea para evitar la sangría múltiple. Dejará un nivel, pero eso no es tan malo como muchos niveles. Ha pasado tanto tiempo desde que utilicé VS que apenas recuerdo esos días.

namespace outer { namespace middle { namespace inner { void Test(); ..... }}}


Probablemente no sea lo que quería escuchar, pero muchas personas lo solucionan al usar macros:

#define BEGIN_NAMESPACE(x) namespace x { #define END_NAMESPACE }

Suena tonto, pero te sorprendería cuántos encabezados del sistema usan esto. (La implementación stl de glibc, por ejemplo, tiene _GLIBCXX_BEGIN_NAMESPACE() para esto).

De hecho prefiero de esta manera, porque siempre tiendo a encogerme cuando veo líneas sin sangría después de { . Aunque soy solo yo.


Simplemente no inserte nada antes de la primera línea de código. Puede probar el siguiente enfoque para insertar una línea nula de código (parece funcionar en VS2005):

namespace foo {; // !<--- void Test(); }

Esto parece suprimir la sangría, pero los compiladores pueden emitir advertencias y los revisores / encargados del código pueden sorprenderse. (¡Y con razón, en el caso habitual!)


También puede reenviar declarar sus tipos (o lo que sea) dentro del espacio de nombres y luego implementar el exterior de esta manera:

namespace test { class MyClass; } class test::MyClass { //... };


Visual Studio 2017

Menú de sangría del espacio de nombres VS2017

Puede acceder a esta configuración de "Contenido del espacio de nombres de sangría" en Herramientas-> Opciones, luego Editor de texto-> C / C ++ -> Formatear-> Inden- tar. Está en el fondo de los menús, pero extremadamente útil una vez encontrado.