Also im prinzip stimmen diese 4 Punkte davon ja auch auf vim
Stimmt, darum empfehle ich ja auch Vim direkt unter den 4 Punkten. Wie Du sagst: Der Ferrari und der Lamborghini...
, und das mit der erweiterbarkeit versteh ich nicht wo der vorteil von emacs ist.
Dann versuche ich es nochmal zu erklaehren wie ich das meine:
Mit vim kann ich in 4 Sprachen den editor erweitern (vimscript, ruby, perl, python) und sogar library functions von .so/.dll's callen.
Also wo ist bitte vim jetzt unscriptbarer fuer den otto-normalo, der sich halt nicht gern in eine sprache wie lisp einlernt,
sondern auch mit ruby other python zufrieden ist?
Also otto-normalo kann sicher kein ruby und auch kein Python Wer seinen Texteditor mit Skripten erweitern will, und wer bereits Ruby oder Python kennt, der wird auch keine Schwierigkeiten mit Lisp haben.
Und "Ich erweitere Vim mit Ruby" klingt in der Theorie viel schoener als es in der Praxis ist: Schau mal bei vim.org, wie viele Scripts in Vimscript und wie viele in Ruby oder Python geschrieben sind. Als ich noch Vim verwendet habe, waren fast alle Erweiterungen fuer Vim in vimscript geschrieben. Warum das so ist ist ganz klar: Wenn Du Dein Script in Ruby schreibst, dann hast Du eine zusätzliche Abhängigkeit, über die viele nicht verfügen. Außerdem ist es schwer fuer jemanden Code zu bearbeiten, wenn der in 3 verschiedenen Sprachen geschrieben ist. Darum muss man schon einen wirklich guten Grund haben, aus dem man seinen Code in Ruby veröffentlicht.
Und das Verteilen vom Code finde ich ungemein wichtig. Ich habe in meinem Emacs zwar schon einige Zeilen code selber geschrieben, aber die meisten Aenderungen sind von irgendwoher genommen. Und nicht nur das: Ein Großteil des Codes, der heute mit Emacs ausgeliefert wird, war ursprünglich mal als externer Code verfügbar. So funktioniert Emacs Development seit über 25 Jahren: Die Core developer nehmen Code, den viele bereits im Emacs verwenden und binden ihn in die Core Distribution ein. Dabei ist der Portierungsaufwand voellig minimal, den der Code ist ja gar keine wirkliche Erweiterung des Editors. Es ist genau genommen eine Aenderung an der Software direkt.
Wie ist das bei Vim? Jemand schreibt ein nützliches Plugin und stellt es irgendwo online. Jemand anders laed es sich herunter kann es über einen Pluginmechanismus aufrufen oder an ein Keyboardevent knüpfen. Es gibt aber eine ganz strikte Trennung zwischen Einem Plugin und dem C-Code, in dem Vim geschrieben ist.
Ich hoffe Du siehst den direkten Unterschied. Dein Plugin kann nur genau das machen, was die API zulässt. Und das Ergebnis ist Fremdcode und keine Aenderung. Wenn ich in Emacs z.b. die interne Dokumentation durchsuche, dann wird mein Code genauso gefunden wie der von Richard Stallman. Ich kann aus der Doku direkt auf den Sourcecode zugreifen, egal ob der Code von mir oder von einem Core Developer geschrieben wurde. Ich kann den Code direkt verändern oder überschreiben, und meine Abänderungen werden dynamisch geladen und sind sofort sichtbar. Wenn der Python-mode etwas macht was ich nicht will, dann ändere ich das einfach. Und wenn ich möchte das Emacs meinen Haskell code beim Speichern validiert, dann ändere ich einfach die Funktion, die beim Speichern aufgerufen wird so, das sie Haskell Dateien erst zu kompilieren versucht und mich warnt wenn das nicht klappt.
Ich weiß nicht genau was alles mit Vims API moeglich ist und was nicht. Aber es ist logisch, das es da immer natürliche Grenzen geben muss, die es bei Emacs nicht gibt.
Und nur, weil vim-user halt lieber gescheite sachen scripten statt ein tetris-in-vim find ich das jetzt keinen nachteil.
Der einzige Grund warum Emacs heute mit so Zeug wie Tetris oder einem Eliza Programm ausgeliefert wird ist Nostalgie: Emacs hat seinen Ursprung im Labor für künstliche Intelligenz am MIT, und Eliza oder Life sind aus nostalgischen Gründen in der Codebasis geblieben. OK, gerade Tetris ist schon später dazugekommen, ich vermute um zu zeigen wozu Emacs fähig ist. Aber es gibt keinen Grund dafuer kein Tetris in seinem Texteditor zu haben. Und wenn dir doch einer einfällt, dann kannst Du es auch einfach herausnehmen.
Das Emacs mehr kann, als man fuers reine Text editieren braucht stört nicht und hat sogar manchmal Vorteile: Ich habe z.B. nie verstanden, warum mein Emacs Bilder anzeigen können muss. Aber jetzt gibt es jemanden der dieses Feature benutzt um PDF Dateien im Emacs anzuzeigen. Z.b. im Latex mode ist das ein feines Feature: z.B. wenn man, während man in den Tex-Buffer schreibt, das PDF im rechten Screen automatisch immer wieder neu generieren lässt.
Zitat
EDIT: aja, ein feature das ich unter vim nicht mehr missen will sind ad-hoc macros mit q. also wenn ich z.b. sachen refaktorisieren will, muss ich nicht auf regexps zurueckgreifen, weil das nciht immer moeglich ist, oder extra ein lisp script schreiben.
Wenn ich z.b. oeftesr in einem file:
Class *foo = new Class();
foo->execute();
habe, und es in:
Class foo;
foo.init();
umwandeln will, geh ich mit dem cursor an den anfang und drueck:
qqf*xfndwj0f-xr.0q und hab ein schnelles macro dafuer, das ich mit @q (bzw. @@ beim 2. mal) abspielen kann, und dann bei jeder stelle, wo ich das schnell aendern will einfach abspiele. Sicher kann ich das auch irgendwie mit regexps machen, nur befor ich mir die ueberlegt hab, bin ich sicher so schon 10x schneller fertig.
Gibts sowas bei emacs eigentlich auch (denk schon), frag mich nur wie das geht?
Alles anzeigen
Emacs hat so ziemlich das gleiche Makrosystem wie Vim. Also Macros ad-hock aufzeichnen, speichern & wiederaufrufen usw. Die Macros funktionieren auf alles was Du im Emacs machst, also Du kannst z.B. auch während des Macros zwischen den Buffern switchen oder im Filesystem herumwerkeln und das wird mit-aufgezeichnet.
Interessant wird es, wenn man z.B. ein Terminal aus Emacs heraus verwendet: Ich kann z.B. ein Macro starten, dann irgendwas in der Shell machen, und dann wiederholt das Macro auch das. Ich kann aus einem Macro heraus Emails versenden und/oder bloggen. Ich kann sogar meine Tetris moves als Macro aufzeichnen
Was mir noch zu Macros einfällt, das in Vim eh genauso geht, aber in vielen andern Editoren die Macros unterstützen nicht: Man kann so Features wie Suche oder die relativen Navigationsfunktionen sehr gut verwenden, um Macros konsistent zu halten. Also z.B. "Suche nach dem Begriff 'Foo', gehe an das Ende eines Satzes, capitalize die letzten 3 Woerter aus der Zeile und lösche alle weiteren Zeilen bis zum nächsten 'Bar' . Sehr praktisch ist das.