This question is on the "do everything through the terminal" mindset. I find navigating through the file system very inefficient. My typical workflow is:
I want to go to ~/foo/bar/boo/far/my/project/file.txt
…
cd ~
cd foo/b...???
# okay, I won't quite remember what bar was called
# let me just go to "foo" and view it
cd foo
ls
# Oh, it was bar
cd bar
# Now, what was after bar again?
ls
# boo, that is it.
cd boo
pwd
ls
cd for
cd my
# ERROR: my not found
ls
# at this point I'm kinda lost where I am
pwd
cd ..
cd far
cd my
cd pro<tab>
cd proj<tab>
cd proje<tab>
# wtf am I in the wrong directory again?
ls
# notice there is a directory called projectiles, that's why it doesn't work
cd project
vim fi<tab>
Now I want to go to ~/foo/bar/boo/settings.txt
cd ../../..
vim set<tab>
# notice I'm editing a completely different file
# wtf
# :q
ls
# oh I'm in the wrong place
pwd
cd ..
vim set<tab>
# :q
# Done!
In a perfect world, I'd probably just type vim ~/foo/bar/boo/far/my/project/file.txt
, but in a real-world workflow, that would be the equivalent of just typing the source code of a program from line 0 to the last line without missing a character. That's now how work works — you need some kind of interaction, it is a steppy and messy process. And using cd
, ls
and pwd
for that is very inefficient to me.
Is there a better way? Am I missing something?