2012-05-23 3 views
5

Ich bearbeite meine Haskell-Quelldateien mit Vim und habe die Option 'textwidth' gesetzt, um Zeilen mit Überlänge automatisch zu umbrechen. Also meine ~/.vimrc wie folgt aussehen:Führe automatisch führende Bindestriche in Haskell weiter Kommentare zu Textumbruch mit Vim

set tw=78 

Nun, wenn ich schreibe eine Linie, die länger als 78 Zeichen das letzte Wort automatisch in die nächste Zeile genommen wird. Dies ist sehr nützlich beim Schreiben von Kommentaren in Quelldateien. Das Schöne ist, dass innerhalb von Kommentaren die führenden Kommentarzeichen automatisch am Anfang jeder Zeile eingefügt werden, wenn die letzte Zeile zu lang war und automatisch umbrochen wurde. Aber das funktioniert nur für Kommentare im C-Stil, aber leider nicht für Haskell-führende Striche.

So zum Beispiel in einem JS-Datei

/** 
* This is a very long comment which is longer than 78 chars, yeah really 
* longer than 78 chars... 

schön sowie

// This is a very long comment which is longer than 78 chars, yeah really 
// longer than 78 chars... 

es schön wäre also jetzt eingewickelt wird, wenn das gleiche in Haskell Kommentaren geschieht, wie

------------------------------------------------------------------------------ 
-- | This is a very long module description which is longer than 78 chars, 
-- yeah really longer than 78 chars... 

Weiß jemand ob und wie das möglich ist? Wo wird dieses Verhalten angegeben? Hat: set formatexpr oder: set formatoptions helfe mir da?

Vielen Dank im Voraus für Ihre Hilfe!

= < < Johannes

/edit: btw verwende ich vim 7.3.x

+1

Das passiert automatisch für mich. Vielleicht möchten Sie überprüfen, was Ihre Optionen überschreiben könnte. Achten Sie darauf, das 'c' Flag in' 'formatoptions' zu haben, wie @daniel kullmann sagte. Der Mechanismus, den Vim zum Erkennen von Kommentaren verwendet, ist in Abschnitt 30 beschrieben.6 des Benutzerhandbuchs und auch unter dem Thema 'format-comments'. – sidyll

+0

Danke für den RTFM Hinweis. :) Das hat meine Frage fast gelöst. Wie das [Handbuch] (http://vimdoc.sourceforge.net/htmldoc/change.html#format-comments) beschreibt, ist es möglich, benutzerdefinierte Kommentare zu setzen. Also habe ich das zu meiner haskell.vim Syntaxdatei hinzugefügt: 'set comments = s1: - \ \ |, m: -, e: -' Aber das scheint nur für C-Style-Kommentare zu arbeiten Vim ist so 'klug' und gibt am Anfang des 'e'- und' m'-Teils des Kommentars eine Leerstelle ein. Irgendeine Idee wo das konfiguriert werden kann? – JHannes

+1

Vim erst kürzlich (innerhalb der letzten ein oder zwei Jahre) begann mit Syntaxdateien für Haskell zu versenden; vielleicht solltest du upgraden. –

Antwort

2

Ich bin kein vim Benutzer (und haskell-mode für emacs in der Regel nur „das Richtige tut,“ anmutig zu einem gewissen Einrückungsstil Anpassung), aber die folgenden schien für meinen schnellen Test zu arbeiten:

-- | Bla Bla 
-- continues right under the Bla 
:

:set comments=:--\ ,sr:{-,m:\ ,ex:-} 

Dies gilt nicht -- | speziell behandeln, aber ich habe etwas in Haskell eigentlich nie so zerklüftet gesehen ,

-- | Bla bla slightly longer than one line description 
-- bla bla. 
-- 
-- Bla bla additional details. 

Wenn Sie einen langen Laufkörper von Text zur Beschreibung Ihrer Erklärung möchten, können Sie: 10

Es ist afaik weitaus häufiger einen Kommentar wie dieser einrücken:

-- | Usually a one-line short description. 
-- 
-- Continued like this, with a longer description. 

Oder diese Variante starte es stattdessen als mehrzeiligen Kommentar:

{-| 
The definition of 'myfunc', Act I, Chapter 1. Bla bla bla bla 
bla bla... 
-} 
+0

Ich benutze immer den ersten Stil von Haddock-basierte Kommentare, die Sie in meinem Code aufgeführt ... Ich finde es sauberer :) – ivanm

3

Sie sollten die formatoptions Einstellung überprüfen; für mich hat es den Wert croql. c bedeutet, dass Kommentare in der nächsten Zeile fortgesetzt werden. Siehe :help 'formatoptions'

:set formatoptions=croql 
+1

Danke für deine Antwort, ': set formatoptions?' Zeigt 'tcq'. Es ist ratsam, es auf "croql" zu setzen, aber es löst mein Problem nicht, da Vim den Kommentar selbst nicht erkennen kann (siehe meinen obigen Kommentar). Aber trotzdem, danke! : D – JHannes