Vim lernen
-
Hallo,
ich wurde beim Programmieren in C++ bisher immer von Visual Studio verwöhnt (besonders mit dem integrierten Debugger, Go to Definition etc.), aber jetzt, wo ich mal ausschließlich auf Linux arbeiten will, muss ich sagen, dass mich hier jede IDE nur ankotzt (hab Code::Blocks, CodeLite und Eclipse probiert).
Jetzt will ich mir mal Vim angewöhnen, allerdings braucht man da ja ein paar Erweiterungen, damit man damit effektiv C++ programmieren und debuggen kann.
Daher meine Frage: Soll ich erst mal so lange ohne Erweiterungen in Vim programmieren, bis mir die elementarsten Shortcuts ins Blut übergegangen sind oder gleich allerlei Sachen installieren?Ich habe Sorge, wenn ich ersteres mache, dass ich dann nach der Installation neuer Plugins schon wieder von vorne anfangen muss mit dem "Training".
-
ich bin nicht qualifiziert auf diese frage zu antworten. hab weder diplom noch fachinformatik-abschluss.
-
aber hier trotzdem meine meinung:
binde escape auf deine capslock-taste, die ist nämlich nur in flamewars nützlich, escape hingegen wird in vim oft benötigt. es gibt zwar andere möglichkeiten den einfügemodus zu verlassen (ctrl+c wird standardmäßig unterstützt), aber die sind umständlicher zu erreichen. die escape-taste auf der adm3a-tastatur des ursprünglichen vi-entwicklers lag übrigens an der stelle, an der wir heute tab finden, also auch viel einfacher erreichbar.
-
Ich habe mir vim sehr schnell angewöhnt, als ich damit arbeiten musste. Mit der grundlegenden Bedienung hatte ich nach 2-3 Tagen keine Probleme mehr.
Die meisten Plugins sollten dabei jetzt nicht wirklich stören. Spiel vielleicht paar Tage damit rum, bis du damit vernünftig "tippen" kannst, dann kannst dir gleich paar Plugins installieren.
-
Wie kann man von Visual Studio verwöhnt sein, hat das jetzt die einfachsten Sachen wie Kommentar-Toggle und Refactoring, so wie fast alle OpenSource IDEs?
Vim ist ganz nett, wenn man drinne ist. Allerdings haben viele IDE eine VI-Modus, aber meist reichen auch die ganzen eingebauten Sachen wie Zeilen/Selektionen kopieren/verschieben, Wörter löschen, überspringen etc. Das sind ja alles x-beliebige Editorfunktionen, die über Shortcuts ganz schnell anwählbar sind.
Letztendlich hatte ich immer das Gefühl das Vim zu einer IDE umfunktioniert wird, die im Endeffekt irgendwie doch schlechter als z.B. Codelite ist, vor allem beim Debugging.
Wenn man aber wirklich nur die nackte Konsole hat, also über Telnet z.b. dann ist Vim super. Wer auf dem Desktop arbeitet kann sich meiner Meinung nach Vim komplett sparen.
Machen fahren aber total darauf ab, warum auch immer.
-
(Disclaimer: Ich beziehe mich auf Emacs, nehme aber an, dass das für vim ähnlich gilt)
Vim/Emacs wie eine IDE benutzen zu wollen, geht meistens schief, weil IDEs halt ein anderes Bedienkonzept haben.
Anstatt dich durch eine GUI mit Refactoring-Optionen zu klicken schreibst du in Emacs schnell ein Skript, das die entsprechenden Replacements selber ausführt. Geht in C++ teilweise auch gar nicht anders, wenn Funktionen umbenannt werden, die in Templates benutzt werden. Anstatt goto definition oder next use of variable reicht oft eine einfache Suche.
Ein Programm hat genaue eine Funktion. Grafische Dokumentation mit UML-Diagrämmchen anschauen kannst du im Browser nebenan. Debuggen (wenn man's denn mal braucht) geht direkt an der GDB-Kommandozeile auch wenn Emacs da einiges an zusätzlichen Features bietet.
Das heisst nicht, dass Autocomplete und andere IDE-Features nicht nützlich wären, aber was du genau brauchst kannst du erst mit etwas Erfahrung sagen und das Aufsetzen braucht auch teilweise etwas Erfahrung.
Deshalb würde ich erst einmal den Editor-Workflow (mit "Workarounds" für deine vermissten Features) lernen, bis du ihn mehr oder weniger "beherrschst" (also mind. 1 Woche). Kenntnis davon brauchst du sowieso und erst dann kannst du entscheiden, was genau du brauchst.
-
Jodocus schrieb:
[…] Soll ich erst mal so lange ohne Erweiterungen in Vim programmieren, bis mir die elementarsten Shortcuts ins Blut übergegangen sind oder gleich allerlei Sachen installieren?
Ich habe Sorge, wenn ich ersteres mache, dass ich dann nach der Installation neuer Plugins schon wieder von vorne anfangen muss mit dem "Training".
Gleich auf Plugins setzen. Vim und (noch mehr) emacs sind "nackt" als Entwicklungsumgebung wenig geeignet (und auch nicht gedacht). Für den Einstieg google nach "learn vim progressively" und mach dich mit der Hilfefunktion vertraut. Nimm einen Zettel und schreib die wichtigsten 10 Shortcuts drauf. Sache erledigt.
Auf vimawesome findest du Plugins. Meine Minimal-Empfehlung:
- youcompleteme (code completion)
- ultisnips (snippets)
- fugitive (git, sofern du es verwendest)
Zur Verwaltung der Pakete verwende ich Pathogen.Wenn du eine Seitenleiste mit den Projektdateien willst, dann nerd tree. Das ist aber imho der falsche Weg. ctrlp (fuzzy finder) spart auf längere Sicht Zeit. gundo (visual do/undo) ist dennoch nett anzusehen.
Du kannst auch nach "vim as a xyz ide" suchen und die Setups anderer bewundern.
PS: Der heisseste Tipps um die Basics zu lernen: Stell alles andere um. Es gibt z.B. für Chromium und Firefox Plugins, die vim shortcuts auf den Browser übertragen. (Unter FF verwende ich VimFx, das "übernimmt" nicht den ganzen Browser wie andere.) Du kannst auch vim Shortcuts im Terminal usw. verwenden.
Das Wichtigste ist, dich nicht zu verlaufen. Darum empfehle ich auch die ersten drei Viertel von "learn vim progressively". Alles andere kommt, wenn man es benötigt, d.h. eine triviale Aufgabe mehr als einmal von Hand löst.
-
vimoceros schrieb:
Ein Programm hat genaue eine Funktion.
Das trifft aber auf emacs nicht zu. Es ist sogar eines der wenigen (häufig genutzten) Programme, das sich zur Laufzeit selbst modifizieren lässt.
vimoceros schrieb:
Grafische Dokumentation mit UML-Diagrämmchen anschauen kannst du im Browser nebenan.
Emacs kann mit pdfs umgehen. Ich habe bis dato keinen anderen pdf-Viewer entdeckt, der auch nur halbwegs sinnvoll mit dem Keyboard zu bedienen wäre.
vimoceros schrieb:
Das heisst nicht, dass Autocomplete und andere IDE-Features nicht nützlich wären, aber was du genau brauchst kannst du erst mit etwas Erfahrung sagen und das Aufsetzen braucht auch teilweise etwas Erfahrung.
Verstehe ich nicht. Weshalb sollte jemand auf yasnippet und eine auto-completion Lösung verzichten? Die haben weder eine Lernkurve noch sind sie Luxus oder lenken gar ab. Der TE möchte ja keinen Editor, sondern eine IDE.
Installieren lassen sich neue Pakete einfach über packages.el. Wenn man .emacs anpassen muss, dann steht das meistens ganz oben in der Dokumentation.
-
Wow, vielen Dank für die zahlreichen Meinungen.
@f:
Hm, die Sache mit dem Capslock habe ich schon oft gelesen, aber meine Taste leuchtet dann blöd rum. Aber stimmt schon, ESC ist halt echt unbequem zu erreichen gemessen an der Häufigkeit, mit der man die Scheinbar in vim braucht.@VitC:
Klar kann man sich vim auch sparen, nur scheinbar muss ja was dran sein, sonst würden es ja nicht so viele nutzen. VS hat schon lange eine Funktion zum Ein-/Auskommentieren (zumindest schon ab VS 2008). Und wenn ich sehe, wie schnell Leute in vim durch den Code navigieren können, werde ich schon neidisch. Ich schreibe i.d.R. Code immernoch viel langsamer als ich ihn denken kann. Mit vim ist der Unterschied bestimmt kleiner.@ asdfgh..:
Also schrittweise vim ausbauen und eine Zeit lang sich an die Änderungen gewöhnen, bevor es weitergeht. Alles klar.
-
Jodocus schrieb:
VS hat schon lange eine Funktion zum Ein-/Auskommentieren (zumindest schon ab VS 2008). Und wenn ich sehe, wie schnell Leute in vim durch den Code navigieren können, werde ich schon neidisch. Ich schreibe i.d.R. Code immernoch viel langsamer als ich ihn denken kann. Mit vim ist der Unterschied bestimmt kleiner.
Klar kann man mit (vanilla) vim relativ schnell die nächsten 10 Zeilen auskommentieren, oder zum letzten Vorkommen der Funktion springen. Die Power kommt aber oftmals durch eigene scripts, macros oder Plugins. Z.B. nerd commenter zum schnellen Kommentieren oder irgendein Plugin um im eigenen Projekt schnell hin und her zu springen. Oder um Template-/Klassen-/Funktions- Gerüste zu erstellen. Oder für's sagenumwobene refactoring.
Das bringt vim alles nicht von Haus mit. Darum mein Rat: Plugins von Beginn an. Die wichtigsten Befehle auf einen Zettel aufschreiben und neben den Computer legen. Du wirst kaum mehr als 20 Shortcuts verinnerlichen müssen. Das ist nicht die Lebensaufgabe, als die es immer hingestellt wird.
Und wirklich produktiv wirst du, sobald du jeden unnötigen Tastenanschlag einsparst. Sprich automatisieren, automatisieren, …. (Das ist auch die Hürde an emacs. Lisp ist nicht weit verbreitet und emacs lisp ein eigenwilliger Dialekt.)
-
Achja, nutzen wirklich so viele Vim als IDE? Ich dachte, die sind eher in der Minderheit. Header/Source Switching und Funktionen zum Aufruf verfolgen etc. sind doch alles Standardgeschichten jeder IDE, genau wie Intellisense.
Ich bezweifle auch nicht das eingefleischte Vim-User schneller sind, nur verbringe ich die wenigste Zeit eigentlich mit Eingeben von Code, sondern mehr mit Fehlersuche, Analyse, Recherche, Planung, Tests usw.
Ich habe 3 Wochen lang jeden Tag ausgiebig Vim genutzt und auch ein paar schöne Seite und ein Buch(Practical Vim - Edit Text at the speed of tought) dafür zum Lernen benutzt. Letztendlich fand ich es angenehmer einfach mal was mit dem Touchpad(macbook) zu markieren usw. Cut, Copy und Paste über die normalen Tasten finde ich auch viel angenehmer als zu Yanken etc.
Zudem finde ich mal weg von der Tastatur zu kommen viel gesünder. Da Abwechslung für die Hände immer gut ist, auch wenn das Mehrarbeit ist, ist es einfach entspannter. Haltungswechsel ist immer sehr gesund und daher immer zu bevorzugen.
GDB habe ich auch schon so genutzt, das finde ich aber viel anstrengender als über eine IDE.
-
Ich würde ehrlich gesagt auch nicht ernsthaft mit vim entwickeln wollen. Da bin ich auch zu sehr Visual Studio gewohnt und da funktioniert Intellisense und Debugging nun mal sehr viel besser. Auch kann man schnell mit der Maus über irgendwas drüberfahren und sehen, was das ist.
Ich fand vim aber immer sehr praktisch, wenn ich mit Linux gearbeitet und so ein bisschen C und Perl programmiert habe.
-
VitC schrieb:
Achja, nutzen wirklich so viele Vim als IDE? Ich dachte, die sind eher in der Minderheit. Header/Source Switching und Funktionen zum Aufruf verfolgen etc. sind doch alles Standardgeschichten jeder IDE, genau wie Intellisense.
Klar ist es eine Minderheit, aber ich glaube nicht, dass die nur aus Fanatics besteht. Ich muss mal ein paar Monate nur mit vim arbeiten, danach kann ich mir denke ich schon ein eigenes Urteil erlauben, ob es das Wert ist.
VitC schrieb:
Ich bezweifle auch nicht das eingefleischte Vim-User schneller sind, nur verbringe ich die wenigste Zeit eigentlich mit Eingeben von Code, sondern mehr mit Fehlersuche, Analyse, Recherche, Planung, Tests usw.
[...]
GDB habe ich auch schon so genutzt, das finde ich aber viel anstrengender als über eine IDE.Naja bei Analysen, Recherchen und Planungen hilft mir die IDE auch wenig, sondern eher das Internet, der Kopf und Zettel + Stift. Einzig das Debuggen macht mir etwas Sorgen, denn nach allem, was ich bisher von gdb gesehen habe, muss ich sagen, dass eine IDE tausend mal bequemer war (besonders wenn ich Mulithreading debugge, wo man in VS ganz einfach schauen kann, welcher Thread z.B. Mutex XY gerade owned) und ich bestimmt mindestens 50% der Zeit mit Debuggen verbringe. Allerdings habe ich noch keine gdb-Plugins mit vim getestet, daher gebe ich vim noch nicht auf.
VitC schrieb:
Ich habe 3 Wochen lang jeden Tag ausgiebig Vim genutzt und auch ein paar schöne Seite und ein Buch(Practical Vim - Edit Text at the speed of tought) dafür zum Lernen benutzt. Letztendlich fand ich es angenehmer einfach mal was mit dem Touchpad(macbook) zu markieren usw. Cut, Copy und Paste über die normalen Tasten finde ich auch viel angenehmer als zu Yanken etc.
Ich bin ein ziemlicher Noob im Umgang mit der Tastatur und besonders mit Shortcuts. vim ist da bestimmt eine gute Therapie.
Mechanics schrieb:
Ich würde ehrlich gesagt auch nicht ernsthaft mit vim entwickeln wollen. Da bin ich auch zu sehr Visual Studio gewohnt und da funktioniert Intellisense und Debugging nun mal sehr viel besser.
Die meisten vim-Profis sagen meiner Erfahrung nach dann immer "ne, stimmt nicht, nimm Plugin XY und es geht genauso!". Aber klar, auf Windows benutze ich natürlich VS. Aber außer VS kann ich halt keine andere IDE ab und das gibt's nun mal nicht auf Linux.
Ich muss aber auch anmerken, dass ich auch nicht als Softwareentwickler programmiere, sondern mehr so Sachen wie Numerik/Simulation mache bzw. wissenschaftliche Programme schreibe. Die Projektgrößen, mit denen ich also zu tun habe, sind eher klein im Vergleich zu irgendwelchen Software-Großprojekten.
Edit: Warum zur Hölle hat dieser Thread über 8000 Hits? Toben sich hier die Bots aus?
-
vim ist doch total überholt ...
-
VitC schrieb:
Achja, nutzen wirklich so viele Vim als IDE? Ich dachte, die sind eher in der Minderheit.
In der absoluten Minderheit gemessen an allen Programmierern. Emacs/vim fühlt sich unter Windows als IDE imho auch als Fremdkörper an.
VitC schrieb:
Header/Source Switching und Funktionen zum Aufruf verfolgen etc. sind doch alles Standardgeschichten jeder IDE, genau wie Intellisense.
Geht alles mit vim und emacs. Nur (meistens) nicht von Haus aus. Liegt daran, dass vim ein erweiterterer Editor und emacs eine zur Laufzeit selbst erweiterbare Plattform ist.
VitC schrieb:
Ich bezweifle auch nicht das eingefleischte Vim-User schneller sind, nur verbringe ich die wenigste Zeit eigentlich mit Eingeben von Code, sondern mehr mit Fehlersuche, Analyse, Recherche, Planung, Tests usw.
Dann macht vim für dich keinen Sinn. Ausser du rechnest die postulierte Zeitersparnis über die Jahre und kommst zu einem anderen Schluss. Ich verwende den Editor meiner Wahl auch zum Erstellen von Dokumenten, Zeit- und Aufgabenplanung, zum Verfassen von Mails, für einfache spreadsheets, Präsentationen, … . Da kommt einiges zusammen.
VitC schrieb:
Zudem finde ich mal weg von der Tastatur zu kommen viel gesünder. Da Abwechslung für die Hände immer gut ist, auch wenn das Mehrarbeit ist, ist es einfach entspannter. Haltungswechsel ist immer sehr gesund und daher immer zu bevorzugen.
Einige vim/emacs user verwenden deshalb spezielle Tastaturen oder sogar Pedale. Eine automatisierte Arbeitsumgebung reduziert zudem den Tippaufwand.
Mechanics schrieb:
Da bin ich auch zu sehr Visual Studio gewohnt und da funktioniert Intellisense und Debugging nun mal sehr viel besser.
Jein und jein. Für C und C++ werden die Unterschiede bei der Autovervollständigung dank clang immer geringer (existieren aber noch). Bei dynamischen Sprachen erkenne ich keinen Unterschied zu anderen IDEs. Debugging ist bis auf wenige Ausnahmen (Python) in vim eine Katastrophe. Einige lassen deshalb einen eigenständigen Debugger laufen, fangen dessen Ausgabe ab, und übergeben die Zeilennummer an vim, um nicht selber hin und her springen zu müssen.
Mechanics schrieb:
Auch kann man schnell mit der Maus über irgendwas drüberfahren und sehen, was das ist.
Für C und C++ funktioniert das. Zwar nicht mit der Maus, aber mit Cursor setzen und Taste drücken. So kommt man auch zu einer Inline-Dokumentation, sofern vorhanden.
-
Swordfish schrieb:
vim ist doch total überholt ...
Deshalb gibt es ja auch neovim.
-
ICH HAB MEINE ÜBRIGENS NICHT ANDERS BELEGT WEIL ICH OFT SCHREIE IM NETZ
notfalls einfach mit dem schweißbrenner rangehen und das scheissding rausflexen
dazu sagt man auch "die kuh vom eis holen".
-
Ich kann vim eigentlich nicht unbedingt empfehlen. Es ist das Programm, welches extrem schwer zu bedienen ist. Das Bedienkonzept ist veraltet. Und irgendwie meine ich das ernst (hier steht übrigens kein smiley).
Ich selbst verwende vim, bzw. gvim ohne Plugins auf Linux und auch Windows. Ich möchte selbst keinen anderen Editor mehr verwenden. Die Toolbar und Menübar sind bei mir weg konfiguriert. Die stören mich nur.
Aber ich verwende ihn praktisch täglich seit etwa 19,5 Jahren. Ich habe nämlich Mitte 1995 mit Unix angefangen und da war der vi einfach da. Da musste ich mich rein arbeiten.
Wenn ich einen Debugger brauche, dann nehme ich nemiver, insight oder kdebug. Und wenn ich den Fehler gefunden habe, dann öffne ich in vim die fehlerhafte Datei und suche mir die Stelle. Die Fehlersuche benötigt ein vielfaches der Zeit im Vergleich zur Navigation zu der fehlerhaften Stelle. Und so oft debugge ich wirklich nicht.
Ich frage mich, ob ich zu bequem bin, die Bequemlichkeit einer IDE zu verwenden oder sind die IDE-User zu bequem, vim zu verwenden
.
Der Vorteil meiner Arbeitsweise ist, dass ich die Umgebung jederzeit einfach reproduzieren kann. Ich habe schon viele Umgebungen erlebt und der vim war und ist immer ein treuer Begleiter. Ich fände es eher lästig, immer eine IDE einzurichten bevor ich arbeiten kann.
Manchmal habe ich auch das Gefühl, viele lernen Programmieren durch Autovervollständigung. Das mag eine Lösung sein aber solide Kenntnisse baut man sich damit ganz bestimmt nicht auf.
Und nochmal: überlege Dir gut, ob Du Dir wirklich vim antun willst. Ich bin glücklich damit aber würde es nicht als die ein und alles selig machende Technik hin stellen. Aber ich glaube, dass die Wichtigkeit der IDE überschätzt wird.
-
Eine IDE einrichten dauert bei mir ein paar Minuten, wenn der Compiler und alles vorhanden ist. Ohne Autocomplete kommt es nun einmal immer mal zu Tippfehlern, die kosten einfach Zeit und diese Fehler sind heute einfach unnötig. Noch besser ist man natürlich bei VM-Sprachen dran, da muss man bei vielen Fehler nicht mal kompilieren, sondern bekommt die sofort angezeigt und einen Lösungsverschlag präsentiert. Ich finde die Hilfe von modernen IDEs wirklich gut.
Nichts ist mir wichtiger als Spaß beim Programmieren zu haben und Zeit zu sparen. Wenn du so mit vim zurechtkommt ist das doch toll. Ich komme mit IntelliJ und Java am entspanntesten zum Ziel und darum ziehe ich Java mit ordentlicher IDE auch immer C++ vor, wenn es geht. Ja, ich weiß "Real Programmers" und so, aber aus dem Alter bin ich raus. Ich nutze das was am besten zu mir passt und das ist nicht C++ und auch nicht der Vim.
-
Ich will nach ein paar Wochen mal Bilanz ziehen:
wenn man Vim konsequent benutzt, lernt man den Umgang sehr schnell, aber man ist wirklich erst schneller als mit einer normalen Klickibunti-IDE, wenn man ein paar Plugins installiert.
Mit YouCompleteMe, Vim-Autoclose, UltiSnipMate und NERDTree sowie ein paar eigenen kleinen Anpassungen für Einrückungen und Auto-Completions muss ich sagen, dass ich deutlich Tipparbeit spare. Ich kann es bisher nur empfehlen, auch wenn man erst mal 'ne Menge Arbeit in das Lernen und Einrichten investieren muss. Zum Glück gibt es genug Leute, die sich die Zeit nahmen, die VIM-Scriptsprache zu lernen, um Sachen zu schreiben, die man dann nur noch zusammenkopieren muss. Aber jetzt funktioniert die Auto-Einrückung und Completion exakt so, wie ich sie will und nicht, wie eine IDE sie mir á la "Friss oder stirb" anbietet.