fscache
monitors files on your computer and allows you to quickly gather
lists of them. Combined with fzf
or ctrlp
to get amazing mobility of your
computer.
It works, but is rough around the edges.
CtrlP is amazing for jumping around a repo, but it really struggles with listing all the files to fuzzy search from. For a long time I had a bit of code in my ctrlp config that essentially boiled down to:
[ cwd -e $HOME ] && "echo can't run ctrlp from home"
.
This worked, and prevented me from locking up my VIM every time I had the
misfortune of invoking it from the home directory. Combine this with git ls-files
and I had a working solution.
That was until I started working in a monorepo with around 50k files. Even
with git ls-files
CtrlP was struggling. Enabling caching made it manageable
but I was constantly struggling with the cache being out of date.
So fscache
was born. Something that would monitor and maintain a cache. Then
provide some tools for reading from it and quickly filtering it down to
relevant data. This made working in the monorepo quick, and allowed me to hop
around from my home directory.
flag | default | description |
---|---|---|
-debug | false | Enable debug logging |
-log-level | "error" | Set the log level |
-socket | ~/.cache/fscache.socket | Communication socket location |
Run starts the fscache server.
flag | default | description |
---|---|---|
-r / -root | ~/ | Where to start monitoring from |
mode | pebble | Which backend database to use |
Read fetches data from the server for use with another tool.
flag | default | description |
---|---|---|
-p / -prefix | "" | Limit returned items to subpath |
-r | false | Auto discover git root and set prefix |
-n | all | Number of items to return. 0 for all |
-b | 1000 | Number of items to return per batch |
-d | false | Only return directories |
-f | false | Only return files |
Stop either shuts the server down or restarts it.
flag | default | description |
---|---|---|
-r / -restart | false | restart instead of stopping |
fscache
can be used with VIM and CtrlP by using something like the following
setting.
let g:ctrlp_user_command = {
\ 'types': {
\ 1: ['.git', 'fscache read -p %s']
\ },
\ 'fallback': 'fscache read'
\ }
To integrate with fzf-vim simply add
the following to your vimrc
.
let $FZF_DEFAULT_COMMAND='fscache read -r'
fscache
can be paired with FZF to make a nice and easy command for jumping
around your computer.
function fzd() {
local refresh="fscache read -d"
if [ "$1" != "" ]; then
local initial_query="-q $1"
fi
local dir=$(eval $refresh | fzf \
--filepath-word \
--bind='ctrl-t:next-history'\
--bind='ctrl-r:previous-history'\
--bind='ctrl-n:down' \
--bind='ctrl-p:up' \
--layout='reverse-list' \
--tiebreak=length \
--bind='change:first' \
--header='Press F5 to reload' \
--bind="f5:reload(${refresh})" \
--history=$FZD_HISTORY $initial_query)
if [ "$dir" != "" ];
then
pushd -q $dir
fi
}