2009-08-05 17 views
6

So Emacs Auto-Einrückung für CSS treibt mich batty. Hier ist, was ich CSS mag aussehen:Einrückung CSS in Emacs

#foo ul.bar { 
    .... 
} 

    #foo ul.bar li { 
     .... 
    } 

     #foo ul.bar li a { 
      .... 
     } 

Dies ist, was Emacs gibt mich mit seinem Auto-Einzug:

#foo ul.bar { 
    .... 
} 

#foo ul.bar li { 
    .... 
} 

#foo ul.bar li a { 
    .... 
} 

Ich mag meine Stile halten progressiv eingezogen, wenn sie die Kaskade verwenden. Allerdings wird Emacs alles auf die gleiche Ebene automatisch festlegen.

Alles, was ich tun kann?

+0

Haben Sie eine Lösung gefunden? Ich habe das gleiche Problem. – vise

+0

Nein, soweit ich das beurteilen kann, fehlt eine bindende Registerkarte zum Einfügen einer expliziten Ebene des Einzuges, es gibt keine echte Lösung. – thedz

+2

Sie können SCSS/SASS unter http://sass-lang.com/ oder eine ähnliche Lösung ausprobieren, um dieses Problem auf einer grundlegenderen Ebene zu lösen. –

Antwort

3

Ich glaube nicht, dass einer der CSS-Modi, die ich mit Emacs verwendet habe, diese Art von Einrückung aus der Box unterstützen würde - sie schauen nicht auf den Inhalt der Selektoren, nur ob oder nicht etwas ist ein Selektor (nicht einrücken) oder ist eine Regel innerhalb eines Selektors (Einzug um einen Schritt).

Wenn Sie dies ändern möchten, müssen Sie die Funktion, die Einzug für Ihren CSS-Modus enthält, außer Kraft setzen.

+0

Gibt es eine Möglichkeit, manuelle Einrückungen durchzuführen? Wenn ich Autoindent nicht so einrücken kann, wie ich es möchte, würde ich leben, wenn ich manuell einrücken könnte. – thedz

+0

Es sieht so aus - zumindest mit dem css-Modus, den ich benutze - wenn Sie die ursprüngliche Auswahlzeile manuell an die gewünschte Stelle einrücken, drücken Sie danach 'TAB', um die folgenden Regeln und die Endung korrekt einzufügen '}' - und dann müssen Sie den nächsten Selektor usw. manuell ausgleichen. (Die Version von css-mode scheint mit Emacs seit irgendwann im Emacs 22 Zeitrahmen zu kommen, also ist es wahrscheinlich das, was Sie sind wenn du einen kürzlichen Emacs hast und nicht speziell etwas anderes geladen hast.) – genehack

3

Ich würde vorschlagen, dass Sie beginnen, Ihr CSS mit "Sass" zu kompilieren - die .scss Dateien sehen genauso aus wie CSS, erlauben Ihnen aber, Regeln genau so zu verschachteln, wie Sie es in Ihrem Beispiel suchen und produziert wirklich hübsche Ausgabe, die aussieht wie CSS, das von Hand gefertigt wurde - also, zuerst wird Ihr CSS noch verständlich sein; und zweitens, wenn Sie jemals auf Sass aufgeben wollen, können Sie einfach Ihre .scss Dateien löschen und bearbeiten Sie die .css Dateien von diesem Punkt an.

Und Emacs fügt Sass bereits perfekt hinzu, da Emacs nur die normalen Regeln zum Zählen der Anzahl der geschweiften Klammern und zum Einrücken entsprechend einhält. Ihr Quellcode oben, konvertiert, wenn zu Sass, würde wie folgt aussehen:

#foo ul.bar { 
    ... 

    li { 
     ... 

     a { 
      ... 
     } 
    } 
} 

Offensichtlich ist diese Wiederholung entfernt und macht es leichter, Ihre CSS zu lesen und zu pflegen. Das Sass-Projekt befindet sich hier: http://sass-lang.com/

+1

Wenn du [compass] (http://compass-style.org/) hinzufügst, bekommst du weitere Freebies, inklusive extra CSS-Rezepte und compass watch Kompilieren Sie jedes Mal, wenn sich eine Datei ändert. –

1

Ich weiß, das ist ein Hack, aber ich habe gesehen, Java-Modus funktioniert mehr oder weniger gut mit CSS.

0

Sie können die integrierte Emacs-ID verwenden. Ich arbeite in jedem Modus und macht einen ordentlichen Job mit CSS-Dateien.

(defun cesco/indent() (interactive) (mark-whole-buffer) (indent-region (point-min) (point-max) nil) (pop-global-mark) )