Overview
Vifm is an ncurses based file manager with vi like keybindings/modes/options/commands/configuration, which also borrows some useful ideas from mutt. If you use vi, vifm gives you complete keyboard control over your files without having to learn a new set of commands.
Features
To make it easier to understand use cases and to connect features to their configuration and controls some details are provided in spoilers.
- cross-platform (GNU/Linux, *BSD, Solaris, Windows, Mac OS)
- UTF-8 support
- user mappings (almost like in vi) ...
Input model is very Vi[m]-alike.
Each mode has set of commands for managing mappings (see :map, :noremap and :unmap) associated with it.
One-argument or no-argument form of mapping commands can be used to list existing keys.
Ambiguity leads to timeouts (see 'timeoutlen' option) as with builtin commands.
Mappings can include angle bracket notation to designate various special keys (e.g. Ctrl+X).
Note that mapped sequence can span across mode boundaries.
- ranges for command-line commands ...
Ranges provide a way to specify range of files to be processed.
Some commands process current selection by default (e.g. :substitute), others might operate on current directory (like :grep).
Employing ranges can change that to renaming all files with :%substitute/pat/subst
or grepping only file under the cursor with :.grep pattern
.
Since ranges are not always handy to type manually, normal mode contains ! command, which generates range, for example, hitting !G yields :.,$.
- user defined commands (support ranges)
- registers ...
Registers serve as additional buffers, which allow sorting files into several groups for later processing.
Some registers are managed implicitly and provide additional convenience, others need to be named explicitly on calling commands (e.g. "xdd deletes file(s) to x
register). Some registers are available by two names: lower case and upper case one; using first form reassigns register content, while the second one appends to it.
Registers are accepted by both shortcuts and command-line commands, the latter ones accept them as their arguments (for example, :delete and :yank commands).
:registers command yields menu that displays files in the registers.
Content of registers can be saved across sessions.
- operation undoing/redoing ...
Foreground file operations can be reversed and replayed again if their nature allows it. For example, deletion (not moving to trash) or file overwrite can't be reversed, on the other hand any rename operations can be reversed unless previous file names conflict with names of newly created files. Irreversible operations require explicit confirmation of some form.
Undo is u, redo is Ctrl-R.
Current history of operations is available via :undolist command. Maximum length of the list is configurable via 'undolevels' option.
Undo list is not saved across sessions.
- FUSE file systems support
- trash ...
Apart from being storage for files which are about to be erased this is also a place for files that were "cut" (which corresponds to "delete" operation in Vi[m]), but not pasted yet.
Trash is enabled by default ('trash' option) and it is better to leave it in this state. 'trashdir' can used to customize location of trash directories, which are media-specific by default and are named .vifm-Trash/
.
List of files in trashes is available on :lstrash command. :trashes lists trash directories themselves, optionally along with their sizes. Inside trash directory :restore command restores file to the place where it used to be, it's also possible to just move files by other means, which will automatically demangle their names.
:empty command is there to clean trashes in background.
Registers are connected with trashes, which allows managing several groups of files at the same time.
- multiple files renaming (also known as "bulk renaming" or "batch renaming")
- filename modifiers
- color schemes, which can also be applied to specific sub-trees ...
Schemes can be viewed and setup via :colorscheme command.
They can be applied either at global level or hierarchically for specific directory and all of its sub-directories.
Scheme files are no more than files with regular commands (mainly :highlight command). See preview or go for a download.
Almost default look
|
Custom scheme
|
Sub-tree specific color scheme
|
- file name color according to generic file type
- bookmarks
- operation backgrounding
- customizable file viewers
- handy less-like preview mode with support of colors
- (interactive) filtering out and searching for files using regular expressions
- one or two pane view (vertical or horizontal) ...
Single pane view is enabled by Ctrl-W+o or :only command.
Vertical split is activated by Ctrl-W+v or :vsplit command.
Horizontal split can be activated by Ctrl-W+s or :split command.
Any of the above commands can be placed into configuration file to setup initial view layout after startup.
Some operations work with both panes at the same time, e.g. :view or :copy commands.
Only layout
|
Horizontal layout
|
Vertical layout
|
- shell-like command line editing
- multicolumn view
- ls-like view
- customizable file name prefixes and suffixes
- built-in integration with GNU Screen and tmux
- external editing of command line
- multi-block selection
Main sections
- Contributing. Advices for those who would like to contribute bug report or feature request.
- Development. Some information about development process.
- FAQ. Answers to frequently asked questions.
- Glossary. Explanation of abbreviations or ambiguous words.
- HOWTOs. Tutorials on various subjects.
- Manual. Main tutorial.
- Obtaining Vifm. Details about obtaining Vifm in different environments.
- Tips and Tricks. Description of some possibly unexpected/non-obvious uses of features.
- Utility scripts. Scripts that help utilize external applications.
- Vifm on the Web. List of pages related to Vifm.