Related articles nnn

ranger

From the Vifm home page:

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.

Installation

Install the package.

Help file

Basic information about vifm is given in the help file. You can view it by opening vifm and typing

:h

Another good source of information is the man page.

Customizing vifm

vifm creates and populates a vifm directory in XDG_CONFIG_HOME containing the following:

vifmrc - a well commented configuration file that can be edited to suit your working style.

- a well commented configuration file that can be edited to suit your working style. vifm-help.txt - the help text

- the help text vifminfo - bookmarks and trash contents - it is not recommended to edit this file by hand

- bookmarks and trash contents - it is not recommended to edit this file by hand Trash/ directory - self explanatory - see :h vifm-trash in vifm

directory - self explanatory - see in vifm colors/ directory - color schemes - see :h vifm-colors in vifm

directory - color schemes - see in vifm scripts/ directory - see :h vifm-scripts in vifm Default.vifm - well commented default color scheme - can be copied to create user-created color schemes

directory - see in vifm

To get started, read the information available in:

/usr/share/doc/vifm/

/usr/share/vifm/vifm-help.txt or man vifm

or :h in vifm

Color schemes

The ~/.vifm/colors directory contains the color schemes. The format is outlined in the file and follows vi/vim syntax highlight format. It is basically:

highlight group cterm=attribute ctermfg=color ctermbg=color

An example colorscheme looks like:

highlight Win cterm=none ctermfg=white ctermbg=black highlight Directory cterm=bold ctermfg=cyan ctermbg=none highlight Link cterm=bold ctermfg=yellow ctermbg=none highlight BrokenLink cterm=bold ctermfg=red ctermbg=none highlight Socket cterm=bold ctermfg=magenta ctermbg=none highlight Device cterm=bold ctermfg=red ctermbg=none highlight Fifo cterm=bold ctermfg=cyan ctermbg=none highlight Executable cterm=bold ctermfg=green ctermbg=none highlight Selected cterm=bold ctermfg=magenta ctermbg=none highlight CurrLine cterm=bold ctermfg=none ctermbg=blue highlight TopLine cterm=none ctermfg=black ctermbg=white highlight TopLineSel cterm=bold ctermfg=black ctermbg=none highlight StatusLine cterm=bold ctermfg=black ctermbg=white highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black highlight CmdLine cterm=none ctermfg=white ctermbg=black highlight ErrorMsg cterm=none ctermfg=red ctermbg=black highlight Border cterm=none ctermfg=black ctermbg=white

You can also highlight different filetypes using regular expressions:

highlight /^.*\.(mp3|ogg|oga|flac|m4a)$/ ctermfg=magenta highlight /^.*\.(jpg|jpeg|png|gif|tiff|webp|bmp|svg|svgz)$/ ctermfg=yellow highlight /^.*\.(zip|gz|bz2|xz|tar|tgz|tbz2|7z|rar|iso|rpm|deb)$/ ctermfg=red

Key mapping

As of 0.6.2 you can customize key bindings in vifm. These can be set from the command mode using the map command, like so:

:map ] :s

However, these mappings will not be saved between sessions. To map a key permanently, place them in ~/.vifm/vifmrc . More sample mappings can be seen at the end of that file.

Opening filetypes in vifm

You can assign applications to filetypes in vifmrc , eg.

filetype *.jpg,*.jpeg,*.png,*.gif feh %f 2>/dev/null & filetype *.md5 md5sum -c %f

Several defaults can be found in vifmrc . These can be edited or added to following the same format.

Browse images in current directory with feh

filextype *.jpg,*.jpeg,*.png,*.gif \ {View in feh} \ feh -FZ %d --start-at %d/%c 2>/dev/null

It will display your selected image in feh, but it will enable you to browse all other images in the directory as well, in their default order.

User commands

You can also create custom commands in vifmrc , eg.

command df df -h %m 2> /dev/null command diff vim -d %f %F

command link ln -s %d/%f %D

When you call

:link

a link of the selected file is made in the other directory (if you are in split view). It even works with multiple files selected with visual (v) or tag (t).

Torrent creation

make a .torrent of the current file in the other tab's dir

command mkt mktorrent -p -a [your announce url here] -o %D/%f.torrent %d/%f

Marks

Marks can be set same as in vi. To set a mark for current file:

m[a-z][A-Z][0-9]

Go to a file set for mark:

'[a-z][A-Z][0-9]

vifm will remember the marks between the sessions.

Previews

Provided is installed, putting

fileviewer *.pdf \ pdftotext %c -

into vifmrc enables pdf-previewing using pdftotext. The %c is a vifm macro for the current file under the cursor. The preview is activated with

:view

Neat image previewing can be achieved using img2txt from

fileviewer *.png,*.jpeg,*.jpg \ img2txt %c

Previewing the contents of tar-archives:

fileviewer *.tar,*.tar.gz \ tar -tvf %c

For previewing html documents suitable programs are text based browsers including , or

fileviewer *.html \ w3m %c

For printing text instead of previewing the file (for binary files for example):

fileviewer *.exe \ echo Binary file: no preview available. %i

%i is there because %c is implicitly used if no other macro is used. In this case, %i is ignored.

For handling filetypes not handled by anything else, put fileviewer * <your command> as the last fileviewer option in your config file.

Further useful programs for previews include

for directory previews

for viewing information about mp3 files

for the mediainfo program (audio and video information)

Using vifmimg

It's also possible to clone vifmimg into your ~/.config/vifm directory. Than you need to create an alias to run the vifmrun script, which will prepare everything for the previews:

alias v="~/.config/vifm/vifmrun ."

vifm should start just by typing v in your terminal now.

Warning: It's necessary to install otherwise the preview will not work!

Note: If you selected a file which starts displays the preview and you want to switch to the shell. It might happen that the preview does not disappear. In that case you will need to add a new command: command! clear vifmimg clear If you selected a file which starts displays the preview and you want to switch to the shell. It might happen that the preview does not disappear. In that case you will need to add a new command: and add this command to your mappings which are quitting your current vifm runtime like going into a shell nmap S :clear If you type S you will enter your shell and the preview will be removed. If you typeyou will enter your shell and the preview will be removed.

Tips and tricks

Useful key mappings

Single stroke to access command line

nmap ; :

Faster movement

Hold shift to jump five files

nnoremap J 5j nnoremap K 5k

Panel resizing

Just type - or _ to resize the panels

nnoremap - <C-w>5< nnoremap _ <C-w>5>

Yanking

Yank the directory path by typing yd

nnoremap yd :!echo -n %d | xclip -selection clipboard %i<cr>:echo expand('%"d') "is yanked to clipboard"<cr>

Yank the absolute path to the file by typing yf

nnoremap yf :!echo -n %c:p | xclip -selection clipboard %i<cr>:echo expand('%"c:p') "is yanked to clipboard"<cr>

Non-vim Users

vifm assumes that you are using vim and will throw errors if it does not find it. If you are using vi or nvim (Neovim), you need to edit your ~/.vifm/vifmrc file. Comment out the line set vicmd=vim and replace it with set vicmd=vi or set vicmd=nvim . Note that, just like .exrc , comment lines are introduced by double quotes.

Total size of selected files

To get the total size of selected files change %s to %E in ~/.vifm/vifmrc , like so:

set statusline=" %t%= %A %10u:%-7g %15E %20d "

Use output of external program in status line

Here is a status line that calls lsattr, passing it the name of the file currently under the cursor:

set statusline="%{system('lsattr -l ' . expand('%c'))}"

Print the current selected file

If you want to print a file with your printer than you can create a command with lp :

command! print lp -n 1 -o sides=two-sided-long-edge %f

You just need to select your file which should be printed and type :print

Drag and Drop

You will need to install AUR and add a new command:

command! dragon dragon-drag-and-drop -a -x %f

If you want, you can also set a shortcut to this new command:

nmap <C-d> :dragon<CR>

So if you press Ctrl + d your current selected file will be pop so you can drop it somewhere else. If you want to drag multiple files, just select the files with t and press Ctrl + d .

For more, see expression syntax and available functions.