Maybe there is a tool that does that? Maybe I’m doing this all wrong and there is a different way I should browse?
Up arrow, ctrl-a, delete, delete,
cd, enterI use tab complete a lot to find a file/path. would
cd /foo/some<tab>/more<tab>/desti<tab>get you there any easier?Looks like no one has mentioned this yet. So I’ll be the FZF champion in this thread.
The ZSH plugin for FZF gives you a few commands that use the fuzzy search to find files by name, keyword in content etc.
It could be very easy to add something like that for your use case where you can use <your custom command> <file path> and you pick the file name from the output and it automatically cd’s into the selected file’s directory.
You mean something like this?
ls /your/long/path/name
cd !$And there goes my daily new knowledge snippet! Thanks!
To add,
!$ gets replaced with the last word from the previous command line
!! Repeats the most recent command
!-N Repeats the Nth previous command
!string Repeats the most recent command that began with ‘string’
If
!$isn’t pronounced “ba-ching!” I’m quitting LinuxBetter than “bang-ching” which sounds racist to me. lol
the (ng) is silent when used in compound punctuation in ba(ng)
okay, but now THAT sounds racist for whole OTHER reasons… ;-)
it probably is, that professor who taught me it was belgian
Great, now omarchy is going to adopt it
I just learned more about Linux than I did from my whole IT degree.
I learned Ubuntu in uni decades ago, and I didn’t know those commands exist.
You learned more about shells than you knew. This stuff works on BSD and some UNIX systems too, you know
Most POSIX-compliant systems?
!!is the goat when you needed to run the last command usingsudoHot damn, and here’s me thinking thefuck was the way to do this.
💯
… How have I used Linux for two decades and not run into this once. Amazing stuff
I’ve never come across this before, and I am completely unsurprised it exists.
I’m loving this
Huh - TIL about !-N
Thanks 🙏
Holy fucking shit. I’ve dabbled in Linux for so long to not know. Thank you!
I think, if your using bash
alt + .
Does the same thing as typing
!$
ls /super/long/path/to/dir
cd alt + .
I believe if you hit it again, it cycles through all previous last words
In some shells (e.g. fish), “running” a directory changes to it so you can save keystrokes and just delete the "ls ".
There’s already some great answers in the thread, so I won’t add to those.
Some shortcuts are shell-specific. For example,
!!,!:$, and^old^neware inbash, but not infish.Some things, like
Alt-.andCtrl-a, are implemented byreadline, which can be used elsewhere, as well, for example in the python interpeter.Depending on your context, it may be better to invest time learning methods implemented by
readline. While not necessarily universal, they are more versatile.There were heaps of functions I was using not realising they were from readline. For example,
Ctrl-rfor reverse interactive search,Ctrl-a/efor start/beginning if line,Ctrl-wfor deleting a word.You can hit TAB in any decent shell to autocomplete paths. Personally I highly recommend fish
Havent seen this mentioned: https://github.com/dylanaraps/fff
check the cd on exit part: https://github.com/dylanaraps/fff#cd-on-exit
What I do is: Up, Home, type
cd, Delete (hold/repeat as many times as needed), Enter.The Home key instantly brings your cursor to the start of the command line (before the
ls), even if the command is long enough to wrap.I’m not a terminal guru, and I don’t aspire to become one. I don’t want to memorize arcane symbols that each has a subtly different meaning, and I especially don’t want to execute them before I see explicitly what they’re going to do. So while the top comment of
cd !$is a perfectly good and correct answer, I offer this alternative in case you, like me, like to see what you’re doing as you do it. Home and End are pretty good.The seconds I’d save remembering which combination of dollar signs and exclamation points to use would never help me find a better job or otherwise improve my life. I’m okay with the up arrow too.
I had already found ctrl+a that brings me back to the front of the line. It’s bit more convenient for my hands than home.
I have a really strong muscle memory for Home so it’s super convenient to me, but ctrl+a sounds just as good.
ctrl-a: beginning of line ctrl-e: end of line ctrl-k: delete rest of line from cursor ctrl-u: delete line before cursor
these are helpful in these situations, as well.
The way I solve this problem is to use nnn instead of ls. It’s a full file manager for the terminal but so light and quickly started that it’s as convenient as ls (a lot more so actually). You can navigate around your file system with vim-like key bindings and then have the option to exit either to the directory you started from or the one currently displayed.
For me I replaced cd with https://github.com/ajeetdsouza/zoxide
cd to anywhere from anywhere, don’t even need to type the whole thing. Algorithm: https://github.com/ajeetdsouza/zoxide/wiki/Algorithm#matching
If you’re using bash and haven’t modified the readline default, which is to use emacs keystrokes:
$ ls foo/bar/baz
Just what I wanted!
Control-P Control-A Alt-D cd Enter
absolutely brilliant <slow clap>
You know, I always kind of wondered what happened when I accidentally pressed control C, control V or whatnot in bash.
Level unlocked
Well…Control-C is treated by bash differently than in emacs. It basically cancels the existing line and gives you a fresh line.
And IIRC, Control-V is also different, used to input literal control characters. Like, the terminal will handle that if it’s in cooked mode.
checks
$ od -xhits Control-V Control-C Enter Control-D
^C 0000000 0a03 0000002 $Yeah.
Control-U is also a notable difference I know off-the-cuff. In emacs, it’s the universal-argument prefix, which is an important way to pass arguments to functions. In readline, it’s kill-to-beginning-of-line.
Is it uncool to use a GUI?
Nah not at all, you do you but when you get used to the command line it’s generally much faster and offers a lot of power.
Use what you like.
I’m not OP, but I use SSH a lot, meaning I’m very much in a character-based terminal of some sort. :)
In addition to
^ls^cdI mentioned in another comment, I highly recommend you try “z”, installable on macos via “brew install z” (not sure if it’s available on linux package managers). Suppose you want to jump to ~/Desktop/project1/foo, you can just type “z foo”. It works without a full path, from anywhere, as long as you cd’d in there at least once.
Bookmarking this whole thread
The soft option perspective (I see plenty of command-line-only solutions here already):
These days, if I’m doing any major navigation, I do it the uncool way and use the GUI file manager bundled with my distro. I have the option enabled to show the “open a terminal at this location” button if I really want to start issuing commands.
If you’d rather stay on the command line, a compromise might be to use something like Midnight Commander. Back in my DOS days I used to use an equivalent there on a regular basis, but that’s because I hadn’t launched Windows and didn’t feel like it was necessary to do what I wanted. (It was possible to patch Win 9x to behave like earlier Win 3.x so that it stopped at the DOS prompt and didn’t load Windows, which fit my aesthetic at the time.)
These days I prefer my comforts and I sure as heck don’t boot Linux to a command line unless something’s really wrong!
If you’d rather stay on the command line, a compromise might be to use something like Midnight Commander. Back in my DOS days I used to use an equivalent there on a regular basis, but that’s because I hadn’t launched Windows and didn’t feel like it was necessary to do what I wanted.
Note that this class of file managers (two-pane, Norton Commander-alike) are called “orthodox file managers”.
https://en.wikipedia.org/wiki/Category:Orthodox_file_managers
https://softpanorama.org/OFM/index.shtml
My experience is that people out of Eastern Europe in particular seem to have a history of using these.
There are also some non-OFM console file managers, like
ranger, which might appeal to vim-folk:https://github.com/ranger/ranger
Ranger is a console file manager with VI key bindings. It provides a minimalistic and nice curses interface with a view on the directory hierarchy.
I use dired in emacs, which does a number of things similarly to an OFM if you have two panes open (though dired is not itself an OFM, and emacs does have Sunrise Commander, which is an OFM).
Generally, I live in bash, but I find that file managers are handy when you want to manually mark a set of files to run an operation on (like, you can’t programmatically identify them).










