Seite 1 von 2

VIM: Python-Source-Code falten

Verfasst: Montag 28. August 2006, 11:58
von midan23
Hallo,

ich verwende meistens VIM (derzeit Version 7.0) als Editor für meine Python-Programme und würde da auch gerne Textfaltungen verwenden.
Bisher habe ich allerdings nichts wirklich brauchbares gefunden ...

"python_fold.vim" ist zwar ganz nett, aber die Anwendung ist mir etwas zu kompliziert.

Eine Suche brachte mich zum Vim Tip #741, was schon eher dem entspricht, was ich suche ... also hab ich den Tip in die Vim-Syntax-Datei für Python integriert:

Zuerst hab ich die Datei "python.vim" in mein "syntax"-Ordner kopiert ($HOME/.vim/syntax).
Danach hab ich diese Datei an folgenden Stellen geändert:

Code: Alles auswählen

syn keyword pythonStatement	def class nextgroup=pythonFunction skipwhite
ersetzt durch

Code: Alles auswählen

"syn keyword pythonStatement	def class nextgroup=pythonFunction skipwhite
syn match pythonStatement /\<def\>/ nextgroup=pythonFunction skipwhite
syn match pythonStatement /\<class\>/ nextgroup=pythonFunction skipwhite
Diesen "if"-Block

Code: Alles auswählen

if exists("python_highlight_all")
  let python_highlight_numbers = 1
  let python_highlight_builtins = 1
  let python_highlight_exceptions = 1
  let python_highlight_space_errors = 1
endif
hab ich um eine Zeile

Code: Alles auswählen

  let python_enable_folds = 1
ergänzt. Und nach dem "if"-Block von "python_highlight_space_errors" hab ich noch diesen

Code: Alles auswählen

if exists("python_enable_folds")
    syntax region pythonFold start="^\z(\s*\)\%(class\|def\)" end="^\%(\n*\z1\s\)\@!" transparent fold
    set foldmethod=syntax
endif
hinzugefügt.

Soweit funktioniert alles so wie ich es haben will ... bis auf eine Kleinigkeit:
Dekoratoren gehören eigentlich mit zur Funktions-Definistion ... und werden leider nicht mit gefaltet ...

Weiss da jemand, wie ich das mit einbauen kann ?

Verfasst: Sonntag 3. September 2006, 13:24
von sape
Soweit ich das verstanden habe willst du deine Funktionen und Klassen Collapsen oder? Dafür eignet sich eclipse mit dem PyDev PlugIn.

Verfasst: Sonntag 3. September 2006, 13:57
von midan23
Mag sein, das sich Eclipse mit Plugin eignet ...

Aber eigentlich bevorzuge ich VIM als Editor.

(Mal abgesehen davon, das Eclipse auf einem P3 mit 128MB RAM unter WinNT mit SP6 nicht wirklich Spass macht ...)

Verfasst: Sonntag 3. September 2006, 14:24
von Leonidas
midan23 hat geschrieben:Aber eigentlich bevorzuge ich VIM als Editor.
Same here.

Ich nutze zwar Folding nicht, aber es geht in vim sehr einfach, wie Bill Mill hier beschreibt. Das ist eigentlich sehr einfach und funktioniert eigentlich sehr gut, auch ohne irgendwelche weiteren vim-Module oder andere Anpassungen.

Verfasst: Sonntag 3. September 2006, 14:48
von midan23
Hab ich auch schon gelesen ... leider ist so was wie

Code: Alles auswählen

set foldmethod=indent
überhaupt nicht das, was ich möchte.
Mit "indent" wird alles gefaltet, also auch if, for ...

Ich möchte aber nur Klassen- und Funktions-Definitionen falten und eventuelle Dekoratoren in die Faltung der dazu gehörigen Funktion unterbringen ...

Verfasst: Montag 4. September 2006, 07:23
von sape
midan23 hat geschrieben:Mag sein, das sich Eclipse mit Plugin eignet ...

Aber eigentlich bevorzuge ich VIM als Editor.

(Mal abgesehen davon, das Eclipse auf einem P3 mit 128MB RAM unter WinNT mit SP6 nicht wirklich Spass macht ...)
War ja nur ein vorschlagt von mir gewesen ;) Ja hast aber recht, Eclipse ist schon recht Ressourcen fressend. Das gute an Eclips ist aber das es halt für zimmlich alle Programmiersprachen PIs gibt und es sehr mächtig vom Funktionsumfang ist :) Man kann sich in Eclips sogar eigene Syntax highlighting PIs (für eigen Sprachen) Programmieren.

Ich will dich aber jetzt nicht von irgendwas überzeugen ;) In diesem sinne B2T

lg

Verfasst: Montag 4. September 2006, 07:42
von Nirven
Jo, aber Ecllipse findet bei mir andauernd Fehler, wo keine sind (bzw, wenn ich die Fehler behoben habe, merkt Ecllipse das nicht). Kann man dem irgendwie sagen, dass er einen bestimmten Fehler ignorieren soll?

Ansonsten tut er wirklich alles was ich will, da stört mich auch die etwas lange Anlaufzeit nicht (wenn es schnell gehen soll nehm ich eh Notepad++)

Sorry fürs hijacken des Threads...

Verfasst: Montag 4. September 2006, 14:30
von sape
Welche Version von Eclipse und welches Python-PlugIn für Eclipse benutzt du? Hab solche Probleme nämlich nicht.

EDIT: Ja stimmt ist echt Off Topic! Schick mir mal ne PM.

B2T

Verfasst: Montag 4. September 2006, 19:09
von Leonidas
XtraNine hat geschrieben:Das gute an Eclips ist aber das es halt für zimmlich alle Programmiersprachen PIs gibt und es sehr mächtig vom Funktionsumfang ist :) Man kann sich in Eclips sogar eigene Syntax highlighting PIs (für eigen Sprachen) Programmieren.
Das als Vorteil von Eclipse gegenüber Vim anführen zu wollen scheint mir keine so gute Idee zu sein. Mein guter, alter vim 6.3 aus Debian Sarge hat immerhin - out of the box - unterstützung für 409 Dateitypen der verschiedensten Programmiersprachen. Natürlich kann man auch eigene hinzufügen, aber warum, wenn vim doch alles kann? An diesem Punkt ist vim schwer zu schlagen.

Verfasst: Montag 4. September 2006, 21:11
von mitsuhiko
Leonidas hat geschrieben:
XtraNine hat geschrieben:Das gute an Eclips ist aber das es halt für zimmlich alle Programmiersprachen PIs gibt und es sehr mächtig vom Funktionsumfang ist :) Man kann sich in Eclips sogar eigene Syntax highlighting PIs (für eigen Sprachen) Programmieren.
Das als Vorteil von Eclipse gegenüber Vim anführen zu wollen scheint mir keine so gute Idee zu sein. Mein guter, alter vim 6.3 aus Debian Sarge hat immerhin - out of the box - unterstützung für 409 Dateitypen der verschiedensten Programmiersprachen. Natürlich kann man auch eigene hinzufügen, aber warum, wenn vim doch alles kann? An diesem Punkt ist vim schwer zu schlagen.
Ich häng noch ein paar Dinge an: Mein Vim kann mir problemlos 20 Dateien in den Buffer laden, ich kann schnell hin und herschalten. Kann das Fenster mit einem Befehl beliebig Teilen. Ein und die selbe Datei zweimal öffnen, er greift automatisch auf den Buffer zurück und sozusagen den Dateiheader und die unten liegenenden Funktionen vergleichen. Kann mit einem Befehl Marker setzten und wieder ansprechen. Mit einem Befehl mit regulären Ausdrücken ersetzen. Bei Bestimmten Aktionen scripts triggern (buffer geschrieben, buffer gelesen etc), Kann in allen encodings dieser Welt speichern, automatisch die -*- coding: deklarationen -*- einlesen etc.
Nie wieder ohne vim sag ich da nur.

Verfasst: Montag 4. September 2006, 22:18
von sape
@Leonidas:
@blackbird:


Und worauf wollt ihr hinaus?

Hab doch nur ein Tipp gegebne und wollte hier keine Grundsatzdiskussion auslösen :)


Wenn der Tipp nicht gut von mir war ist ja OK. Man muss ja nicht gleich so mit der Tür ins Haus fallen mit aussagen wie:
Das als Vorteil von Eclipse gegenüber Vim anführen zu wollen scheint mir keine so gute Idee zu sein.
Leonidas, Wo genau hab ich das den behauptet dass es ein Vorteil von Eclipse gegenüber VIM wäre?
Ich habe lediglich gesagt:
Das gute an Eclips ist aber das es halt für zimmlich alle Programmiersprachen PIs gibt und es sehr mächtig vom Funktionsumfang ist :) Man kann sich in Eclips sogar eigene Syntax highlighting PIs (für eigen Sprachen) Programmieren.
Das ist doch ein ganz einfach aussage von mir die beinhaltet das ich Eclipse gut finde und diese Eigenschaft und noch andere sehr schätze :). Dort ist nirgends was zu lesen das es besser oder ein Vorteil gegenüber Vim hätte! ;)


Aber aus eurer Reaktion kann man sehr gut deuten das ihr euch anscheinend Indirekt angegriffen fühlt (aus welchen gründen auch immer). Hmmm, da fällt mir Spontan der Begriff Fanboy ein ;) Ihr wisst? Mein Auto ist besser als deins weil es mehr PS hat mehr Extras und so weiter -> Auf dein Beispiel bezogen:
Mein guter, alter vim 6.3 aus Debian Sarge hat immerhin - out of the box - unterstützung für 409 Dateitypen der verschiedensten Programmiersprachen. Natürlich kann man auch eigene hinzufügen, aber warum, wenn vim doch alles kann? An diesem Punkt ist vim schwer zu schlagen.
Alles klar? Wiest ihr worauf ich hinaus will? So was kann man vielleicht von nem Giga.de Forum wo nur Kidis rumhängen erwarten aber doch nicht von einem Angeblichen Seriösen Forum wie hier, wo sich scheinbar Intellektuelle Programmiere rum treiben!

Also ehrlich wenn ihr alle neue User mit gekränkten Stolz (und Fanboy gehabe) begrüßt, kann diese (eigentlich gute) Community auch nicht wachsen ;)

Wie gesagt ich wollte keinen Vergleich zwischen Eclipse und Vim machen sondern nur sagen das mir Eclipse gut gefällt und es eben die Funktion des Collapsen von Funktionen und Klassen bietet und noch andere. Wollte damit nur helfen und nicht mehr…Ihr seit aber nun der Meinung das ihr mit der "meines ist besser"–Mentalität reagieren müsst? Hmmm, Traurig…

Was sagt den eigentlich der gerold dazu? (An dieser stelle vielen dank für deine sehr kompetenten Post und dein Hilfsbereitschaft. Viel deine Posts haben mir shcon ebi etlichen Problemen geholfen :) )

Am besten fangen wir noch mal von vorne an und nimmt einen neune User mit dem Respekt in eure Community auf den man zu erwarten hat. Dazu gehört das man erstmal den Neuzugang höflich begrüßt, so wie es sich im allgemeinen in der Gesellschaft gehört, und nicht so wie bisher ;)

lg

Verfasst: Montag 4. September 2006, 22:53
von BlackJack
Ich versteh's auch nicht so recht. Eclipse... vim...

Emacs ist der einzig wahre Editor! Alles fehlgeleitete Irre hier. :twisted:

Verfasst: Dienstag 5. September 2006, 06:44
von midan23
Leute, nichts für ungut, aber diese ganze Diskussion zum Thema "mein Editor ist der Beste, der Rest taugt nichts" hat hier nichts verloren ...
(Meiner Meinung nach ist ein Editor nur ein Werkzeug, und da sollte jeder das nehmen, mit dem er am Besten klar kommt ...)

Ich wollte nur wissen, wie ich VIM beibringen kann, Dekoratoren zu falten.

Verfasst: Dienstag 5. September 2006, 07:16
von mitsuhiko
midan23 hat geschrieben:Ich wollte nur wissen, wie ich VIM beibringen kann, Dekoratoren zu falten.
Soll er dann den Dekorator in der Faltung anzeigen oder die Funktion?

@XtraNine: Da fehlten ein paar Smilies. :roll:

Verfasst: Dienstag 5. September 2006, 09:33
von midan23
Nochmal mein Ziel in Kürze:
  • Klassen:
    • - Jede Klassendefinition ist eine Faltung
      - Als gefalteter Text wird angezeigt:
      • + Anzahl Zeilen
        + der komplete Text von "class" bis zum ":" (einschliesslich)
    Funktionen ohne Dekorator(en):
    • - Jede Funktion, egal ob alleinstehend oder als Methode innerhalb eine Klasse, ist eine Faltung
      - Als gefalteter Text wird angezeigt:
      • + Anzahl Zeilen
        + der komplete Text von "def" bis zum ":" (einschliesslich)
    Funktionen mit Dekorator(en):
    • - Jede Funktion ist eine Faltung, inklusive Dekorator(en)
      - Als gefalteter Text wird angezeigt:
      • + Anzahl Zeilen
        + def komplete Text von "def" bis zum ":" (einschliesslich)
Die ersten beiden Punkte hab ich schon, nur der Dritte fehlt noch ...

Ich schätze, fürs Anzeigen der gefalteten Texte wird eine VIM-Funktion notwendig sein ...
Wie ich die Dekoratoren mit in die Faltung bekomme ... keine Ahnung ...

Verfasst: Dienstag 5. September 2006, 10:03
von N317V
XtraNine hat geschrieben:Das ist doch ein ganz einfach aussage von mir die beinhaltet das ich Eclipse gut finde und diese Eigenschaft und noch andere sehr schätze :)
Danach hat aber niemand gefragt. Es dennoch bei einer Frage nach VIM kund zu tun wird (für mich durchaus nachvollziehbar) als Mein-Editor-Ist-Besser-Als-Deiner ausgelegt. Bleib einfach beim Thema, dann ist alles chic. Sei mal ehrlich: der Wechsel des Editors ist wohl die allerletzte Lösung für so ein Problem. Normalerweise versucht man erstmal seinem Lieblingseditor die entsprechende Funktionalität zu entlocken. Genau darauf zielte offensichtlich die Frage ab. Schön, dass Du ein Werkzeug gefunden hast, das Dich so begeistert. Zur Sache tut das hier aber nichts. Das siehst Du hoffentlich ein.

Ansonsten und von meiner Seite: willkommen im Forum! :)

Verfasst: Dienstag 5. September 2006, 14:44
von mitsuhiko
midan23 hat geschrieben:Ich schätze, fürs Anzeigen der gefalteten Texte wird eine VIM-Funktion notwendig sein ...
Wie ich die Dekoratoren mit in die Faltung bekomme ... keine Ahnung ...
Schätze ich auch. Werd heute nachdem ich mein Notebook wieder hab mal versuchen da was zu basteln.

Verfasst: Dienstag 5. September 2006, 19:13
von Leonidas
XtraNine hat geschrieben:@Leonidas:
@blackbird:


Und worauf wollt ihr hinaus?
Ich weiß nicht auf was blackbird hinaus will, aber ich will nur, dass du vim gerecht wirst. Bei dir klang das nämlich so, als ob Eclipse Synatxhighlighting besonders gut kann, im gegensatz zu vim (weil das hier eine vim-Diskussion ist, hast du Eclipse reingeworfen).
XtraNine hat geschrieben:Hab doch nur ein Tipp gegebne und wollte hier keine Grundsatzdiskussion auslösen :)
Ich habe auch nur deine Aussage relativiert, die Diskussion hast du mit diesem Posting losgetreten.
XtraNine hat geschrieben:Wenn der Tipp nicht gut von mir war ist ja OK. Man muss ja nicht gleich so mit der Tür ins Haus fallen mit aussagen wie:
Das als Vorteil von Eclipse gegenüber Vim anführen zu wollen scheint mir keine so gute Idee zu sein.
Wow, ja, ich bin mit der Tür ins Haus gefallen. Echt. Fatal. Ich bitte dich, aber wenn du so eine Aussage (die sogar für mein niveau mild ist), dann lies blos keine Postings von ModelNine.
XtraNine hat geschrieben:Leonidas, Wo genau hab ich das den behauptet dass es ein Vorteil von Eclipse gegenüber VIM wäre?
Ich habe lediglich gesagt:
Das gute an Eclips ist aber das es halt für zimmlich alle Programmiersprachen PIs gibt und es sehr mächtig vom Funktionsumfang ist :) Man kann sich in Eclips sogar eigene Syntax highlighting PIs (für eigen Sprachen) Programmieren.
Ja. Aber ich kann auch sagen: "Das gute an vim ist aber das es halt für zimmlich alle Programmiersprachen PIs gibt und es sehr mächtig vom Funktionsumfang ist :) Man kann sich in vim sogar eigene Syntax highlighting PIs (für eigen Sprachen) Programmieren." Denn alles was du über Eclipse gesagt hast, ist auch für vim gültig. Noch dazu werden hier vim-Tipps gesucht. Wenn hier einer fragt, wie man ein Problem löst wird ihm ja auch nicht gesagt: "Also in Ruby geht das so...".
XtraNine hat geschrieben:Das ist doch ein ganz einfach aussage von mir die beinhaltet das ich Eclipse gut finde und diese Eigenschaft und noch andere sehr schätze :). Dort ist nirgends was zu lesen das es besser oder ein Vorteil gegenüber Vim hätte! ;)
Es ist aber als solches unweigerlich zu interpretieren - denn wenn du nicht meinen würdest dass Eclipse vorteile gegenüber vim hat, warum hast du es überhaupt angeführt? Wenn es keine Vorteile hat, dann ist es Offtopic.
XtraNine hat geschrieben:Aber aus eurer Reaktion kann man sehr gut deuten das ihr euch anscheinend Indirekt angegriffen fühlt (aus welchen gründen auch immer). Hmmm, da fällt mir Spontan der Begriff Fanboy ein ;) Ihr wisst?
An dieser schtelle fängt es mich ein wenig an zu nerven. Denn ich _relativere_ deine _Aussage_ und du willst mich als _Person_ angreifen (ok, zugegeben, angreifen ist natürlich ein zu hartes Wort aber ein anderes fällt mir leider nicht ein). Damit wird jede Fachdiskussion unmöglich.
XtraNine hat geschrieben:Auf dein Beispiel bezogen:
Mein guter, alter vim 6.3 aus Debian Sarge hat immerhin - out of the box - unterstützung für 409 Dateitypen der verschiedensten Programmiersprachen. Natürlich kann man auch eigene hinzufügen, aber warum, wenn vim doch alles kann? An diesem Punkt ist vim schwer zu schlagen.
Das hat nichts mit Fanboiismus zu tun, das ist eine objektive Aussage. Ich stelle fest, dass vim was die Anzahl der unterstützten Dateitypen schwer zu überbieten, was ich mit der Anzahl der Dateitypen belege. Behauptung und Beweis. Wo siehts du da Fanboyismus?
XtraNine hat geschrieben:Alles klar? Wiest ihr worauf ich hinaus will?
Leider nicht. Ich glaube (das ist meine Einschätzung) du fühlst dich auf den schlips getreten, weil ich deine Aussage negiert habe - aber jeder macht auch mal Fehler, da ist doch nichts dabei. Ich mache auch kein Aufhebens darum, dass BlackJack oder birkenfeld oder mitsuhiko irgendwie belegen das meine Aussage falsch ist - da geht es um Fachthemen und wenn die anderen Recht haben, dann haben sie halt recht und man hat wieder etwas gelernt.
XtraNine hat geschrieben:So was kann man vielleicht von nem Giga.de Forum wo nur Kidis rumhängen erwarten aber doch nicht von einem Angeblichen Seriösen Forum wie hier, wo sich scheinbar Intellektuelle Programmiere rum treiben!
Das Forum ist nicht "angeblich seriös". Wenn du es als seriös ansiehst freut es mich, wenn nicht dann eben nicht.
XtraNine hat geschrieben:Also ehrlich wenn ihr alle neue User mit gekränkten Stolz (und Fanboy gehabe) begrüßt, kann diese (eigentlich gute) Community auch nicht wachsen ;)
Ich finde nicht das mitsuhiko oder ich midan23 mit unseren Aussagen in irgendeiner weise schlecht begrüßt haben - wir haben durchaus versucht, ihm bei seiner Problemstellung zu helfen.
XtraNine hat geschrieben:Am besten fangen wir noch mal von vorne an und nimmt einen neune User mit dem Respekt in eure Community auf den man zu erwarten hat. Dazu gehört das man erstmal den Neuzugang höflich begrüßt, so wie es sich im allgemeinen in der Gesellschaft gehört, und nicht so wie bisher ;)
Öhm bitte? Sag mir doch bitte, _wo_ auch nur irgendwer von uns midan23 oder irgendeinen der anderen Neuzugänge respektlos behandelt hat. Ok, ich habe zwar vergessen das "Hallo midan23, willkommen im Forum" zu schreiben, aber ist das nun eine Respektlosigkeit?

Naja, ich denke nicht dass es sinnvoll ist diese Diskussion weiterzuführen, und man mag mir recht geben oder nicht. Dennnoch finde ich, musste ich noch eine Antwort schreiben um auf (meines Ermessens ungerechtfertigte Anschuldigungen) zu reagieren.

Aber was mich dennoch, trotz allem nun interessieren würde: kann Eclipse eigentlich den Code so einrücken wie midan23 es möchte?

Verfasst: Dienstag 5. September 2006, 22:56
von sape
blackbird hat geschrieben:{…}
@XtraNine: Da fehlten ein paar Smilies. :roll:
Weiß zwar nicht was du damit ausdrücken willst bzw. ob das Ironisch von dir gemeint ist, will mich aber trotzdem für mein Posting entschuldigen.

@Leonidas: OK, da haben wir ja beide zu viel hineininterpretiert. An dieser Stelle will ich mich für mein Post bei dir und blackbird entschuldigen.
Aber was mich dennoch, trotz allem nun interessieren würde: kann Eclipse eigentlich den Code so einrücken wie midan23 es möchte?
Soweit ich das verstanden habe will er Funktionen und Klassen Collapsen; Also zusammen klappen damit nur der Name der Funktion und der Klasse sichtbar ist und der Rumpf halt nicht. Das alles geht sehr gut damit. Es gibt sogar eine Funktion mit der man alle Funktionen und Klassen gleichzeitig zusammenklappen lassen kann :) Ob die Funktion, dass man alle Klassen und Funktionen gleichzeitig Collapsen kann, Standard ist bei den Editoren weiß ich nicht. Hab mit Vim auch noch nicht gearbeitet, aber ich denke das geht bestimmt damit auch.
N317V hat geschrieben:
XtraNine hat geschrieben:Das ist doch ein ganz einfach aussage von mir die beinhaltet das ich Eclipse gut finde und diese Eigenschaft und noch andere sehr schätze :)
Danach hat aber niemand gefragt. Es dennoch bei einer Frage nach VIM kund zu tun wird (für mich durchaus nachvollziehbar) als Mein-Editor-Ist-Besser-Als-Deiner ausgelegt. Bleib einfach beim Thema, dann ist alles chic. Sei mal ehrlich: der Wechsel des Editors ist wohl die allerletzte Lösung für so ein Problem. Normalerweise versucht man erstmal seinem Lieblingseditor die entsprechende Funktionalität zu entlocken. Genau darauf zielte offensichtlich die Frage ab. Schön, dass Du ein Werkzeug gefunden hast, das Dich so begeistert. Zur Sache tut das hier aber nichts. Das siehst Du hoffentlich ein.
OK das mag wohl stimmen. Ja hast sogar Recht, ist nicht gerade die beste Lösung einen anderen Editor vorzuschlagen. Hatte ich in den Moment nicht dran gedacht

N317V hat geschrieben: Ansonsten und von meiner Seite: willkommen im Forum! :)
Danke :)

Verfasst: Mittwoch 6. September 2006, 07:57
von mitsuhiko
blackbird hat geschrieben:Schätze ich auch. Werd heute nachdem ich mein Notebook wieder hab mal versuchen da was zu basteln.
Hmm. Jetzt hab ich leider ein kleines Problem mit meiner Festplatte deren Elektronik gestern den Geist aufgegeben hat :-( Aber grundsätzlich müsstest du nur GetPythonFold Funktion eine Regex für Dekoratoren hinzufügen (if line =~ '^\s*@[a-zA-Z_]'). Nur hab ich noch nicht herausen wie man dann den Angezeigten Text auf die Funktionsdefinition setzt :-(