FVI — Vim paired with Grep


Ken Kundert





Opens files that contains a given pattern in vim. You may specify a collection of files to search, otherwise all files in the current working directory and all sub directories are searched.

Within vim use n to move to next occurrence of pattern. Ctrl-n moves to next file and ctrl-p moves to the previous file. vim is run with autowrite set. Any directories, unreadable files, or binary files in the file list are ignored.

The pattern is a literal text string. Regular expressions are not supported.

Use – to terminate the command line options. Any thing that follows – is treated as the pattern. You can search for patterns that start with - by preceding the pattern with –.


fvi [options] [–] pattern [file … ]


-i, --ignore-case

ignore case

-w, --word

match a word

-o, --only <glob>

a glob string used to specify desired files, can use brace expansion to specify multiple globs

-e, --exclude <glob>

a glob string used to filter out unwanted files, can use brace expansion to specify multiple globs

-H, --hidden

include hidden files

-b, --binary

do not skip binary files (any not encoded in ascii or utf-8)

-g, --gvim

open files in gvim rather than vim

-v, --vim

open files in vim rather than gvim

-W, --warn

do not suppress warnings about directories and binary files

-h, --help

show help message and exit

If both --only and --exclude are specified, both must be satisfied.


Search specified files:

fvi ‘#!/usr/bin/env python3’ ~/bin/*

Search all files in current hierarchy:

fvi ‘unknown key’


Runs only on Unix systems. Requires Python 3.6 or later.

Install using:

pip install fvi


The file ~/.config/fvi/settings.nt is read if it exists. This is a NestedText file that can contain settings: vim, gvim, and gui. The first specify the commands used to invoke vim and gvim. The last is a Boolean that indicates whether gvim is used by default (use yes or no). For example:

vim: vimx
gvim: gvim
gui: yes

In this example, vimx is used rather than vim so that copy and paste using X11 works as expected.