C++ mit vi(m) nutzen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

C++ mit vi(m) nutzen

Beitrag von Duff » 27.12.2008 12:33:23

Hallo,

ich lese mich zur Zeit in C++ ein (Buch C++ von A bis Z) und arbeite bzw. schreibe die "Programm" mit vi(m). Da ich mich mittlerweile im Kapitel zur OOP und Klassen befinde, würde ich gerne wissen, wie ich im vi(m) dazu bringe, dass ich beim eintippen von Objekten im Hauptprogramm auch alle entsprechenden Methoden als Auswahl angezeigt bekomme.

Beispiel im Hauptprogramm:

Es existiert eine Klasse Mensch und nun erzeuge ich ein Objekt person1.

Mensch person1;

Nun greife ich auf die Methoden aus mensch.cpp wie folgt zu:

person1.print();
// oder
person1.get_name();
//...


Ich würde nun gerne nach Eingabe von

person1.

alle vorhandenen Methoden angezeigt bekommen.

Ist dies möglich?
Und wenn ja, wie?


Danke & Gruß,
Daniel
Oh, yeah!

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: C++ mit vi(m) nutzen

Beitrag von GoKi » 27.12.2008 12:49:04

Ich schreibe zwar auch in vim, aber ich nutze eigentlich nur das normale CTRL-P bzw. N. Was gut funktioniert, da ich normalerweise auch noch den Header geöffnet habe.

Für das Verhalten, das Du haben möchtest, kannst Du mal OmniCppComplete anschauen.
http://www.vim.org/scripts/script.php?script_id=1520
http://vim.wikia.com/wiki/C%2B%2B_code_completion
MfG GoKi
:wq

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: C++ mit vi(m) nutzen

Beitrag von Duff » 27.12.2008 13:14:15

Danke, werde mir die Links mal anschauen, aber was meinst du genau mit:
GoKi hat geschrieben:Ich schreibe zwar auch in vim, aber ich nutze eigentlich nur das normale CTRL-P bzw. N. Was gut funktioniert, da ich normalerweise auch noch den Header geöffnet habe.
Was genau machst du und was meinst du mit "Header-Datei geöffnet"?
Oh, yeah!

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: C++ mit vi(m) nutzen

Beitrag von GoKi » 27.12.2008 13:42:39

Ich nutze mehrere geöffnete Buffers in vim, d.h. ich habe gleichzeitig mensch.cpp, mensch.h und main.cpp geöffnet. Dann tippe ich z.B. person1.ge<CTRL-P> und sehe dann zur Auswahl alle Wörter, die mit "ge" beginnen, bspw. getAlter, getName. Ich bekomme aber auch Wörter angezeigt, die keine Methoden der Klasse Mensch sind. Dies stört mich jedoch nicht sonderlich.
Ich wollte damit eigentlich nur sagen, dass ich OmniCppComplete nicht benutze.

Allgemein nutze ich noch einige Plugins, die - wie ich finde - die Arbeit etwas erleichtern. z.B. NERDtree (Dateibrowser in vim), NERDcommenter (auskommentieren von mehreren Zeilen auf einmal), a.vim (Wechseln zwischen cpp/h), minibufexpl.vim (Anzeige alle geöffneten Buffers), copycppdectoimp.vim (Funktionsdeklaration aus dem Header ins cpp übernehmen).
MfG GoKi
:wq

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: C++ mit vi(m) nutzen

Beitrag von Duff » 27.12.2008 14:07:39

Das hört sich sehr interessant an.

Wie kann ich sowas denn auch bei mir realisieren?

Bisher habe ich folgende Pakete installiert:

Code: Alles auswählen

root@daniel-laptop:~# dpkg -l|grep vim
ii  vim-common                              1:7.1.314-3+lenny2              Vi IMproved - Common files
ii  vim-doc                                 1:7.1.314-3+lenny2              Vi IMproved - HTML documentation
ii  vim-full                                1:7.1.314-3+lenny2              Vi IMproved - enhanced vi editor (transition
ii  vim-gnome                               1:7.1.314-3+lenny2              Vi IMproved - enhanced vi editor - with GNOM
rc  vim-gtk                                 1:7.1.314-3+lenny2              Vi IMproved - enhanced vi editor - with GTK2
ii  vim-gui-common                          1:7.1.314-3+lenny2              Vi IMproved - Common GUI files
ii  vim-runtime                             1:7.1.314-3+lenny2              Vi IMproved - Runtime files
rc  vim-tiny                                1:7.1.314-3+lenny2              Vi IMproved - enhanced vi editor - compact v
Oh, yeah!

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: C++ mit vi(m) nutzen

Beitrag von Meillo » 27.12.2008 14:29:14

[OT]
Solche Features führen ja doch nur zu elend langen Methodennamen und riesigen Klassen.
Wenn Klassen überschaubar sind weiß man auswendig welche Methoden sie bieten. Wenn Bezeichner kurz sind, spart es auch keine Tipparbeit.
Meist ist es also sinnvoller sich gute Programmiergewohnheiten anzueignen, statt sich auf Helferlein zustützen, die zu schlechen Angewohnheiten führen.

Diese Anmerkung zum drüber nachdenken, _nicht aber_ zum losflamen.
[/OT]
Use ed once in a while!

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: C++ mit vi(m) nutzen

Beitrag von GoKi » 27.12.2008 14:48:57

Die genannten Plugins findest Du alle auf der vim Homepage in der Scripts-Rubrik.
http://www.vim.org/scripts/index.php
Oder einfach per Google. Auf der Seite des jeweiligen Plugins steht meistens beschrieben, wie es zu installieren ist (üblicherweise nach ~/.vim/plugins kopieren).

Bzgl der Anmerkung von Meillo:
Natürlich sollte man trotzdem bemüht sein kurze, aussagekräftige Methodennamen zu benutzen. Ich finde jedoch, dass schon alleine CTRL-P/N einfach viel Tipparbeit sparen kann. Künstlich kurze Methoden/Variablennamen helfen nicht, wenn man den Code auch noch nach mehreren Jahren wieder verstehen und anpassen muss.
Auch Tools wie doxygen oder ähnliches mögen sinnvoll sein. Wobei ich sagen muss, dass ich kein Softwarearchitekt bin. Vielleicht kenne ich deshalb nicht alle Methodennamen der über 800 Klassen in meinem Hauptprojekt.... :D
Letztendlich sollte jeder den für sich besten Weg finden.
MfG GoKi
:wq

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: C++ mit vi(m) nutzen

Beitrag von Duff » 27.12.2008 17:34:33

Ok, danke.

Habe mal die Sachen aus den Links installiert und konfiguriert.

Wenn ich aber jetzt in der main.cpp darauf zugreifen will, bekomme ich immer sowas:

Code: Alles auswählen

// main.cpp
#include "mensch.h"

int main(void) {
   Mensch person1( "Adam", 22, Mensch::MANN,
                   "Hund", "Dackel", "Waldi");
   Haustier cat( "Katze", "Perser", "Minzi" );
   Mensch person2( "Eva",19, Mensch::FRAU, cat );
   Mensch person3;

   cout << "Menschen: "
        << Mensch::get_anzahlMensch() << '\n';
   {
      Mensch person4;
      Mensch person5;
      cout << "Menschen: "
           << Mensch::

   }
   return 0;
}
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
-- Omni-Ergänzung (^O^N^P) Muster nicht gefunden
Muster nicht gefunden. Aber wieso?
Das ^O bedeutet doch STRG+O?
Oh, yeah!

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: C++ mit vi(m) nutzen

Beitrag von Meillo » 27.12.2008 17:45:25

Duff hat geschrieben:

Code: Alles auswählen

~                                                                                                                                   
~                                                                                                                                   
-- Omni-Ergänzung (^O^N^P) Muster nicht gefunden
Muster nicht gefunden. Aber wieso?
Ich vermute du musst die `mensch.h' gleichzeitig offen haben.

Code: Alles auswählen

:sp mensch.h
Das ^O bedeutet doch STRG+O?
Ja.
Use ed once in a while!

Antworten