none
VS 2015 Austausch von Tabs gegen Leerzeichen RRS feed

  • Frage

  • Hallo,

    ich habe im Visual Studio 2015 gerade ein befremdliches Verhalten beobachtet:

    Beim anlegen einer Variable, hab ich zwei Tabulatoren eingesetzt und dahinter einen Kommentar, in der nächsten Zeile dann eine weitere Variable und nach dem tippen des Semikolons wurden die zuvor gesetzten Tabulatoren der darüber befindlichen Zeile durch Leerzeichen ersetzt.

    Dies bei der Bearbeitung eines C# Quelltextes.

    Frage: Was soll der Unfug und wie stelle ich dies ab?

    Gruß


    - Florian


    Donnerstag, 25. Februar 2016 15:23

Antworten

  • Heute erreicht mich eine E-Mail, das der GitHub Bug geschlossen wurde.

    Behoben wird das Verhalten nicht, stattdessen wird es ein Abschaltung für die Formatierung geben:

    "Allow disabling of formatting while typing" heißt die Lösung.


    - Florian

    Dienstag, 18. Oktober 2016 06:57

Alle Antworten

  • Hallo Florian,

    die Einstellung, ob Tab oder Leerzeichen verwendet werden sollen, findest Du hier:

    Extras
     -> Optionen
       -> Text-Editor
         -> "Alle Sprachen" oder sprachspezifisch (Basic, C#, ...)
           -> "Tabstopps"

    In deinem Fall wird dann noch eine weitere Einstellung für die automatische Umformatierung dazukommen:

    Extras
     -> Optionen
       -> Text-Editor
         -> C#
           -> Formatierung
             -> "Beim Eingeben von ; Anweisung automatisch formatieren"
                  (oder eine andere Option dort)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 25. Februar 2016 15:38
    Moderator
  • Hallo Stefan,

    das wäre in der Tat ein Workarround und würde das Verhalten für diese spezifische Situation abstellen. Irgendwie unbefriedigend, da ich ja nicht unbedingt grundsätzlich gegen die automatische Formatierung bin - erspart einem schließlich etwas Tipparbeit, wenn sie denn korrekt funktioniert.

    Ich habe inzwischen bemerkt das die Sache noch viel schlimmer ist, denn beim schließen mit geschweifter Klammer werden sämtliche Tabs vor den Kommentaren entfernt und durch Leerzeichen ersetzt.

    Mir ist nicht im geringsten klar warum dies sich so verhält, weil keine der Optionen unter dem Punkt "Format" ("Formatierung") zum beschriebenen Verhalten passt, insbesondere die Unterpunkte zum Spacing habe ich mir dabei noch sehr genau angesehen.

    Ist das etwa ein Bug?


    - Florian

    Donnerstag, 25. Februar 2016 15:51
  • Hallo Florian,

    IMHO ist das kein Workaround, sondern die erste Option dürfte genau das sein, was in deinem Fall auftritt. Deine Beschreibung entspricht zumindest genau dem, was man dort aktivieren/deaktivieren kann.

    Es sei denn, Du hättest noch ein weiteres Add-In (ReSharper oder sowas in der Richtung), was deinen Code wieder verhackstückt.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 25. Februar 2016 16:00
    Moderator
  • Nein, die Option sollte wohl kaum der Grund für das Verhalten sein was hier auftritt. Es steht in den Unterpunkten sehr genau beschrieben welche Autoformatierungen vorgenommen werden sollen (im Übrigen mit Vorschau), keine entspricht dem was dort passiert. Außerdem habe ich mit keiner der dort genannten Formatierungen ein Problem, sondern ausschließlich mit dem was passiert obwohl es keine der Optionen beschreibt. Weiterhin ist das Hauptanliegen meiner Frage die nach dem Grund für das beschriebene Verhalten.

    Korrekt ist, es tritt eine Autoformatierung auf - das war es aber auch schon.

    Andere Add-Ins sind nicht am Werk, ausschließlich Visual Studio.

    Erwähnenswert wäre vielleicht noch, das "Keep Tabs" bereits aktiv war, bevor ich das fehlerhafte Verhalten bemerkt habe. Es scheint auch eine Eigenheit zu sein, die bei der Bearbeitung von C# Code auftritt, bei der Arbeit mit C++ Code ist mir das jedenfalls noch nicht aufgefallen.

    Es werden im übrigen auch nicht alle Tabs ersetzt, sonder nur die zwischen Semikolon und den dahinter eingefügten Kommentar - dies sowohl beim Einfügen des Semikolons in der nächsten Zeile, als auch beim schließen mit geschweifter Klammer.

    Ich halte das nicht für "zu erwartendes Verhalten".

    P. S.: Der Workarround ist relevant und ich habe diesen auch entsprechend bewertet.


    - Florian

    Donnerstag, 25. Februar 2016 16:18
  • Hallo Florian,

    dann nochmal genauer gefragt:

    Du fügst zwei Tabstopps ein. Wie genau? Einfach zweimal auf Tab auf der Tastatur? Falls ja: Bist Du sicher, dass die zuerst noch vorhanden sind und erst nach; bzw. } ersetzt werden? Oder kann es auch sein, dass die gleich beim Drücken von Tab schon ersetzt werden?

    Falls Du die Tabs bspw. per Copy/Paste einfügst, wäre das beschriebene Verhalten eben durch die Option "bei ; bzw. } einfügen umformatieren" normal. Es wird auch nicht alles umformatiert, sondern in der Regel eben nur der Block, der gerade bearbeitet wird.

    Die "Productivity Power Tools" haben ebenfalls eine Option "Fix Mixed Tabs". Ist die bei dir evtl. aktiviert? (Findet man auch in Extras -> Optionen)

    Poste bitte auch, was in deinem VS hier eingestellt ist:

    Extras
     -> Optionen
       -> Text-Editor
         -> "Alle Sprachen" oder sprachspezifisch (Basic, C#, ...)
           -> "Tabstopps"
             -> ...

    In deinem Fall wird dann noch eine weitere Einstellung für die automatische Umformatierung dazukommen:

    Extras
     -> Optionen
       -> Text-Editor
         -> C#
           -> Formatierung
             -> "Beim Eingeben von ; Anweisung automatisch formatieren"
             und
             -> "Beim Eingeben von } Block automatisch formatieren"

    Die weiteren Unterpunkte, die Du angesprochen hast, interessieren an der Stelle erstmal nicht, da es um Tabs und nicht um andere Formatierungen geht.




    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 25. Februar 2016 16:40
    Moderator
  • Hallo Stefan,

    vielen Dank für deine Bemühung und dein Interesse.
    Die Einstellungen sind "Keep Tabs" und die automatischen Formatierungen sind aktiv. Wie ich bereits schrieb führt die Deaktivierung zum Erhalt der Tabs, aber auch dazu das die Formatierungen nicht mehr gemäß gewünschter Richtlinie automatisch durchgeführt wird.

    Die Eingaben werden schlicht eingetippt, hier ein Beispiel:
    <tab><tab>variable;<tab>// Kommentar
    <tab><tab>variable2;<tab>// Kommentar 

    Wenn ich nun darunter eine weitere Zeile schreibe, sieht es so aus:
    <tab><tab>variable;<tab>// Kommentar
    <tab><tab>variable2;<tab>// Kommentar 
    <tab><tab>variable3

    Tippe ich nun ein Semikolon:
    <tab><tab>variable;<tab>// Kommentar
    <tab><tab>variable2;<space><space><space><space>// Kommentar
    <tab><tab>variable3;

    Tippe ich eine geschweifte Klammer:
    <tab><tab>variable;<space><space><space><space> // Kommentar 
    <tab><tab>variable2;<space><space><space><space>// Kommentar
    <tab><tab>variable3;<space>}

    Das Leerzeichen vor der geschweiften Klammer ist durch die Einstellungen nachvollziehbar. Wie man sieht bleiben die Tabs vor der Variable erhalten und es werden ausschließlich die Tabs zwischen Variable und Kommentar ersetzt.

    In C++ Quelltexten wird diese Tab Ersetzung nicht vorgenommen, obwohl die Einstellungen dort (bis auf sprachspezifisches) identisch sind.

    Die "Productivity Power Tools" habe ich nicht installiert.

    Ich bezweifle das hier eine Lösung über die normale Oberfläche möglich ist, was mich auch dazu gebracht hat hier im Forum nachzufragen. Da dieses Verhalten nicht generell so ist, könnte ich mir vorstellen, dass man es vielleicht an anderer Stelle abbiegen kann (Registry, Konfigurationsdatei...).

    Ich habe es auch noch unter Visual Studio 2012 untersucht, dort sind identische Einstellungen in den genannten Punkten vorgenommen - "Keep Tabs" und aktive automatische Formatierungen. Unter Visual Studio 2012 wird eine solche Ersetzung wie beschrieben ebenfalls nicht durchgeführt, insbesondere auch nicht in C# Quelltexten.

    Wie man sich aus dem beschrieben vermutlich schon denken kann, führt diese Tab-Ersetzungs-Sache dazu, das bei "Format Whole Document" auch die Tabulatoren durch Leerzeichen ersetzt werden - was deswegen ärgerlich ist, weil hier eine Möglichkeit verloren geht einen Quelltext, der nicht sauber eingegeben wurde, schnell in die gewünschte Grundformatierung zu überführen -> Der Workarround hier wäre vermutlich diesen Quelltext in VS2012 zu öffnen und dort zu formatieren.

    Ich brauche wohl kaum zu erwähnen, dass es uns lieber ist unsere Zeit in die Entwicklung zu stecken und nicht in die Korrektur von nicht nachvollziehbaren Automatismen.

    Gruß


    - Florian


    • Bearbeitet Florian Haupt Montag, 29. Februar 2016 08:19 Konsistenz Variablennamen
    Freitag, 26. Februar 2016 08:25
  • Hallo Florian,

    vielen dank für die detaillierte Erklärung. Das (nur Ersetzen der Tags nach der Variablen) ist dann wirklich ungewöhnlich. Ich versuche, das hier mal nachzustellen und melde mich dann nochmal.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 26. Februar 2016 09:46
    Moderator
  • Es wurde inzwischen ein Kommentar hinzugefügt der auf Github verweist: https://github.com/dotnet/roslyn/issues/8224

    Wenn ich das dort so lese klingt es nicht unbedingt so als wolle man eine Korrektur vornehmen.


    - Florian

    Donnerstag, 17. März 2016 12:14
  • Heute erreicht mich eine E-Mail, das der GitHub Bug geschlossen wurde.

    Behoben wird das Verhalten nicht, stattdessen wird es ein Abschaltung für die Formatierung geben:

    "Allow disabling of formatting while typing" heißt die Lösung.


    - Florian

    Dienstag, 18. Oktober 2016 06:57