Effizient mit dem CLI arbeiten/programmieren

Hallo,
es wär nett wenn ihr mir ein paar Tricks sagen könntet mit denen man z.B. schneller zwischen 2 dateien hin und her wechseln kann.
Derzeit verwende ich zum Erlernen von C, den vim-editor.
Jetzt kommt es aber öfters mal vor das ich mehrere headerdatei/quelldateien hab, dann geht das ganze nicht mehr so schön. Ich öffne z.B. eine neue Datei indem ich die aktuelle schließe oder mit :sp test.c. Das neue Fenster ist dann meistens auch nicht gerade optimal positioniert und man muss es durch Strg+W t | Strg+W H verschieben, was alles andere als schnell geht. Vim an sich gefällt mir dennoch sehr gut.
Ich hab auch ein paar Plugins installiert die mir die Arbeit ein wenig erleichtern:
- snipmate (html-tags autocomplete)
- syntastic (markiert nach dem Speichern Zeilen, die der gcc nicht mag)
- tcomment (pulign zum schnelleren Auskommentieren)
Aber irgendwie läuft die Sache nicht so flüssig. Wie arbeitet ihr denn unter Linux?, wenn ihr z.b. ein C-Programm schreibt das nicht nur aus einer Datei besteht.
Bei mir ist das ein wenig durcheinander und ich meine das sollte ich verbessern.
Das übersetzen ist auch so eine Sache: gcc -c foo.c && gcc -c bar.c && gcc foo.o bar.o -o done , das zieht sich so dahin. :)
meine Distro: Arch Linux (i3-wm)
 
Welchen Grund gibt es heutzutage noch mit dem CLI zu coden?

Und zum Kompilieren von mehreren Source-Dateien verwendet man make. Also schnapp dir eine richtige IDE, erstelle darin ein CLI-Projekt und schon hast du alles was du brauchst.

Wenn es unbedingt ViM sein muss, dann lerne die Tastenkürzel dieses Editors oder hol dir ein Mousepad mit ViM-Referenz drauf.
 
Welchen Grund gibt es heutzutage noch mit dem CLI zu coden?
Mir macht das einfach Spaß,:p die meisten Kommandos von vim kenn ich schon. Es gibt auch Plugins für Netbeans wie jVi, hab ich auch schon ausprobiert. (gefällt mir nicht) Ich find die meisten IDEs zu überladen und ich hab auf meinen notebook, auf dem ich arbeitet nicht soviel RAM (1gb).
Hab ich keinen externen Display angeschlossen, ist der Display ziemlich klein (10.1 inches) und mit einer IDE auf einen kleinen Bildschirm zu arbeiten macht mir keinen Spaß.
Ich hab in der Zwischenzeit noch ein Plugin gefunden das mir ein wenig weitergeholfen hat (qbuf). Mit dem kann ich jetzt einigermaßen schnell zwischen den Dateien switchen.
Bei den Konfiguieren von vim konnte ich auch ein Wenig über Linux lernen, was bei den meisten IDE wahrscheinlich nicht der Fall ist?.
Würde mich über weitere Hinweise freuen.
 
Ok, das sind nachvollziehbare Gründe. Ich bin allerdings Emacs-User und kann dir daher bei ViM wenig helfen.

Allerdings halte ich Emacs auch für die bessere CLI-IDE. Die grundlegenden Shortcuts, die man zur Navigation braucht (C = Ctrl/Strg, M=Meta/Alt):

C+x C+f - Datei öffnen
C+x C+s - Datei speichern
C+x b - zu einer bereits geöffneten Datei bzw. einem anderen Fenster/Buffer wechseln
C+g - aktuellen Befehl abbrechen
Esc x - einen Builtin-Befehl ausführen (z.B. danach 'compile' eingeben um den zuletzt verwendeten Build-Befehl erneut aufzurufen, per Default ist das 'make -k')

Die Navigation beim Öffnen von Dateien kann man sich mit der imenu-Erweiterung noch etwas komfortabler gestalten. Meine empfohlenen Emacs-Einstellungen (meinen ganzen Perl-Kram lass ich mal weg):

Code:
(add-to-list 'load-path "~/.emacs.d/lisp/")

(global-font-lock-mode t)
(line-number-mode t)
(column-number-mode t)
(setq transient-mark-mode '1)

(custom-set-variables '(tab-width 8))

(setq backup-buffer nil)
(setq make-backup-files nil)

(setq scroll-conservatively 1)
(setq scroll-step 1)

(setq display-time-24hr-format t)
(display-time)
(setq calendar-week-start-day '1)
(setq calendar-week-start-day '1)
(setq calendar-time-display-form '(24-hours":"minutes(if time-zone " (") time-zone (if time-zone ")")))
(setq european-calendar-style 't)
(setq diary-file "~/.diary")

;; imenu
(global-set-key (kbd "C-c i") 'imenu)
(global-set-key (kbd "C-c v") 'imenu-tree)
(setq tags-table-list '("./TAGS" "../TAGS" "../../TAGS"))
(autoload 'imenu-tree "imenu-tree" "Show imenu tree" t)
(setq imenu-tree-auto-update t)
(eval-after-load "imenu"
 '(defalias 'imenu--completion-buffer 'pde-ido-imenu-completion))
(autoload 'tags-tree "tags-tree" "Show TAGS tree" t)
(require 'ido)
(ido-mode t)

Die komplette Config von mir gibt's unter https://github.com/bitmuncher/bitscripts/blob/master/myemacsconfig

Evtl. schaust du dir ja Emacs mal an. Im Gegensatz zu ViM ist Emacs eine richtige IDE und nicht nur ein Editor. (Mal schauen wann der Flamewar los geht. ;) ) Ausserdem muss man nicht ständig zwischen irgendwelchen Modi wechseln. Damit verhält er sich mehr wie ein üblicher grafischer Editor.

Ansonsten würde ich dir empfehlen mal eine grafische Version von ViM auszubrobieren. Dort sind zumeist an den Menüpunkten auch gleich die Commands für den ViM rangeschrieben, so dass man sie recht gut lernen kann. Oder, wie bereits erwähnt, hol dir ein Mousepad mit Vi-Referenz - Mousepad - vi-Referenz - deutsch Dann kannst du jederzeit nachschauen.

So oder so wirst du nicht drumrum kommen Shortcuts zu lernen. Das haben die Konsolen-Editoren, die einigermaßen Programmierer-Komfort bieten, leider so an sich. Wenn du auf Auto-Indent usw. verzichten kannst, kannst du dir aber auch mal einfachere Editoren wie Nano u.ä. anschauen.
 
Ich bin Sysadmin und zumindest in diesem Fachgebiet auf der Vim-Seite :) Wenn ich mehrere Dateien editiere oder betrache dann öffne ich sie mit ':tabnew' und wechsle mit 'gt' zwischen Dateien.
Kleine Scripte kann man natürlich auch in Vim schreiben, beim ernsthaften Programmieren ist zumindest mir dieser Editor viel mehr im Weg als er unterstützt. Dass dir eine riesige IDE unsympatisch ist kann ich gut verstehen. Ich empfehle dir deshalb Sublime Text[1], fühlt sich für mich wie ein in diesem Jahrtausend angekommenes Vim an ;)
 
Ich verwend gern "set hidden". Damit kannst du die aktuell offene Datei in nem Buffer im Hintergrund behalten wenn du mit ":e /foo/bar" was neues öffnest. Zwischen den Buffern wechseln geht mit ":b#" für den letzten Buffer oder ":b name" um zum Buffer mit der Datei "name" zu wechseln. Dabei funktioniert natürlich auch Tab-Completion. Mit ":ls" kannst du dir die aktuellen Buffer anzeigen lassen.

Zum Kompilieren: Schreib Makefiles. Bei Vim gibts ":make", was halt make im aktuellen Verzeichnis ausführt. Das aktuelle Verzeichnis kannst du mit ":cd /foo/bar" wechseln. ":cd `dirname %`" wechselt in den Pfad der aktuell offenen Datei. Mit ":cprevious" und ":cnext" kannst du zum vorherigen und nächsten Compilerfehler springen. Ich hab mir ":make, :cprevious und :cnext" auf ein paar Funktionstasten gelegt, z.b. F2 für ":w<cr>:make<cr>" um die aktuelle Datei zu speichern und make aufzurufen.

Bei Bedarf kann ich gern mal meine vimrc hochladen, ich benutz ausser ConqueTerm, Vim Org Mode und den Input Mappings aus der VIM LaTeX Suite keine Plugins, ist also relativ vanilla.
 
Zuletzt bearbeitet:
Ich verwend gern "set hidden". Damit kannst du die aktuell offene Datei in nem Buffer im Hintergrund behalten wenn du mit ":e /foo/bar" was neues öffnest. Zwischen den Buffern wechseln geht mit ":b#" für den letzten Buffer
Danke, das ist spizte.
Ich hab den wildmode-autocomplete noch entdeckt, was ich auch ganz nützlich finde:
Code:
set wildmenu
set wildmode=full
In emacs bin ich noch ein blutiger Anfänger, (hab noch ein paar Anlaufschwierigkeiten beim Finger verrenken ;) )
Das Customize-System gefällt mir schon mal sehr gut, sobald ich mich an die Shortcuts gewöhnt hab, werde ich wohl öfters emacs als vim verwenden.
 
Zurück
Oben