Wie meine Entwicklungsumgebung eingerichtet ist
Beim synyx Camp vor zwei Wochen haben wir uns unter anderem über das Setup unserer Entwicklungsumgebungen unterhalten. Im Folgenden möchte ich kurz berichten, wie ich meine eingerichtet habe und welche Programme ich in meiner alltäglichen Arbeit nicht mehr missen möchte.
Kurz angerissen werden:
Terminal
Ich arbeite mit einem MacBook und habe von Anfang an iTerm2 genutzt. Weshalb weiß ich leider nicht mehr. Vielleicht gab es damals für das von Haus aus installierte Terminal keine Möglichkeit ein Dark Theme zu verwenden. Vielleicht gab es damals auch nicht die Möglichkeit ein Terminalfenster in der Horizontalen zu splitten. Beides ist mittlerweile möglich. Andere von mir genutzte iTerm2 Features kommen mir gerade nicht in den Sinn…
Viel interessanter finde ich jedenfalls die Frage, welche Shell installiert ist und wie sie personalisiert ist. Ich verwende zsh und natürlich(?) auch oh-my-zsh, um meine Shell im Look & Feel anzupassen und mit Plugins erweitern zu können.
Folgende oh-my-zsh Plugins habe ich installiert:
- z
- führt eine Liste von Pfaden, in welche man auf der Shell mit
cd
navigiert und matcht die eingegebenen Zeichen auf den meist besuchten Pfad - z. B. führt bei mir der Befehl
z dot
zu/Users/seber/projects/git/dotfiles
- führt eine Liste von Pfaden, in welche man auf der Shell mit
- zsh-better-npm-completion
- drücke Tab, um projektspezifische npm Task Vorschläge zu bekommen
- z. B. bekomme ich im Screenshot die Tasks
lint
,lint:watch
,start
undstart:watch
vorgeschlagen
- zsh-autosuggestions
- fange an zu tippen und der Befehl wird ausgegraut vervollständigt
drücke Pfeiltaste rechts und Enter, um ihn auszuführen
- fange an zu tippen und der Befehl wird ausgegraut vervollständigt
- zsh-syntax-highlighting
- hebt das auszuführende Programm farblich hervor
(nützlich um zu sehen, ob ich mich vertippt habe)
- hebt das auszuführende Programm farblich hervor
Als Prompt habe ich lange Zeit die pure prompt verwendet. Sie ist super schlank und zeigt nützliche Infos zum aktuellen git Repository an. Vor wenigen Wochen bin ich jedoch zur spaceship-prompt gewechselt. Einerseits um einfach mal wieder was neues auszuprobieren, andererseits weil sie mir von Haus aus die Version der Programmiersprache des aktuellen Projektes anzeigt. Im Screenshot oben sieht man nach dem Wechsel in das workshop-maze-vr
Verzeichnis den Hinweis, dass das Projekt ein nodeJS Projekt ist und die bash session aktuell v10.9.0 verwendet. Neben nodeJS werden einige andere Programmiersprachen unterstützt, Java leider nicht.
Die Anordnung der spaceship prompt Dinge und ob sie überhaupt angezeigt werden sollen, kann konfiguriert werden:
SPACESHIP_PROMPT_ORDER=(
time # Time stamps section
user # Username section
dir # Current directory section
git # Git section (git_branch + git_status)
node # Node.js section
docker # Docker section
exec_time # Execution time
line_sep # Line break
jobs # Background jobs indicator
exit_code # Exit code section
char # Prompt character
)
und auch das Symbol mit welchem eine Zeile beginnen soll. Ich wollte weiterhin das Zeichen der pure prompt verwenden und habe daher den default überschrieben:
SPACESHIP_CHAR_SYMBOL='❯ '
Git
Git verwende ich überwiegend über die Konsole. Mit grafischen Programmen bin ich nie richtig warm geworden. Angefangen mit gitk
und git gui
auf einem Linux Rechner bin ich über git-cola, SourceTree, GitKraken, Fork und noch ein paar andere gestolpert. Aber das Geklicke und der Kontextwechsel zwischen IDE und $Werkzeug haben mich immer gestört. Auch visuell fand ich bis auf GitKraken und neuerdings Fork nichts ansprechend (ja, ist mir wichtig, hat man anfangs schon beim Dark Theme fürs Terminal bemerkt 🙄). Hauptsächlich hat mich aber das Nichtvorhandensein bzw. die umständliche Handhabung des rebasen gestört. Das geht für mich am schnellsten auf der Konsole mit eigenen git aliasen.
Meine häufigsten Befehle sind:
git up
- hole den aktuellen Stand von
remote
mit einem rebase - lösche alle lokalen Branches die bereits gemerged wurden
- hole den aktuellen Stand von
git cm "jetzt funktionierts wirklich!!!1elf"
- comitte alle Änderungen mit der folgenden commit message
(inklusive neu angelegte Dateien)
- comitte alle Änderungen mit der folgenden commit message
git amend
- füge alle Änderungen dem letzten HEAD commit hinzu
(exklusive neu angelegte Dateien)
- füge alle Änderungen dem letzten HEAD commit hinzu
git ll
- drucke eine Liste aller commit hashes und messages des aktuellen Branches ab HEAD
- die Länge der Liste kann mit
-42
begrenzt werden
git fix
undgit ri
- erzeuge einen
fixup
commit und räume die commits mit einem interactive rebase auf - workflow ist dann wie folgt:
- erzeuge einen
❯ git ll -5
a52747d (HEAD -> master, origin/master, origin/HEAD) foo
b858f05 bar
4954b3d baz
782d959 bum
2b1c7c6 buff
❯ git add .
❯ git fix 782d959
❯ git ri 782d959^
Eigene git aliase können in der globalen git config unter ~/.gitconfig
abgelegt werden.
Da ich meine merge requests im Normalfall erst auf den master rebase bevor ich sie zum mergen freigebe, bin ich super glücklich über das rerere
Feature von git. Ist das Feature aktiviert, merkt sich git beim rebasen, wie ein Konflikt gelöst wird. Kommt es erneut zu dem selben Konflikt, weiß git wie es diesen automatisiert zu lösen hat.
[rerere]
enabled = true
[alias]
s = status
st = stash
co = checkout
cob = checkout -b
fix = commit --fixup
ri = rebase -i --autosquash
up = !git pull --rebase --prune && git bclean
cm = !git add -A && git commit -m
amend = commit -a --amend
ll = !git --no-pager log --oneline --decorate
bclean = "!f() { branches=$(git branch --merged ${1-master} | grep -v " ${1-master}$"); [ -z \"$branches\" ] || git branch -d$branches; }; f"
Programme
Weitere Programme, die ich in meiner täglichen Arbeit nicht mehr missen möchte, sind:
- homebrew (kommandozeile)
- quasi DER Paketmanager für OSX
- Programme installieren mit
brew install FOO
. Schneller gehts nicht!
- direnv (kommandozeile)
- lege in einem Verzeichnis eine
.envrc
Datei ab und definiere dort z. B. die Java oder NodeJS Version, oder auch eine andere git E-Mail-Adresse, falls man hier eine andere als die globale verwenden möchte für commits
- lege in einem Verzeichnis eine
- jq (kommandozeile)
- JSON Prozessor für die Kommandozeile
- nodenv (kommandozeile)
- verwalte unterschiedliche Versionen von NodeJS (Alternative zu z. B. Node Version Manager (nvm))
- Anfang des Jahres bin ich von
nvm
aufnodenv
umgestiegen, weil letzteres die Shell beim Initialisieren nicht blockiert.nvm
braucht seine Zeit zum Laden von NodeJS
- spectacle
- verschiebe Fenster und ändere deren Größe mit deiner Tastatur
- die Tastenkombinationen sind konfigurierbar
- ich hatte einen UltraWide Monitor und habe so schnell mal drei Fenster in der Breite gedrittelt verteilt
- Natürlich ist das auch auf einem normalen Laptop Display sinnvoll, Fenster ohne Maus rechts/links oder oben/unten ausrichten zu können
- clipy
- wer die copy-paste aus IntelliJ lieb gewonnen hat; clipy macht das systemweit (die Alternative wäre, das Powerpack für Alfred zu kaufen)
- man achte auf Passwörter! Clipy bietet die Möglichkeit, bestimmte Programme zu ignorieren. Es ist ratsam dort KeepassX oder sonstigen Tresor einzutragen 😉
- spotify
- Musik muss natürlich sein 🎧
Vielen Dank fürs Lesen (☞゚ヮ゚)☞ (smilie eingefügt mit clipy snippets)