A lot of my workflow tips focus on cutting down time for small annoyances, such as navigation or tasks that don’t contribute to productive work. It’s true, I probably spend more time thinking about these things than they actually save me. But, the value for me is the mindset – when I leverage these improvements, I feel faster and more productive. I run into less obstacles in my workflow, allowing me to capitalize on my focus and get things done more effectively.
This is a quick rundown of some of the tools that I use in my development workflow. I’ve made it versatile and adaptable to many different projects and environments. It helps me speed up my work and focus on what’s important.
Viewing a file in the CLI is a quick way to verify the contents without opening in an app. The standard way to view the contents of a file is
cat, but now there is a better version called bat. It has syntax highlighting, integrates with git diff, and adds pagination. I simply aliased
cat to run
bat and it has been a sublime experience.
ls is an essential part of viewing your current directory, but exa adds more color and information at the same speed. I simply replaced
exa as it works exactly the same way but provides more information. It also has a tree view, for which I aliased
lst = exa -T.
cd, zoxide is a powerful tool to help you navigate directories quickly and based on usage. Instead of having to navigate to the directory manually, zoxide will automatically determine where you intended to go and jump there automatically, skipping the intermediate directories.
Before GitHub came out with their CLI tool
gh, I used
hub. I made the transition to
gh because of its official support from GitHub. Although I don’t use many of its features (such as listing issues and reviewing PRs), I do enjoy a lot of its functionality. For example, you can automatically create a new repository based on the contents of your current directory, or create a PR from your current branch. These small things help me stay in the CLI and not have to navigate to GitHub on my browser.
I used to run
rm -rf when I needed to delete something in the terminal, which is extremely unsafe. trash is a great tool to move things to the macOS Trash so that they’re recoverable in case you need them again. It’s a much less destructive way of deleting files and directories on your computer, and gives me peace of mind when I delete things in my command line.
One of the features that I leverage the most is the aliasing commands. Although this isn’t special to zsh, I appreciate the ability to type just a couple of letters to run long commands.
Open and Code
open . to open the directory in Finder, and
code . to open the directory in VSCode. These are super handy because I use these a lot, and I save a few keystrokes.It makes things feel a lot quicker and like I can move around faster.
A major annoyance in development are
.DSStore files that pop out of nowhere. I have no idea what they do or what purpose they serve, but even when I put it in the
.gitignore they still somehow appear everywhere. To deal with this, I found a recursive solution to delete them all in a given directory, just by typing
This makes it easy – whenever I see one of them appear again, I run
ds and they all disappear.
Removing Local Git Branches
Another annoyance is that git doesn’t have a command to delete old local branches that don’t exist on origin anymore. So, I created an alias
prune that will do this.
This will remove all old local branches and clean up your local git directory.
Resetting Git Project
I move in and out of a lot of different projects, and I like to work knowing that I’m on the latest version. I created a command,
grp (git reset please), to “reset” the project I’m working on to the latest on origin. All this does is git fetch, git checkout master, git pull origin master, prune. When I haven’t worked on a project in a while, this is a good way to reset the entire project into the latest state.
I don’t think any developer needs a screensaver for their terminal. Most probably don’t even want one. But when I came across pipes.sh I figured it would be fun to have. I looked around a bit more, and found a newer version built in rust, pipes-rs. I aliased it to
ss for “screensaver”. I have rarely used it, but I think it’s neat that I could use it if I wanted to.