2009-04-07 8 views
21

In Emacs, wie kann ich eine maximale Zeilenlänge von sagen wir 80 Zeichen erzwingen? Ich möchte, dass es in meinen Code richtige Zeilenumbrüche einfügt, ähnlich wie fill-paragraph für Text, wenn möglich, mit der korrekten Einfügung des zweiten Teils der Zeile.Wie erzwinge maximale Zeilenlänge in Emacs?

Hier ein kleines Beispiel:

LongNameType<PrettyLong, AlsoLong> doSomethingWithLongFunctionName(int a, int b); 
foo(); 

Wenn ich fill-paragraph tatsächlich tun wird es:

LongNameType<PrettyLong, AlsoLong> 
doSomethingWithLongFunctionName(int a, int b); foo(); 

während ich würde das lieber:

LongNameType<PrettyLong, AlsoLong> 
    doSomethingWithLongFunctionName(int a, int b); 
foo(); 
+0

Tolle Idee! +1, ich versuche immer, 100 Zeichen/Zeile in VS beizubehalten, damit ich meinen Code mit der gleichen Fenstergröße konsistent sehen kann. Tools, um dies zu automatisieren, wären cool. – AaronLS

Antwort

0

Nicht wirklich ein emacser, aber was passiert, wenn Sie auto-fill-mode während in c++-mode einschalten?

C++ Modus sollten Sie Auto-indent geben, und Auto-Fill-Modus gibt Ihnen Zeilenumbruch ....

+0

Das Beispiel, das ich gab, war bereits im C++ - Modus ... – Frank

1

Ich benutze modeline-posn Paket. Es hebt die Spaltennummer in der Modelllinie hervor, wenn sie größer als der angegebene Wert ist.

5

fill-paragraph und auto-fill-mode absichtlich nicht Code umhüllen. Es gibt einfach zu viele Möglichkeiten, es zu tun und es würde wahrscheinlich falsch liegen. Sie werden Kommentare umhüllen, aber das hilft dir hier nicht.

Die einzige Möglichkeit, die ich jemals getan habe, um explizit zu setzen, wo ich den Text brechen möchte. Dann sollte die automatische Einrückung die gestrichelte Linie an der richtigen Stelle platzieren.

Versuchen Sie, einen großen Teil des vorhandenen Codes umzufllen? Oder versuchen Sie, den Code, den Sie gerade schreiben, automatisch zu füllen?

+0

Aber ich würde erwarten, dass der C++ - Modus fill-paragraph neu definiert, so dass es tatsächlich das Richtige für C++ tut. Das ist nicht schwieriger als der Rest der C++ - Modus-Implementierung. Ja, im Idealfall möchte ich meinen vollständigen Code ändern. Aber ich will es auch für neuen Code, den ich in Emacs schreibe. – Frank

+0

Ich denke, es ist schwieriger, weil es viel mehr Möglichkeiten gibt, eine Zeile zu brechen, als es Einrückungen gibt. Oftmals ist es nicht die beste Option, um den Code auszulegen, wenn Sie bei der 80-Spalten-Marke (oder wo auch immer) brechen (brechen Sie nach jedem Argument zum Beispiel in einer langen Liste von Argumenten). –

+0

Ich denke, Sie brechen nur nach dem letzten Komma vor dem Limit. Es könnte einige Ausnahmen geben, aber das sollte die Hauptregel sein. – Frank

5

Es gibt eine number of packages, die Sie vor Linienlängenlimits warnt. Persönlich verwende ich wide-column, die die Cursorfarbe abhängig von seiner aktuellen Spalte ändert.

+0

Es hat die Frage nicht beantwortet.Pls stellen eine Explicit-Lösung zur Verfügung, um das Einfügen von Zeilenumbruch zu erzwingen (indem die Zeile durchbrochen wird), wenn es x erreicht, andernfalls verwirren Sie die Leute nicht. – iantonuk

+0

@bedbad Niemand "beantwortete die Frage", weil (anscheinend) die Lösung in Emacs (noch) nicht existiert. Doch jede Antwort versuchte, Frank etwas zu geben, das ihm helfen könnte. Bitte fügen Sie konstruktives Feedback hinzu - wir sind eine Gemeinschaft, die Menschen aufbaut, anstatt sie zu zerstören. Ich bezweifle, dass jemand durch meine Antwort (oder die anderen Antworten) "verwirrt" wurde, weil niemand eine Antwort lieferte, die die Leute irreführte. –

+0

Ich glaube nicht, dass deine Antwort etwas mit einer Frage zu tun hat. Sie sollen eine Frage beantworten, die nicht etwas ist, "das für eine Person funktionieren könnte" in der SO-Frage, weil es für viele existiert, die die Antwort suchen. Selbst wenn Sie helfen 1 verwirren Sie eine ganze Reihe von Menschen – iantonuk

1

Sie sollten eine der vielen "vertikalen Linie" Bibliotheken für Emacs auschecken. Einige behalten zu jeder Zeit eine vertikale Hervorhebungslinie über den gesamten Puffer bei (nicht wirklich, was Sie wollen), aber andere Bibliotheken setzen die vertikale Hervorhebung immer auf eine fixe Spalte, was nicht wirklich das ist, was Sie wollen, aber Sie sehen sofort wenn du Linien einwickeln solltest.

0

Versuchen

'(c-max-one-liner-length 80) 

'(fill-column 80) 
'(c-ignore-auto-fill (quote (string cpp))) 

Hoffe, es hilft.

Verwandte Themen