blog.kanedo.net

New Year - New CLI

Manche müssen ja am Jahresende Autos oder Wohnungen putzen; ich dachte, ich mache das Gleiche mal mit meinem Terminal.

Erstmal homebrew aufräumen und mit aufräumen meine ich: Alles deinstallieren und nur die packages installieren die ich im Moment brauche. Vor allem aber habe ich meine dotfiles von Grund auf neu geschrieben. Damit ich das mal irgendwo Dokumentiere und weil ich selbst gern solche Posts lese, eine kleine Übersicht:

colorscheme

Nachdem ich jahrelang hukls Smyck verwendet habe, bin ich jetzt bei gruvbox gelandet.

Screenshot von diesem Artikel in vim mit dem gruvbox colorscheme

Vim

Python

Die größte Veränderung war definitiv in vim. Als ich ein python Projekt via ssh entwickeln musste, war klar: Ich brauche eine Lösung für autocomplete in vim. YouCompleteMe war das Tool der Wahl als ich meine Masterarbeit geschrieben habe, aber glücklich bin ich damit nicht geworden. Ein Kollege zeigte mir dann die LSP integration in neovim - das sah viel besser aus. Damit ich nicht das wenige neu lernen muss, was ich über vim weiss, war ich froh um vim-lsp, denn damit konnte ich das gleiche einfach direkt in vim integrieren.

Damit ich ordentlich in python programmieren kann, benutze ich jetzt eine Sammlung an plugins:

Damit komme ich schon recht weit. Autocomplete funktioniert, ich kann zwischen Definitionen hin- und herspringen und mir Aufrufe von Funktionen und Klassen zeigen lassen. Ein “Problem” mit Plugins ist: Man muss sich immer die neuen Shortcuts merken damit man damit schnell arbeiten kann. Hier also eine kleine Liste derer die ich verwende:

"
" LSP 
" 
nnoremap <leader>dd :LspDefinition<cr>
nnoremap <leader>df :LspReferences<cr>
nnoremap <leader>dr :LspRename<cr>
nnoremap <leader>dp :LspPeekDefinition<cr>
nnoremap <leader>da :LspCodeAction<cr>
nnoremap <leader>dh :LspHover<cr>

Eine Sache die noch fehlt (und die ich in PyCharm sehr viel verwendet habe) ist eine Liste an Funktionen, Klassen und Methoden in einer Datei. Es gibt :LspDocumentSymbol aber das zeigt alles an, inklusive Variablen. Da leidet die Lesbarkeit doch sehr darunter.

Alte Klassiker

Plugins die ich schon früher benutzt, aber wieder neu-entdeckt habe:

Tmux

Tmux ist und bleibt der Sessionmanager der Wahl. Ich werde mit screen einfach nicht warm. In jedem Terminal, das ichbenutze, istt als default command eingestellt

tmux attach -t base || tmux new -s base

Damit stelle ich sicher, dass ich immer in die alte tmux session zurückkomme oder eine neue erstellt wird. Das ist eigentlich das wichtigste. Dann benutze ich als theme noch egel/tmux-gruvbox damit es einheitlich ist.

# Smart pane switching with awareness of Vim splits.
# See: https://github.com/christoomey/vim-tmux-navigator
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind-key -n C-h if-shell "$is_vim" "send-keys C-h"  "select-pane -L"
bind-key -n C-j if-shell "$is_vim" "send-keys C-j"  "select-pane -D"
bind-key -n C-k if-shell "$is_vim" "send-keys C-k"  "select-pane -U"
bind-key -n C-l if-shell "$is_vim" "send-keys C-l"  "select-pane -R"
bind-key -T copy-mode-vi C-h select-pane -L
bind-key -T copy-mode-vi C-j select-pane -D
bind-key -T copy-mode-vi C-k select-pane -U
bind-key -T copy-mode-vi C-l select-pane -R

Sorgt dafür, dass ich zwischen vim und tmux wechseln kann.

ZSH

Bei der shell bleibe ich bei zsh, aber habe mal wieder oh-my-zsh ausprobiert und teste das jetzt mal ein bisschen. Eigentlich mag ich es nicht, dass da so viel magic passiert von der ich noch gar nichts weiss, auf der anderen Seite war meine alten konfiguration einfach nicht komfortabel genug.

Ein custom plugin habe ich mir direkt hinzugefügt: localhistory

alias useHistory="grep -v \"^ls$\|^ll$\|^l$\|^dir$\|^cd \|^h$\|^gh$\|^gh \|^bg$\|^fg$\|^qsm$\|^quser$\|^qstat \|^note \|^mutt\|^std \" | wc -l"

function myLocalHistory()
{
    if [[ `ls -ld "$PWD" | awk '{print $3}'` == "$USER" ]] ; then
        HISTORYLINE=`history | tail -1 | sed 's:^ *[0-9]* *::g'`
        if [[ "$(echo $HISTORYLINE | useHistory | tr -d '[:space:]')" == "1" ]] ; then
            ((((date +%F.%H-%M-%S.;uname -n) | tr -d '\n' ; echo " $HISTORYLINE") >>.history) 2>/dev/null &)
        fi
    fi
}

autoload -U add-zsh-hook
add-zsh-hook precmd myLocalHistory

function h()
{
     tail .history 2>/dev/null
}

function gh()
{
     cat .history | tr -d '\0' | cut -d ' ' -f2- | grep -a "$1"  2>/dev/null
}

Die Funktion hab ich an der Uni für bash gesehen und mir schon damals für zsh umgeschrieben. Damit lege ich in jedem Ordner eine .history Datei an die alle commands enthält, die in diesem ausgeführt wurden. Quasi eine indirekte Dokumentation. Gerade bei Experimenten, die man erst viel später wieder anschaut eine wichtige Hilfe. Die .history Dateien werden dann in der globalen .gitignore einfach ignoriert.

Starship Prompt

Damit auch der prompt hip(ster) wird, probiere ich starship aus. Ist mir oft zu viel Emoji aber die Zwei-zeiligkeit und Plugins sind schon nett.

Fazit

Es war mal wieder dran, der Neujahrsputz. Ich habe jetzt wieder eine funktionierende Umgebung auf quasi allen Unix-shells auf denen ich so arbeite. Vim wird mir langsam vertrauter (keine Sorge, ich benutze immer noch die Pfeiltasten…). Es ist wirklich cool, dass ich jetzt auf jedem Server die gleiche IDE laufen habe. Das macht entwickeln wirklich flexibel.

Kamelie

Kamelie

Kamelie

Alle Pfanzenportraits

Herbststurm 2

Herbststurm 2

Herbst auf Usedom 2

Herbststurm

Herbststurm

Herbst auf Usedom

Familienwochenende auf Usedom

Familienwochenende auf Usedom

Wir waren alle drei krank, das Wetter war richtig Herbst aber es waren erholsame drei Tage.

Sächsische Schweiz

Sächsische Schweiz

Basteibrücke.

Manchmal muss man einfach rechts ranfahren und hektisch die Kamera rausholen.

Und obwohl das Licht definitiv nicht perfekt war, weiß ich jetzt genau so ich im Herbst mal hinfahren muss.

Birkenhain. Berlin.

Birkenhain. Berlin.

Triptych

Triptych

Endlich habe ich mein Tripel zusammen. Jetzt muss ich das mittlere Bild nur noch drucken und Rahmen und dann hängt es im Arbeitszimmer.

Strauß Tulpen

Strauß Tulpen

Noch habe ich den Look nicht über und eine schöne Übung mit dem Blitz ist es allemal.

Zamioculcas

Zamioculcas

Nach dem Erfolg gestern, habe ich die neuen Triebe unserer “ZZ” Pflanze entdeckt und fotografiert.