All Projects → btipling → fe

btipling / fe

Licence: other
A super-fast and easy to use command line fuzzy file searcher built with the rust programming language.

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to fe

Nat
nat - the 'ls' replacement you never knew you needed
Stars: ✭ 1,129 (+4808.7%)
Mutual labels:  cargo, command-line-tool
wlc
Weblate command line client
Stars: ✭ 22 (-4.35%)
Mutual labels:  command-line-tool
vimwasm-try-plugin
Try Vim plugin on your browser without installing it using vim.wasm!
Stars: ✭ 21 (-8.7%)
Mutual labels:  command-line-tool
ropr
A blazing fast™ multithreaded ROP Gadget finder. ropper / ropgadget alternative
Stars: ✭ 200 (+769.57%)
Mutual labels:  command-line-tool
mixpanel-engage-query
Command line tool to query the MixPanel Engage API for People Data.
Stars: ✭ 48 (+108.7%)
Mutual labels:  command-line-tool
shelltestrunner
Easy, repeatable testing of CLI programs/commands
Stars: ✭ 93 (+304.35%)
Mutual labels:  command-line-tool
ut-cli
A command line tool to handle a unix timestamp.
Stars: ✭ 13 (-43.48%)
Mutual labels:  command-line-tool
cargo-testify
Watches changes in a rust project, runs test and shows friendly notification
Stars: ✭ 76 (+230.43%)
Mutual labels:  cargo
anyshortcut-cli
CLI (Commnad line interface) version of Anyshortcut
Stars: ✭ 82 (+256.52%)
Mutual labels:  command-line-tool
medic
Perform bulk URL status checks and track changes.
Stars: ✭ 24 (+4.35%)
Mutual labels:  command-line-tool
rfc-bibtex
A command line tool that creates bibtex entries for IETF RFCs and Internet Drafts.
Stars: ✭ 43 (+86.96%)
Mutual labels:  command-line-tool
ttdl
TTDL - Terminal Todo List Manager
Stars: ✭ 91 (+295.65%)
Mutual labels:  command-line-tool
przm
🎨 A simple, yet feature rich color picker and manipulator
Stars: ✭ 19 (-17.39%)
Mutual labels:  command-line-tool
ModuleInterface
Swift tool to generate Module Interfaces for Swift projects.
Stars: ✭ 70 (+204.35%)
Mutual labels:  command-line-tool
rctl
A set of command line tools based on R and JavaScript.
Stars: ✭ 15 (-34.78%)
Mutual labels:  command-line-tool
metronome
A set of tools for modifying and randomizing Pokémon games
Stars: ✭ 23 (+0%)
Mutual labels:  command-line-tool
SimpleSqlExec
Lightweight command-line utility to execute queries on SQL Server in place of SQLCMD
Stars: ✭ 20 (-13.04%)
Mutual labels:  command-line-tool
Ether
A Command-Line Interface for the Swift Package Manager
Stars: ✭ 86 (+273.91%)
Mutual labels:  command-line-tool
cli-progress
⌛ easy to use progress-bar for command-line/terminal applications
Stars: ✭ 672 (+2821.74%)
Mutual labels:  command-line-tool
cmany
Easily batch-build cmake projects!
Stars: ✭ 15 (-34.78%)
Mutual labels:  command-line-tool

Fe

Fe is on crates.io!

Fe is a sophisticated, yet simple to use file listing utility. Use Fe to list files in a directory or to recursively find files by their names using a fuzzy pattern. Fe's speeds are comparable to find, and often times faster.

Installation

From cargo:

$ cargo install fe

From source:

Build with rust:

git clone https://github.com/btipling/fe.git
cd fe
cargo install

Homebrew and debian/aptitude packages with binaries are planned.

Usage:

$ fe --help
fe 1.0.0
Helps you find files with a fuzzy search.

USAGE:
    fe [FLAGS] [pattern]

FLAGS:
    -e, --exact          When you want an exact match. Probably best used with -n for searching
                         names.
    -h, --help           Prints help information
    -i, --insensitive    Sets the filename pattern to be case insensitive
    -n, --name           Search name and extension only.
    -p, --plain          Don't print colors.
    -r, --regex          Use a regular expression instead of a fuzzy search.
    -V, --version        Prints version information
    -v, --verbose        Print additional information during search. Use -vv for extra verbose debug
                         information.

ARGS:
    <pattern>    Sets the optional pattern to search for, if omitted it shows the files in the
                 current directory. Patterns that end with a / are treated as literal paths and
                 will result in a directory listing, not a search.
$ fe PatchSyntax
platform/vcs-api/src/com/intellij/openapi/diff/impl/patch/PatchSyntaxException.java

It respects .gitignores and is more ergonomic than using find when you just want to find a file:

$ time fe gulp
gulpfile.js
        0.00 real         0.00 user         0.00 sys

Fe can list directories and shows colors similar to ls:

fe supports colors

Compare the same search with find on the same code base:

$ time find . -name "gulpfile.js"
./gulpfile.js
./node_modules/escope/gulpfile.js
./node_modules/esrecurse/node_modules/estraverse/gulpfile.js
./node_modules/estraverse/gulpfile.js
./node_modules/gulp-stylus/examples/gulpfile.js
./node_modules/macaddress/gulpfile.js
        0.55 real         0.02 user         0.28 sys

It works with unicode:

$ fe 犬
lib/src/犬ハチ.java
java/java-impl/src/com/intellij/internal/diGraph/impl/犬ハチ.java

You can use turn off colors when you need to with -p:

~/p/r/fe (master) $ fe foo
foo.sh
~/p/r/fe (master) $ cat (fe -p foo)
#!/usr/bin/env bash

echo 'foo'

Fuzzy finding

Fe finds files by unicode alpha-numeric characters. It works much like IntelliJ's fuzzy file opener. Searches start matching at word start, and on match failure stop matching until the next word. Words are separated by UTF8 non-alphanumeric characters.

This finds main.rs because m matches the first word of main and rs matches the extension from the start.

~/p/r/fe (master) $ fe mrs
./src/main.rs

This matches src and main.

~/p/r/fe (master) $ fe srcmain
./src/main.rs

Here Ca matches the beginning of Cargo and tom matches the beginning of the toml extension.

~/p/r/fe (master) $ fe Catom
./Cargo.toml

This finds non-rust files because r matches the first character of rebase and the first character of sample.

~/p/r/fe (master) $ fe rs
./.git/hooks/pre-rebase.sample
./.git/hooks/pre-receive.sample
./src/find.rs
./src/main.rs

This finds all the files that match src.

~/p/r/fe (master) $ fe src
./src/cli.yaml
./src/find.rs
./src/main.rs
./src

This is a pretty specific match:

~/p/r/fe (master) $ fe workspace
./.idea/workspace.xml

Special thanks

A big thank you to @ajslater who provided valuable feedback and also to @brson who helped review the conditional compilation code!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].