Fryboyter

Fuzzy Finder für die ZSH

Gestern hatte ich in einem Anfall von Wahnsinn meine Konfiguration der ZSH_aufgeräumt. Anstelle von zwei Dateien habe ich nun sieben mit ziemlich viel Kommentaren. Dafür kann man endlich nachvollziehen welcher Eintrag was macht und es ist alles ordentlicher. Nur beim Aufräumen ist aber nicht geblieben.

Die Suchfunktion in der Historie hat mir in letzter Zeit irgendwie nicht mehr zugesagt. Daher habe ich fzf (command-line fuzzy finder) getestet. Nach dem Installieren das Pakets muss man nur folgende Einträge in die .zshrc eintragen.

source /usr/share/fzf/key-bindings.zsh
source /usr/share/fzf/completion.zsh

Wenn man nun mittels Strg + R in der Historie suchen will erhält man erst einmal eine etwas ungewohnte Anzeige, die aus den letzten Einträgen besteht. Erst einmal nichts besonderes. Sucht man aber beispielsweise nach “pac” für pacman, bekommt man schon deutlich besser aufbereitet Ergebnisse angezeigt.

Mit den Cursor-Tasten lässt sich dann der gewünschte Eintrag auswählen. Angezeigt werden wohl standardmäßig immer 8 Einträge. Wenn mehr Einträge vorhanden sind, kann man allerdings auch weiter nach oben scrollen.

Fzf lässt sich aber nicht nur für die Historie der Shell nutzen. Verwendet man anstelle von Strg + R Strg + T kann man “fuzzy” nach Dateien und Verzeichnissen suchen. Hierbei wird allerdings das normale find verwendet. Somit ist zumindest dieser Teil, gerade bei vielen Dateien nicht gerade schnell. So wie der Sourcecode aussieht kann man diesen aber vermutlich schnell anpassen, dass statt dessen das schnellere fd verwendet wird. Ein weiterer Shortcut wäre ALT + S mit dem man nach Verzeichnissen suchen und direkt in diese wechseln kann.

Alles in allem konnte ich mit fzf nun drei Erweiterungen komplett ablösen. Diese habe zwar keine Probleme gemacht, aber weniger ist ab und zu auch mehr. Fzf sollte meines Wissens nach auch unter Fish und Bash funktionieren.

Linux | OSBN

ZSH-Alias mit Platzhalter

Derzeit teste ich mal wieder AUR-Helper. Da ich mir die Paramenter usw. nicht merken will, lege ich ich normalerweise Aliase an. Für das Suchen im AUR wäre ein möglicher Alias zum Beispiel alias aurs=‘trizen -Ssa’. Derzeit teste ich den AUR-Helper aurman.

Hier wäre der Befehl nur im AUR nach Paketen zu suchen aurman -Ss Suchbegriff –aur. Da in diesem Fall der Suchbegriff mitten im Befehl steht klappt ein Alias wie aurs=‘aurman -Ss –aur’ nicht wirklich. In den Alias einen Platzhalter zu packen (aurs=‘aurman -Ss $1 –aur’) funktioniert ebenfalls nicht. Die Lösung hierfür ist kein Alias sondern eine Funktion.

Hierfür legen wir uns am besten ein extra Verzeichnis im Home-Verzeichnis an. Beispielswese .zfunc. In diesem erstellen wir nun die Datei aursearch und füllen diese mit folgendem Inhalt und speichern diese anschließend.

function aurs() {
aurman -Ss $1 --aur
}

Anstelle von aurs geben wir den Namen ein über den wir die Funktion aufrufen wollen. Da bei mir die Aliase für den AUR-Helper normalerweise aurs (suchen), auri (installiere) und auru (aktualisieren) lauten habe ich mich hier für aurs entschieden.

Damit die Funktion automatisch zur Verfügung steht öffnen wir nun noch die Konfigurationsdatei von zsh (normalerweise .zshrc) und fügen dort folgende Zeile ein.

source ~/.zfunc/aursearch

Hierbei ist zu beachten dass man den Namen der Datei angibt und nicht den Befehl mit dem man die Funktion ausführt.

Von nun an kann man nun mittels aurs Suchbegriff im AUR nach Paketen suchen. Eventuell vorhanden Aliase mit dem gleichen Namen sollte man aber vorher löschen bzw. auskommentieren.

Linux | OSBN

Teile des Pfads bis zum Slash unter der ZSH löschen

Nehmen wir einmal an, dass in der Historie der ZSH der Befehl “cd /home/nutzer/Downloads/Filme/Action” vorhanden ist. Was aber, wenn man nur in den Ordner Downloads wechseln will?

Eine Möglichkeit wäre, den Befehl aus der Historie aufzurufen und einfach Filme/Action zu löschen bevor man den Befehl ausführt. Oder man drückt einfach ALT + Backspace. Hier macht die ZSH allerdings Probleme. Anstelle bis beispielsweise rückwärts bis zum nächsten Slash zu löschen, wird bis zum nächsten Leerzeichen gelöscht. Somit wird aus “cd /home/nutzer/Downloads/Filme/Action” mit nur einem Shortcut “cd”. Irgendwie blöd. Also muss mal wieder meine .zshrc erweitert werden. In diese habe ich folgende Funktion gepackt.

function backward-kill-partial-word {
         local WORDCHARS="${WORDCHARS//[\/.]/}"
         zle backward-kill-word "$@"
     }
     zle -N backward-kill-partial-word
     for x in '^Xw' '^[^?' '^[^H'; do
         bindkey "$x" backward-kill-partial-word
     done; unset x
 

Mittels WORDCHARS wir hierbei definiert, dass auch / Teil eines Worts ist. Speichert man nun die .zshrc und läd diese mittels “source ~/.zshrc” erneut ein lässt sich nun ein eingegbener Pfad mittels ALT + Backspace bis zum jeweils nächsten Slash rückwärts löschen.

Linux | OSBN

Lesezeichen für Verzeichnisse unter der ZSH

Heute habe ich mir überlegt, wie ich meine Abläufe weiter optimieren kann. Der Wechsel in oft genutzte Verzeichnisse ist solch ein Ablauf. Als erstes habe ich mir das Jump-Plugin von Oh My ZSH angesehen.

Da mir Oh My ZSH zu überladen ist, habe ich mir nur das betreffende Plugin installiert. Hierzu habe ich das Verzeichnis /usr/share/zsh/plugins/zsh-jump erstellt und in diesem mittels wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/plugins/jump/jump.plugin.zsh das Plugin heruntergeladen. Abschließend habe ich noch in der ~/.zshrc source /usr/share/zsh/plugins/zsh-jump/jump.plugin.zsh hinzugefügt.

Das Plugin ist nun aktiv. Nun wechselt man einfach in eines der oft genutzten Verzeichnisse. Nehmen wir als Beispiel mal /etc/systemd/system. Mittels mark systemd legen wir ein Lesezeichen an (anstelle von systemd kann man eine beliebige Bezeichung angeben). Hiermit mit standardmäßig unter ~/.marks ein entsprechnender Symlink angelegt.

Nehmen wir nun einmal an, dass wir uns in ~/.config/terminator befinden und nun schnell in /etc/systemd/system wechseln möchten. Also führen wir jump systemd aus und landen umgehend in /etc/systemd/system.

Diese Lösung ist relativ einfach gehalten und erfordert das manuelle Anlegen von Lesezeichen. Andere Lösungen, die ich voraussichtlich noch testen werde, nutzen zum Beispiel fzf und sind daher komplexer und bietet mehr Möglichkeiten.

Linux | OSBN

Autokorrektur der ZSH partiell zum Schweigen bringen

Gestern habe ich alle wichtigen Dienste von Uberspace V6 auf Uberspace V7 verschoben. So wie es aussieht, hat wohl alles geklappt. Allerdings ging mit die Autokorrektur der ZSH auf die Nerven.

Da mir Befehle wie “ssh nutzer@planet.uberspace” zu umständlich sind, habe ich in der ~/.ssh/config Einträge angelegt, so dass ich mich beispielsweise mittels “ssh uberspace6” auf meinen Uberspace6 einwählen kann. Vor kurzem kam hier noch der Eintrag für uberspace7 hinzu. Wenn ich nun “ssh uberspace7” ausführen wollte, hat mich die Autokorrektur der ZSH jedes mal gefragt, ob ich nicht Uberspace gemeint habe. Nein verdammt, habe ich nicht. Das ging mir mit der Zeit auf den Zeiger. Eine komplette Deaktivierung der Korrektur für die Parameter wollte ich aber auch nicht. Daher habe ich mir den Alias ssh=‘nocorrect ssh’ erstellt. Damit verkneift sich die Korrektur die Fragen und ich habe meine Ruhe. Dank der Vervollständigungsfunktion bzw. History-Funktion entstehen in dem Fall auch keine Problem und man kann schnell zwischen zwei ähnlichen Einträgen auswählen. Solch ein Alias lässt sich auch für jeden anderen Befehl anlegen.

Linux | OSBN