6 ms·
Shunpo: Minimalist bash tool to make directory navigation a little bit faster
- cipehr 2y agoInteresting approach. Since I've converted entirely to nushell, I'm using zoxide to solve this navigation friction. https://github.com/ajeetdsouza/zoxide https://github.com/ajeetdsouza/zoxide The only thing I'm missing from zsh is path aware auto completion... supposedly this works if you enable the sqlite history for nushell but iirc it was buggy.
- phaer 2y agoJust a note that zoxide isn't specific to nushell in any way: I use it with great satisfaction in both zsh and bash!
- neontomo 2y agoI made this helper function to navigate my projects, recursively, it will list them if there are more than one, but defaults to the first one unless you give it a number. syntax: projects <project-name> <match index> alias: function projects() { if [ -z "$1" ]; then echo "please provide a project name" return fi local allMatches=$(find ~/Documents/projects -maxdepth 2 -type d -name "*$1*" -print) local firstMatch=$(echo "$allMatches" | head -n ${2:-1} | tail -n 1) if [ -z "$firstMatch" ]; then echo "no matches found" return else if [ $(echo "$allMatches" | wc -l) -gt 1 ]; then echo "matches found:" echo "$allMatches" | awk '{print NR ") " $0}' fi cd "$firstMatch" fi }
- gleenn 2y agoI really like "jump" which I have aliased to "j". It auto learns and you can also pin shortcut names so I don't have to fuss configuring it but also can control certain ones. Great trade off between usability and configurability. Can't find the repo but "brew install jump" works :)
- Amorymeltzer 2y ago<https://github.com/gsamokovarov/jump https://github.com/gsamokovarov/jump> Personally, I've been using z (<https://github.com/rupa/z https://github.com/rupa/z>) for ages and never really needed more.
- scary-size 2y agoAgreed! „z“ and atuin (https://github.com/atuinsh/atuin https://github.com/atuinsh/atuin) cover most of my needs.
- smartmic 2y agoYes, z, and for interactive navigation the `simple directory navigator` sdn [1] - together with `ls` that's all I need. [1] https://git.janouch.name/p/sdn https://git.janouch.name/p/sdn
- thegeomaster 2y agoLove the Bleach reference in the name.
- AdieuToLogic 2y agoA project-specific zsh[0] function I find quite handy is: devhome () { cd $DEV_HOME/${~1}(/) } This assumes an environment variable DEV_HOME is assigned to be the location of the top-level directory for a given project. An example of its use is: devhome mod*/foo/src/**/some-dir 0 - https://www.zsh.org/ https://www.zsh.org/
- arccy 2y agoi mostly use this to go from inside a repo up to the root: alias rr='cd $(git rev-parse --show-toplevel)'
- AdieuToLogic 2y agoThis is certainly a viable alternative to requiring a project-specific environment variable. The downside is it can only succeed if $PWD is within the local git repo. If this is the preferred approach, however, an alternative zsh definition for devhome could be: devhome () { cd $(git rev-parse --show-toplevel) && cd ./${~1}(/) }
- James_K 2y agoI have a utility called ZSH Autosuggestions, and it's probably one of the most useful things on my computer. It shows you a sort of preview of the most recent command you typed that matches the prefix of the current command you are typing. It's basically an automatic tool that bookmarks commands based on usage. I think the best bookmark systems are ones which simply track your entire history and suggest relevant pages based on it. That way the process of bookmark creation is automatic and you don't have to predict what you will need to access frequently. https://github.com/zsh-users/zsh-autosuggestions?tab=readme-ov-file https://github.com/zsh-users/zsh-autosuggestions?tab=readme-...
- eddd-ddde 2y agoThis is essentially a fish built-in. I used to use zsh before, but since changing to fish I've never looked back. Auto completion, abbreviations, better syntax, and especially the auto complete is like magic. It also seems to "know" in which working directories some commands work and won't suggest them if they arent.
- Tmpod 2y agoI have to concur, fish is simply an amazing shell for interactive sessions. I've been using it for so long, I just take some things for granted, like the incredible autocomplete. As far as I understand, it looks at paths in history entries and won't suggest them if those aren't valid in the current directory. Then you also have the "shadow suggestion" described by GP, the Alt+arrows to just complete part of a history entry, the really good Ctrl+s (which also works for commands that implement fish suggestions, not just history), and so on. Extremely useful on a daily basis.
- qudat 2y agoAgreed, zsh autocompletions are noticeably worse than fish and is precisely why when I switched to fish it was over
- frutiger 2y agoThis is also a `bash` (or rather any `readline` app) builtin. $ cat .inputrc set editing-mode vi set keymap vi-command k: history-search-backward j: history-search-forward Type any prefix, press `<esc>k` (or `<up>` in emacs mode) and it'll prefix match on history. Keep pressing `k` for older matches.
- ndegruchy 2y agoI end up using $CDPATH a lot for initial movement. While it's probably not as comprehensive as this, I find it and something like zoxide can cover a lot of ground.
- scosman 2y agoI’ve used “bashmarks” for this for years: https://github.com/huyng/bashmarks https://github.com/huyng/bashmarks Super handy. This looks like it might be more polished version.
- notnmeyer 2y agooh man, i had no idea stuff like this (or pushd/popd existed). i’ve been writing so much ugly bash to do this myself… whoops
- kayson 2y agoI use https://github.com/jarun/nnn/ https://github.com/jarun/nnn/ with `cd` on quit if I need to scan around manually. Otherwise, zoxide.
- deleted 2y ago[deleted]
- sevg 2y agoIt’s kind of funny (in a good way) how there’s already been about 10 other ways mentioned in the comments! We do seem to love our directory navigation tools :)
- 1propionyl 2y agoThere's a glaring issue with this... one of its commands conflicts with the absolutely crucial system administration tool `sl`. :-)
- monroewalker 2y agoI've been pretty happy with Ranger (https://github.com/ranger/ranger https://github.com/ranger/ranger)
- stuaxo 2y agoIn DOS I used to something like this, using ctrl or alt and an f key to set or go to a bookmarked directory.
- ray023 2y agoI never used pushd and popd. Did not even know about them. But I use autojump it give directories a prioroty numbers and then you just have to type "j pro" and you cd into your projects folder for example. https://github.com/wting/autojump https://github.com/wting/autojump just looked at it again it also has a jc command for child directories and commands to open file explorer that I never used.
- kristopolous 2y agopushd/popd are over 40 years old btw. Used to use them in the 90s. I decided invisible states requiring working memory create a cognitive split encouraging user error because you have to maintain the focus of the task and the invisible parts of the tool you're using to do the task. Well ok, Jef Raskin decided that and I happen to agree with him. My extension is "anything that requires traversing either taxonomies or invisible geometries is too much to ask." So for instance, tmux splits previous-pane and previous-window into two things so the "last thing I was looking at" now asks you to consider whether that was in a pane or a window[1] ... as if you had taken the time to diligently organize it (traversing taxonomy). Xorg's split of the clipboard into CLIPBOARD, PRIMARY, SECONDARY, CUT_BUFFER0-9 and every program having a different opinion on how to copy and paste into them is another one. And then tools like tmux have their own and tools like vim and emacs have their own. So vim, inside of tmux, inside of ssh, inside of some terminal ... right. [2] Similarly, the multi-dimensionality of many tiled window managers (where you have up, down, left, right, tab left, tab right, workspace (up/down/left/right) etc ...) is like navigating via hypercube. It's way too complicated to keep a mental model of and leads to lots of errors. I still use one because there's no other reasonable way to leverage the multi-tasking abilities of modern machines but it leads a lot to be desired. My user error rate is probably over 80%. I'm sure some geniuses can do it but most people cannot. [1] I have a fix! Add this to .tmux.conf set -g focus-events on bind-key l run-shell "$HOME/bin/tmux-last switch" set-hook -g pane-focus-out "run-shell 'tmux set-option @out #{pane_id}" set-hook -g pane-focus-in "run-shell '$HOME/bin/tmux-last in #{pane_id} #{@out}" Where tmux-last is https://9ol.es/tmp/tmux-last https://9ol.es/tmp/tmux-last [2] If you are a traditionalist using xterm or some derivative, this block taken from my .Xresources should be enlightening *VT100*translations: #override \n\ ~Shift~Ctrl<Btn2Up>: insert-selection(PRIMARY, CUT_BUFFER0) \n\ Shift~Ctrl<Btn2Up>: insert-selection(CLIPBOARD, CUT_BUFFER1) \n\ Ctrl Shift <Key>V: insert-selection(CLIPBOARD, CUT_BUFFER1) \n\ Ctrl <Key>V: insert-selection(PRIMARY, CUT_BUFFER0) \n\ ~Shift <BtnUp> : select-end(PRIMARY, CUT_BUFFER0) \n\ Shift <BtnUp> : select-end(CLIPBOARD, CUT_BUFFER1) \n\ It's still strait jacket drooling insanity, but at least it's a little less. Probably the actual fix in X would be to somehow route all clipboards through DBus so then the user AND the application can have their own opinions and not have to have a bunch of accommodations for each other.
- alhadrad 2y agocdbuff: Your Grandpa's cd Command https://github.com/akoerner/cdbuff https://github.com/akoerner/cdbuff
- wolfhumble 2y agoLooks great, thanks! Would also be nice to be able create bookmarks to regularly used commands as part of the "Shunpo package". That way one wouldn't need to use another tool for these type of cases. Thoughts?
- sandreas 2y agoNice. While I prefer a combination of these tools fzf zoxide fd Small helpers are always good to have. Thanks for sharing
- VHRanger 2y agoI use Yazi with all of those - it also has ripgrep integrated Between all of those it's hard to think of a better experience navigating a filesystem.
- sandreas 2y agoI also use yazi along with kitty. Unfortunately I did not find an (acceptable) way to simulate the behaviour of ddterm GNOME extension with kitty or alacritty. A dropdown Terminal with image protocol for file preview would be very cool.
- VHRanger 2y agoCan you explain what this does? From screenshots I can't tell what the ddterm user experience is I personally tend to wezterm nowadays, kitty breaks too many things, especially over tmux/ssh (or combination thereof and with zellij) I'll also admit to liking iterm2 on macos a lot
- sandreas 2y agoddterm is just a drop down terminal extension for gnome (like Guake or Yakuake). Dropdown means that it has an animation to drop from the top of your screen. You can configure it to be an overlay or pushing away the other windows. I'm not really sure why I like it so much, but it feels natural.
- smitelli 2y agoSeems like as good a time as any to show off this cursed thing I keep in my dotfiles: # Allow .. through ........... (yup!) to cd up some number of directories. for i in {1..10}; do spaces=$(printf "%${i}s") alias "${spaces// /.}."="cd ${spaces// /../}" done Going into it, I thought it would be something I'd use all the time. In practice all I ever use is `..` and not nearly as much as I originally imagined I would.
- lordgrenville 2y agoI have something similar (though less elegant). I find the best use case to be hitting ..........<RET> to get to root (in conjunction with zsh auto_cd option), rather than typing `cd /`.
- akprasad 2y agoI use something similar: .. , .2 , .3 , etc.
- deleted 2y ago[deleted]
- GNOMES 2y agoI use an Array + Sed to go backwards in path to an exact directory without having to spam cd ..: https://gist.github.com/GNOMES/6bf65926648e260d8023aebb9ede9573 https://gist.github.com/GNOMES/6bf65926648e260d8023aebb9ede9...
- penguin_booze 2y agoYou can use `ranger` to interactively navigate to and select a directory: cdranger() { local tmpfile="$(mktemp)" local cdto ranger --show-only-dirs --choosedir="$tmpfile" "$@" cdto="$(cat $tmpfile)" rm -f "$tmpfile" if [ "$cdto" ]; then cd "$cdto" fi }
- chanux 2y agoI guess I'll share what I built for myself. https://gist.github.com/chanux/1119556 https://gist.github.com/chanux/1119556 (bash) https://gist.github.com/chanux/9411092 https://gist.github.com/chanux/9411092 (fish) That's `za <n>` to go back n directories up. It's a decade old and I still use this everyday. I experimented with jumping up directory path by name with `xs`. But I don't use it that often (at all). https://gist.github.com/chanux/08c6f53472190a02b33bd49100163d93 https://gist.github.com/chanux/08c6f53472190a02b33bd49100163...
- layer8 2y agoI have the following in my .bashrc: alias .='dot_func' alias ..='cd ../..' alias ...='cd ../../..' alias ....='cd ../../../..' alias .....='cd ../../../../..' dot_func () { if [ $# -eq 0 ]; then cd .. else source "$@" fi } It’s usually enough. :)
- wink 2y agoI had an alias ... for years and noticed I never really used it. `cd ..` coupled with `cd ~` seems to be good enough, really.
- tetris11 2y agoEmacs + projectile + eshell
- layer8 2y agoAn alternative is to use CDPATH [0], and possibly a directory containing symlinks as bookmarks. That way you can also switch between different sets of bookmarks by changing CDPATH. Add some shell aliases for managing that setup. [0] https://www.gnu.org/software/bash/manual/html_node/Variable-Index.html#Variable-Index_vr_letter-C https://www.gnu.org/software/bash/manual/html_node/Variable-...
- tonijn 2y agoJump around! https://github.com/rupa/z https://github.com/rupa/z
- wetpaws 2y ago[dead]
- karlin 2y agoThis is great! I wrote a very similar tool for myself a long time ago: “wd” or Working Directory. Uses similar numeric slots but also has named “schemes” and sets environment variables for your slots for you. https://github.com/karlin/working-directory https://github.com/karlin/working-directory