115 lines
10 KiB
Plaintext
115 lines
10 KiB
Plaintext
|
|
Episode: 3836
|
||
|
|
Title: HPR3836: Using 'zoxide', an alternative to 'cd'
|
||
|
|
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr3836/hpr3836.mp3
|
||
|
|
Transcribed: 2025-10-25 06:18:31
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
This is Hacker Public Radio Episode 3836 from Monday the 17th of April 2023.
|
||
|
|
Today's show is entitled, using Soxit as an alternative to CD it is part of the series
|
||
|
|
Bash scripting. It is hosted by Dave Morris and is about 12 minutes long. It carries an explicit flag.
|
||
|
|
The summary is, Dave has been using Soxit for a little while and really likes it.
|
||
|
|
Hello, my name is Dave Morris and this is Hacker Public Radio. Welcome.
|
||
|
|
Now, today I'm doing a show in a little bit of a hurry. I'm not usually very quick at
|
||
|
|
doing shows, but we're very, very low. So I'm going to talk about something I've been experimenting
|
||
|
|
with recently, which is a tool called, I think it's called Zoxide or Zoxide. Not quite sure.
|
||
|
|
It's a Z-O-X-I-D-E. Anyway, I've not heard anybody else say it. I have no idea. I've been using it
|
||
|
|
for a few weeks, maybe. I'm not sure how many. Six months, maybe something like that. And learning
|
||
|
|
about it and seeing how it fits in with me. It's an alternative to the CD command. There are tools
|
||
|
|
available to do this to remember where you've been and make it easier to jump about from one
|
||
|
|
place to another in your file system and get back to where you started from and so forth. Ideally,
|
||
|
|
without having to type out a whole directory, just a piece of it, hopefully, or the end bit of it.
|
||
|
|
Anyway, I do use pushD and popD for moving in and out of directories from a place where I do
|
||
|
|
most of my works. I'm working in a top level directory and I want to jump down to a lower directory
|
||
|
|
and do stuff. And then back again, pushD and popD do that quite nicely. And I did a show on this
|
||
|
|
ages and ages ago. I've linked to it in the notes. I was using an alternative called AutoJump
|
||
|
|
for a while last year, but I didn't get on with it. It was mainly because in its memory of which
|
||
|
|
stretches you'd been in, there was no way of excluding some and I occasionally visit a external
|
||
|
|
disk and I didn't want it to remember that I'd been there, particularly because it's of no real
|
||
|
|
interest. So recently I heard of this Zoxide, which as I said, I've been trying for a for a while
|
||
|
|
and I'm getting to really like it. So what is it? There's a GitHub page, which I've referenced
|
||
|
|
and it says there, Zoxide is a smarter CD command inspired by something called Z or Z maybe
|
||
|
|
and AutoJump. I don't actually know what Z is, but other than that of the alphabet,
|
||
|
|
I didn't bother to look it up to be honest. If I find it, I'll put it in the notes. Anyway,
|
||
|
|
it remembers which direction you use most frequently so you can jump to them in just a few key strokes.
|
||
|
|
Zoxide works on all major shells. In the man page relating to this, it's
|
||
|
|
build as a faster way to navigate your file system and it's written in Rust, so it's pretty quick.
|
||
|
|
What does it do exactly? Well, it offers the functionality of the Linux and Unix CD command,
|
||
|
|
but it collects the directions you've visited into a database and gives them a ranking relating
|
||
|
|
to the number of times you've been there. You visited them. It also applies aging rules and
|
||
|
|
moves those when the ranking drops below one. It uses something called a free-sensee, I think I say
|
||
|
|
which is a word made up from the words frequency and recency. There's a Wikipedia page explaining it
|
||
|
|
and it's something from computer science. You can get the general gist of what's going on there,
|
||
|
|
I think. It performs algorithmic matching on the directory specifies, so it doesn't have to be
|
||
|
|
an exact name. It can be a part of a name and there are various shortenings and so forth. You can
|
||
|
|
read up about the algorithm it uses and it takes you to the highest ranking best match. It can resolve
|
||
|
|
conflicts between matching directories or can allow selection through an interactive interface.
|
||
|
|
So if you've got two directories which end with the same name and you know which one you want,
|
||
|
|
but the Zoxi doesn't, you can get it to offer you a list of all the matches. It doesn't do that
|
||
|
|
by default, so as I'm aware, but you can get it to do that and then choose one from it. It can also
|
||
|
|
interface to another tool called FZF, a general purpose command line fuzzy finder which I'd
|
||
|
|
heard of never used and I've installed it with Zoxide and just to give you the hint that how does
|
||
|
|
it know which directory you're in? Well in the context of bash and there's other ways of doing it
|
||
|
|
and there's other other shells that it will work with as I've mentioned. It uses in bash the prompt
|
||
|
|
command variable. This is a variable that contains one or more commands. It can be a simple variable
|
||
|
|
or an array and it will execute whatever commands it finds going through the whole array if necessary.
|
||
|
|
And it does that before displaying the prompt for a new command. This is used in all sorts of
|
||
|
|
contexts. People are doing fancy things with their prompts and so on, often use this to get
|
||
|
|
information about stuff they need for the prompt and it's a common way to hook monitoring commands
|
||
|
|
into a bash session. What was the oven called? Auto jump did something similar and I've got various
|
||
|
|
other tools that hook into this. So it's quite a cool way of doing it. I just thought you might
|
||
|
|
be interested to know how it does that. So how do you set it up? Well it's shell specific
|
||
|
|
and I run bash so I've added it to my bash rc by adding the command and the command is a vowel
|
||
|
|
then in double quotes dollar open bracket Zoxide init bash close bracket closed all quotes. Not
|
||
|
|
that doing is it's running a command substitution in a string which is called Zoxide with the
|
||
|
|
arguments init and bash which init means do initiate initialization stuff and it needs to know
|
||
|
|
which shell you want it for. So that's what bash does. An eval is a bash command which will
|
||
|
|
evaluate whatever comes out of an expression like this as commands in the in the current context.
|
||
|
|
So there you go it will have done things like it's it creates a function which is it just
|
||
|
|
consists of the single letter Z and that's just a shorthand way of invoking Zoxide. It doesn't have
|
||
|
|
the full functionality of the full length command but it'll it's great for just zooming around the
|
||
|
|
place. It's also a function Z i which lists all of the stored directories and it uses FZF to do this.
|
||
|
|
Now I haven't tested this without FZF so I'm not sure what it does if you haven't installed that.
|
||
|
|
The scrollable list that you get can be navigated in a directory chosen by pressing Enter or with a
|
||
|
|
double mouse click. So in the scrollable list if characters are tight there's a sort of prompt at
|
||
|
|
the bottom of the list. I think you can organize where that is in fact but say it's the bottom of
|
||
|
|
the default. If you type stuff there then those I use to match directories in the list so you can
|
||
|
|
have quite a long list and then type stuff and gradually the list shrinks as you add letters to
|
||
|
|
to the prompt until hopefully you end up with the one you wanted and this is fantastic if you've
|
||
|
|
forgotten exactly how you named a directory but you know approximately how how you did it.
|
||
|
|
So you can tune this you might expect so you can modify its behavior through environment variables
|
||
|
|
and you can also change it when you call the init variant but I won't go into this that particular
|
||
|
|
bit. So for example you can define directories which are not to be stored in the database using
|
||
|
|
an environment variable which is called underscore and all in uppercase z0 underscore exclude underscore
|
||
|
|
doors and you've got to do this before running Zoxide init. In my case I have the following in my
|
||
|
|
bash rc which is export underscore z0 underscore exclude doors equals and then I put in quotes slash
|
||
|
|
media slash extras colon and then slash media slash extras slash star asterisk close quotes and
|
||
|
|
that comes before the eval that I mentioned before. So that means that the particular directories
|
||
|
|
which is the the disc that I have with various odds and odds in it which I don't really want to
|
||
|
|
be cluttering up my directory stuff the database of directories I should say. There's lots more
|
||
|
|
details about this in the GitHub documentation. So the documentation is really good and I've linked
|
||
|
|
to the GitHub page in several places in the notes and also I've linked to the FZF GitHub page.
|
||
|
|
So I actually installed Zoxide from the Debian testing repository but that mean I got a version
|
||
|
|
which is not not very recent 090 is the latest and I got 0.4.3 which not ideal you can install it
|
||
|
|
from the GitHub page and there's an install script you can simply download with co and pipe to
|
||
|
|
bash. I'm never too comfortable about doing this but you can do that. I think I might do that
|
||
|
|
at some stage and what you get is a binary so you don't have to build it because building rust can
|
||
|
|
be a little convoluted. I also installed FZF from the Debian testing repo. This is an extraordinarily
|
||
|
|
powerful tool. The man page itself is giant but yeah I haven't really spent much time learning
|
||
|
|
what it can do. I think it can search through your command history and file system and all this
|
||
|
|
sort of stuff. Looks amazing. So my conclusion about Zoxide or Zoxide or Zoxide or whatever it's
|
||
|
|
called is I really like it. It's fast and configurable and with FZF gives some great command line
|
||
|
|
features. There are editor plug-ins as well such as Zoxide.vim for Vim and NeoVim. I haven't
|
||
|
|
tried that yet. It also integrates other third party tools. Just out of interest if you're
|
||
|
|
KDE user like I am and use Dolphin a lot then the hooks that watch which directly you're in
|
||
|
|
triggered by Dolphin as well not too surprisingly. So you will get a benefit from it there as well.
|
||
|
|
I don't know if there's an interface to Dolphin. That would be really cool. So you could
|
||
|
|
you can get to places without knowing too much about where they are but if it's not there yet
|
||
|
|
it probably will arrive at some point or other. So I would say this seems to be the best
|
||
|
|
enhanced CD look like. It's type so I would strongly recommend it. Okay that's it. Bye.
|
||
|
|
You have been listening to Hacker Public Radio at Hacker Public Radio. Does it work?
|
||
|
|
Today's show was contributed by a HBR listener like yourself. If you ever thought of recording
|
||
|
|
or cast, you can click on our contribute link to find out how easy it means. Hosting for HBR has
|
||
|
|
been kindly provided by an onsthost.com, the internet archive and our sings.net. On the Sadois
|
||
|
|
stages, today's show is released on their creative commons, attribution, 4.0 International
|