working_set
Companion to your editor that makes searching, and using search results for jumping around, super nice.
Installation
Installing the gem adds the working_set command to your path.
$ gem install working_set
Install the plugin for your editor.
Note: Currently there's only a plugin for Vim, however Working Set will be compatible with any editor that can be extended and communicate via socket.
Usage
Run the working_set command in your project's directory.
$ cd my-project
$ working_set
working_set is now running, listening on a file socket, ready to receive commands from your text editor which you should run in a separate terminal but in the same directory.
$ cd my-project
$ vim
Options
Run working_set -h
to see a list of command line options:
--watch | -w
Tells working_set to monitor the filesystem for changes and refresh the
search results automatically when changes are detected. The value should be
point at the directory you want to monitor.
Example: --watch=app
Default: none, search results will not automatically refresh.
--context | -c
Sets number of contextual lines to show around matches.
Example: --count=3
Default: 1
--socket | -s
Sets the path for the socket file to create.
Example: --socket=/tmp/my-special-project
Default: .working_set_socket
--help | -h
Show help.
Commands in working_set
You can press '?' in working_set to see key bindings:
? - display help
q - quit
j - select next match
k - select previous match
ctrl-n - select first match in next file
ctrl-p - select first match in previous file
enter - Tell editor to jump to match
down arrow - scroll down without changing selection
up arrow - scroll up without changing selection
r - refresh search results
[ - decrease context lines
] - increase context lines
z - toggle showing match lines vs just matched files
y - copy selected match to system clipboard
Y - copy selected match + context to system clipboard
Todo
- Add support for searching straight from working_set using "/" key.
- Add support for setting search argument prefix as working_set command argument. e.g. --prefix="--ignore=tmp,vendor"
- Add support for bookmarks.
- Add support for search history.
- Add support for customizing key bindings.
- Document protocol so other plugin editors can exist.
- Document adapter so other search tools can be used.
Development
1) Fork the repo, clone the source code.
2) run bundle install
to install dependencies.
3) run bin/working_set -d
to execute the program with debug logging enabled
4) watch the debug messages: tail -f working_set.log
5) make code changes, restart working_set
to see their effect.
Please do submit pull requests to add features, fix bugs, etc. Please discuss before spending lots of time on large changes.