My answer to "How do you use Emacs without a directory tree on the side of the editor?" on quora.com
This is original link of the question. Please note I focus on programming for large projects. I need search/grep/modify files scattered in different places without documentation.
If your use case is different, a embedded file explorer may be a better choice
Tools I use to replace a file explorer
- ido-find-file (emacs), just type any characters, it will fuzz search matched file in parent/sibling/current/or-whatever directory.
- helm-find-file (emacs), this one use regular expression and has bigger window
- recentf and helm (emacs), I use regular expression open recent opened files.
- ctags, gtags or whatever tag tools (CLI tool), as mentioned by other people
- I also use lots of bash functions written by myself, those functions are trivial, but combined with a wonderful tool called percol, they become really powerful.
- I use some CLI clipboard tool so I can easily share the file path between terminal/emacs/firefox.
- there is also a emacs bundled feature called speedbar, which is similar to the file explorer, I used it once, but it does not fit in my ninja style ;) It's fine but the UI is almost same to those average text editors.
- I also write some elisp snippets, for example, convert absolute path to relative path; given one relative path, output one absolute path, etc …
- there is also some git based emacs plugin: you can search file under the project root directory.
- there is a CLI tool called fasd which can let you interactively select the file or folder you recently visited.
- many other tools, plug-ins, code snippets I can use …
Use case
- I need search a big project for a certain library (it's a freemarker file I need include) whose full path I don't know, I just search the API's name by type:
"gef keyword *". gef is my bash function based on grep.
- matched files are displayed instantly (grep is much more quick than IDEs, BTW) in a interactive console filter (use percol), I type a regular expression to filter file name and press enter
- the full path is in clipboard now, then I type ":e Shift-insert" to open that file.
This is the most difficult case, I usually strike less keys and not get out of Emacs.
- If i need insert this file's relative path, I press a hot key and another emacs plugin will correctly convert absolute path to relative one (relative to the file I'm editing in Emacs) and insert it into my editor.
Demo
Here is screen cast. In this demo I grepped and open a ftl file and then search another js file in the same project.