Fast interactive code browsing.
This bash script uses fzf to allow users to interactively search a source tree. It is primarily meant to search code trees but it can be used to repeatedly grep and view/edit any type of text files.
It displays the search results on the left panel and automatically updates the results when the user changes the search query. Unlike other code navigation tools, it dynamically shows the results as the user types and updates the query. The right panel displays a preview of the selected file.
When the user selects an entry from the result list, the tool automatically opens an editor (e.g., vim or emacs) on the line that was selected.
It has only been tested in OS X and with vim/emacs.
Installation steps:
- Install the required/recommended packages
- Install the script
- Generate the index and tag files
Code-browser only requires the fzf fuzzy search tool and an editor.
The current version supports vim and the emacs editor. It is recommend to use it with highlight and more importantly ctags (or similar code navigation tool).
Installation under OS X using the brew package manager:
-
Install
brew(https://brew.sh/) -
Run the command:
$ brew install fzf highlight ctags
In bash execute from the shell (assuming code-browser.bash file is in the current directory):
$ git clone https://github.com/rssys/code-browser.git
$ cd code-browser
$ source ./code-browser.bash
To make this change permanent add this source command to your ~/.bashrc file and specify the full path of the code-browser.bash file.
This tool requires the generation of an index file (INDEX.txt). The index file needs to be updated when the source files change and is simply generated with grep. In addition, to use the tags inside the editor, the tags file should also be generated.
To generate both files:
-
cdto the root of the source tree you want to browse -
Generate the
INDEX.txtandtagsfiles using thegenerate.shscript:$ <code-browser directory>/generate.sh <src_dir>(Replace <src_dir> with the names of the subdirectories and/or files to be included but don't include any old index or tag file.)
At the end of this process, there should be two files tags and INDEX.txt in the root directory of the source tree. Both files need to be updated when the source code changes by re-running the generation command. Include this command in the Makefile to make it automatic.
Note: it may also be necessary to tell the editor how to find the tags file. E.g., for vim it may be necessary to add to ~/.virmc the command: set tags=./TAGS;/,TAGS;/,./tags;/,tags;/
After installing the package, run the shell command g with an optional initial query argument. Make sure to run the command from the directory where the INDEX.txt file was created.
Running gg instead of g will repeatedly loop between the search window and the editor. Exit with "Ctrl+C" or the respective editor command.
Once inside the editor the user can use the ctags functions to follow the code path. For instance, in vim, with the default configuration, Ctrl+] follows a function/symbol and Ctrl+T goes back.
- Tools:
- Tutorials:
Please send code changes, under the same license, by submitting a pull request on github.
Pedro Fonseca, 2018 https://github.com/rssys/code-browser