Aaron Fischer Ingenieur, Vater, Heimwerker, Problemlöser

13 Mai, 2013

Journaled vim

Text

Florian hat bereits in seinem Blog einen sehr lesenswerten und ausführlichen Artikel zum Thema Notizen mit Vim + Extras geschrieben. Wer bereits wie wir schon alles mal durchprobiert hat und immer noch nicht zufrieden ist, sollte zuerst Florians Artikel lesen, es lohnt sich. Ich bin seit einigen Wochen ebenfalls auf vimwiki umgestiegen, da alle anderen Alternativen für mich nicht funktioniert hatten und simple Markdown Files ohne Links auf Dauer zu umständlich sind.

Da ich ständig irgend etwas aufschreiben/nachschlagen will/muss, und auf der Arbeit vimwiki auch als persönliche ToDo-Liste nutze, musste diese Lösung einfach und immer zur Hand sein. Deshalb habe ich ein Terminal mit geöffnetem Vim stets als Scratchpad Fenster offen (ich verwende i3 als Window Manager) und kann es bequem mit [WIN]+- ein- und ausblenden.

Diesen Prozess habe ich automatisiert. Ein kleines Script ~/bin/n prüft, ob bereits das Scratchpad offen ist und wenn ja, wird es in den Vordergrund gelegt. Wenn noch kein Scratchpad Fenster offen ist, wird ein neues Terminal geöffnet, Vim mit vimwiki und dem aktuellen Tag gestartet und auf das Scratchpad gelegt.

#!/usr/bin/env sh
set -e

# Scratchpad already open?
if [[ `which i3-ipc` && `i3-ipc -p -t 4 | grep scratchpad | grep -v none` ]]; then
  i3-msg scratchpad show 1> /dev/null
  exit 0
fi

# Open a new scratchpad an start the vimwiki diary
i3-sensible-terminal -e vim -c VimwikiMakeDiaryNote &
while true; do
  [[ `xdotool search --onlyvisible --pid $! 2> /dev/null` ]] && break
  sleep 1
done
i3-msg floating enable 1> /dev/null
i3-msg move scratchpad 1> /dev/null

Natürlich lässt sich dieses Script auch in die ~/.i3/config legen und beim Start gleich mit ausführen:

exec ~/bin/n

Somit ist das private Wiki immer griffbereit. Was mir regelmäßig passierte, war, dass ich das Scratchpad total vergaß (da im Hintergrund) und mein PC ausschaltete. So gingen ungespeicherte Änderungen verloren. Damit mir das nicht mehr passiert, habe ich folgende Zeilen in meinem ~/bin/off Script ergänzt:

if [[ `which i3-ipc` && `i3-ipc -p -t 4 | grep scratchpad | grep -v none` ]]; then
  i3-nagbar -t warning 
    -m "A Scratchpad is open, please close first." 
    -b "open pad" "i3 scratchpad show" 
    1>2 /dev/null
fi
sudo shutdown -h now

Sollte das Scratchpad noch offen sein, wird ein kleiner Hinweisdialog (gelbe Leiste am oberen Bildschirmrand) angezeigt, das mich davor warnt. Wirklich sehr praktisch :)

Da ich mein Wiki nicht nur an einem PC nutze, habe ich alles in einem Git-Repository und ein kleines Vim-Mapping, mit dem ich die Stände abgleichen kann. Damit komme ich eigentlich sehr gut zurecht.

nnoremap <<leader>>wf :!cd ~/.fuNotes; git pull; git aa; git commit -m "changes"; git push<<cr>>