" vim: filetype=vim : set foldmethod=marker foldlevel=0 nomodeline: " Sample configuration file for vifm (last updated: 20 July, 2018) " You can edit this file by hand. " The " character at the beginning of a line comments out the line. " Blank lines are ignored. " The basic format for each item is shown with an example. " ------------------------------------------------------------------------------ " Options {{{ " ============================================================================== " This is the actual command used to start vi. The default is vim. " If you would like to use another vi clone such as Elvis or Vile " you will need to change this setting. " switched to neovim set vicmd=nvim " set vicmd=elvis\ -G\ termcap " set vicmd=vile " This makes vifm perform file operations on its own instead of relying on " standard utilities like `cp`. While using `cp` and alike is a more universal " solution, it's also much slower when processing large amounts of files and " doesn't support progress measuring. set syscalls " disable 'compatibility' options, by default kept for legacy I suppose? " Turning it off: " Makes dd/DD/yy only work on currently highlighted file, use ds/Ds/ys for " working on selected files (or dS, DS, yS for inversion). " Makes tab not automatically switch panels. " Makes permanent filter commands act differently, no clue haven't really made " use of them yet. set cpoptions= " Trash Directory " The default is to move files that are deleted with dd or :d to " the trash directory. If you change this you will not be able to move " files by deleting them and then using p to put the file in the new location. " I recommend not changing this until you are familiar with vifm. " This probably shouldn't be an option. set trash set trashdir=$XDG_DATA_HOME/Trash set confirm-=delete " This is how many directories to store in the directory history. set history=100 " Automatically resolve symbolic links on l or Enter. set nofollowlinks " With this option turned on you can run partially entered commands with " unambiguous beginning using :! (e.g. :!Te instead of :!Terminal or :!Te). set fastrun " Natural sort of (version) numbers within text. set sortnumbers " Maximum number of changes that can be undone. set undolevels=100 " If you installed the vim.txt help file set vimhelp. " If would rather use a plain text help file set novimhelp. set vimhelp " If you would like to run an executable file when you " press return on the file name set this. set norunexec " Selected color scheme colorscheme cfillion.vifm " Format for displaying time in file list. For example: " TIME_STAMP_FORMAT=%m/%d-%H:%M " See man date or man strftime for details. set timefmt=%Y-%m-%d\ %H:%M " Show list of matches on tab completion in command-line mode set wildmenu " Display completions in a form of popup with descriptions of the matches set wildstyle=popup " Display suggestions in normal, visual and view modes for keys, marks and " registers (at most 5 files). In other view, when available. set suggestoptions=normal,visual,view,otherpane,delay:1000,keys,marks,registers " Ignore case in search patterns unless it contains at least one uppercase " letter set ignorecase set smartcase " Don't highlight search results automatically set nohlsearch " Use increment searching (search while typing) set incsearch " Try to leave some space from cursor to upper/lower border in lists set scrolloff=4 " Don't do too many requests to slow file systems if !has('win') set slowfs=curlftpfs endif " Set custom status line look set statusline="%A %10u:%-7g %10E / %-a %20d" " Set ruler look (below statusline, showing directory info) " set to show current file number, and overall number of files in dir " with optional display of not-shown files if any are filtered out. set rulerformat="%2l/%S %[[+%x]%]" " decrease waiting time between input polling set mintimeoutlen=50 " set the pre-key timeout really high, see https://git.io/fNm1d set timeoutlen=5000 " use fd instead of default find to make searching faster and more flexible set findprg='fd %A --hidden --exclude .git --exclude node_modules' " Use ag (the silver searcher) instead of grep set grepprg='rg --line-number %i %a %s' " }}} " Marks {{{ " ------------------------------------------------------------------------------ " :mark mark /full/directory/path [filename] mark h ~/ mark d ~/downloads/ mark p ~/projects/ mark i ~/pictures/ mark v ~/videos/ mark a ~/media/audio/ mark n ~/documents/notes/ mark N ~/Nextcloud/ mark l ~/documents/library/ mark t ~/.local/share/Trash/ mark M ~/media/ mark M /run/media/ " }}} " Commands {{{ " ------------------------------------------------------------------------------ " :com[mand][!] command_name action " The following macros can be used in a command " %a is replaced with the user arguments. " %c the current file under the cursor. " %C the current file under the cursor in the other directory. " %f the current selected file, or files. " %F the current selected file, or files in the other directory. " %b same as %f %F. " %d the current directory name. " %D the other window directory name. " %m run the command in a menu window command! df df -h %m 2> /dev/null command! diff nvim -d %f %F command! zip zip -r %f.zip %f command! run !! ./%f command! make !!make %a command! mkcd :mkdir %a | cd %a " command! vgrep nvim "+grep %a" command! syncme :cd %D command! fzfhome : set noquickview \| let $FZF_PICK = term('fd . $HOME | fzf 2>/dev/tty') \| if $FZF_PICK != '' \| execute 'goto' fnameescape($FZF_PICK) \| endif command! fzf : set noquickview \| let $FZF_PICK = term('fd | fzf 2>/dev/tty') \| if $FZF_PICK != '' \| execute 'goto' fnameescape($FZF_PICK) \| endif command! fzfcdhome : set noquickview \| let $FZF_PICK = term('fd -td . $HOME | fzf 2>/dev/tty') \| if $FZF_PICK != '' \| execute 'cd' fnameescape($FZF_PICK) \| endif command! fzfcd : set noquickview \| let $FZF_PICK = term('fd -td | fzf 2>/dev/tty') \| if $FZF_PICK != '' \| execute 'cd' fnameescape($FZF_PICK) \| endif " show or hide the devicon prefix for files command! toggleicons : \| if &classify == '' \| source $VIFM/favicons.vifm \| else \| set classify='' \| endif " }}} " vifminfo {{{ " ------------------------------------------------------------------------------ " What should be saved automatically between vifm runs " Like in previous versions of vifm " set vifminfo=options,filetypes,commands,bookmarks,dhistory,state,cs " Like in vi set vifminfo=dhistory,savedirs,chistory,state,tui,shistory, \phistory,fhistory,dirstack,registers,bookmarks,bmarks " ------------------------------------------------------------------------------ " Examples of configuring both panels " Customize view columns a bit (enable ellipsis for truncated file names) " set viewcolumns=-{name}..,6{}. " Filter-out build and temporary files " filter! /^.*\.(lo|o|d|class|py[co])$|.*~$/ " }}} " Mappings {{{ " ------------------------------------------------------------------------------ " make quitting simpler nmap Q :q " Sample mappings " for now they use space for my leader key - so we can't switch panels with " space, use tab for that nmap nnoremap " switch pane with tab, like cpoption did nnoremap w " scroll through command-line options with C-p/C-n cnoremap cnoremap " Start shell in current directory nnoremap s :shell " Display sorting dialog nnoremap S :sort " Toggle visibility of preview window nnoremap w :view vnoremap w :viewgv " Open file in existing instance of nvim nnoremap e :!nvim %f " Open file in the background using its default program nnoremap gb :file &l " create a tab nnoremap t :tabnew " clip is universal clipper from `sh` module " yank current directory path into the clipboard nnoremap yd :!echo -n %d | clip %i " yank current file path into the clipboard nnoremap yf :!echo -n %c:p | clip %i " yank current filename without path into the clipboard nnoremap yt :!echo -n %c | clip %i " yank root of current file's name into the clipboard nnoremap yr :!echo -n %c:r | clip %i " Mappings for faster renaming nnoremap I cw nnoremap cc cw nnoremap A cw " More logical renaming, cw renames just the name, cW with extension nnoremap cw cW nnoremap cW cw " esc quits out of preview mode (it does in vim, why not here?) qnoremap q " quickly show alternative file opening applications nnoremap o :file " Select file and jump in the indicated direction nnoremap J tj nnoremap K tk " toggle options command! toggle :execute 'set %a! | echo "%a" &%a' nnoremap tw :toggle wrap nnoremap tm :toggle millerview nnoremap tl :toggle lsview nnoremap tn :toggle number nnoremap tr :toggle relativenumber nnoremap tN :windo toggle number nnoremap tR :windo toggle relativenumber nnoremap te :execute ':tree! | echo ":tree"' nnoremap tt t nnoremap ti :toggleicons " fzf movements nnoremap f :fzf nnoremap F :fzfhome nnoremap c :fzfcd nnoremap C :fzfcdhome nnoremap w :grep " external commands " extract currently selected file(s) noremap ,xx :!atool -x %f " compress currently selected file(s) noremap ,xc :!atool -a %c:r.tar.gz %f " archive currently selected file(s) noremap ,xa :!atool -a %c:r.tar %f " zip currently selected file(s) noremap ,xz :!atool -a %c:r.zip %f " combine selected PDFs into single one (named output.pdf) noremap ,pc :!pdftk %f cat output output.pdf " preview thumbnails of current folder " select thumbnails with m/M in nsxiv " to generate a filtered view on them nnoremap ,t :!vifm-thumbnailer -t %u %c nnoremap ,T :!vifm-thumbnailer -r -t %u %c " allows preview to work for normal view and single pane view noremap w : if layoutis('only') \| if &lines + 50 < &columns | vsplit | else | split | endif \| view \| else \| view \| endif \| " }}} " ------------------------------------------------------------------------------ " Filetypes {{{ " ------------------------------------------------------------------------------ " give pretty nerdfont-devicon icons to most files source $VIFM/favicons.vifm " The file type is for the default programs to be used with " a file extension. " :filetype pattern1,pattern2 defaultprogram,program2 " :fileviewer pattern1,pattern2 consoleviewer " The other programs for the file type can be accessed with the :file command " The command macros %f, %F, %d, %F may be used in the commands. " The %a macro is ignored. To use a % you must put %%. " For automated FUSE mounts, you must register an extension with :file[x]type " in one of following formats: " " :filetype extensions FUSE_MOUNT|some_mount_command using %SOURCE_FILE and %DESTINATION_DIR variables " %SOURCE_FILE and %DESTINATION_DIR are filled in by vifm at runtime. " A sample line might look like this: " :filetype *.zip,*.jar,*.war,*.ear FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR " " :filetype extensions FUSE_MOUNT2|some_mount_command using %PARAM and %DESTINATION_DIR variables " %PARAM and %DESTINATION_DIR are filled in by vifm at runtime. " A sample line might look like this: " :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR " %PARAM value is filled from the first line of file (whole line). " Example first line for SshMount filetype: root@127.0.0.1:/ " " You can also add %CLEAR if you want to clear screen before running FUSE " program. " Pdf filextype ,*.pdf \ { view as rich file } \ sioyek %c %i, zathura %c %i &, apvlv %c, xpdf %c, \ { edit text content } \ pdftotext -nopgbrk %c - | nvim fileviewer ,*.pdf \ pdftotext -nopgbrk %c - " PostScript filextype *.ps,*.eps,*.ps.gz \ {View in zathura} \ sioyek %f, zathura %f, \ {View in gv} \ gv %c %i &, " Djvu filextype *.djvu,*.epub \ {View in zathura} \ sioyek %f, zathura %f, \ {View in apvlv} \ apvlv %f, " Audio filetype *.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus \ {Play using ffplay} \ ffplay -nodisp -autoexit %c, \ {Play using MPlayer} \ mpv %f, fileviewer *.mp3 mp3info fileviewer *.flac soxi " Video filextype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob, \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx, \*.as[fx] \ {View using unique mplayer instance} \ umpv %f &, \ {View in viu} \ viu --name %f; read -k 1 -s -r, \ {View using ffplay} \ ffplay -fs -autoexit %f, \ {View using Dragon} \ dragon %f:p, fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob, \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx, \*.as[fx] " needs to be %pu uncached or it flickers itself into oblivion :( \ exist chafa && ffmpeg -y -hide_banner -loglevel panic -i %c -ss 00:00:01.000 -vframes 1 /tmp/tempfile.jpg && chafa -f iterm --size %pwx%ph /tmp/tempfile.jpg %pd %pu %N || echo chafa not found, \ ffprobe -pretty %c 2>&1 " Web filextype *.html,*.htm \ {Open with dwb} \ qutebrowser %f %i &, \ {Open with firefox} \ chromium %f &, \ {Open with uzbl} \ google-chrome %f %i &, fileviewer *.html,*.htm \ lynx -dump %c filetype *.html,*.htm links, lynx " Object filetype *.o nm %f | less " Man page filetype *.[1-8] man ./%c fileviewer *.[1-8] man ./%c | col -b " Images filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm \ {View in imv} \ imv %f %i, \ {View in viu} \ viu --once --name %f; read -k 1 -s -r, \ {View in nsxiv directory viewer} \ vifm-thumbnailer %c, \ {View in nsxiv} \ nsxiv %f, \ {View in vimiv} \ vimiv %f, \ {View in sxiv} \ sxiv %f, \ {View in feh} \ feh -FZ %d --start-at %d/%c 2>/dev/null \ {View in gpicview} \ gpicview %c, fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm " needs to be %pu uncached or it flickers itself into oblivion :( \ exist chafa && chafa -f iterm --size %pwx%ph %c:p %pd %pu %N || echo chafa not found set previewoptions+=graphicsdelay:0 " OpenRaster filextype *.ora \ {Edit in MyPaint} \ mypaint %f, " OpenRaster filetype *.sqlite,*.db \ {Edit in sqlite3} \ sqlite3 %f, " tabular data filetype *.csv,*.xlsx,*.tsv,*.json \ {Open with visidata} \ vd %f, fileviewer *.tsv,*.csv \ tidy-viewer --color-always %c " \ xsv sample 100 %c | xsv table -c8 -p1 -w1, " \ {cat %c | sed -e 's/,,/, ,/g' | column -s, -t | less -#5 -N -S; } fileviewer *.xlsx \ xlsx2csv %c | tidy-viewer --color-always --title %c fileviewer *.json \ jq '.' --color-output %c " Mindmap filextype *.vym \ {Open with VYM} \ vym %f &, " MD5 filetype *.md5 \ {Check MD5 hash sum} \ md5sum -c %f %S, " SHA1 filetype *.sha1 \ {Check SHA1 hash sum} \ sha1sum -c %f %S, " SHA256 filetype *.sha256 \ {Check SHA256 hash sum} \ sha256sum -c %f %S, " SHA512 filetype *.sha512 \ {Check SHA512 hash sum} \ sha512sum -c %f %S, " GPG signature filetype *.asc \ {Check signature} \ !!gpg --verify %c, " Torrent filetype *.torrent ktorrent %f & fileviewer *.torrent dumptorrent -v %c " FuseZipMount filetype *.zip,*.jar,*.war,*.ear,*.oxt,*.apkg \ {Mount with fuse-zip} \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, \ {View contents} \ zip -sf %c | less, \ {Extract here} \ tar -xf %c, fileviewer *.zip,*.jar,*.war,*.ear,*.oxt zip -sf %c " ArchiveMount filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz \ {Mount with archivemount} \ FUSE_MOUNT|archivemount %SOURCE_FILE %DESTINATION_DIR, fileviewer *.tgz,*.tar.gz tar -tzf %c fileviewer *.tar.bz2,*.tbz2 tar -tjf %c fileviewer *.tar.txz,*.txz xz --list %c fileviewer *.tar tar -tf %c " Rar2FsMount and rar archives filetype *.rar \ {Mount with rar2fs} \ FUSE_MOUNT|rar2fs %SOURCE_FILE %DESTINATION_DIR, fileviewer *.rar unrar v %c " IsoMount filetype *.iso \ {Mount with fuseiso} \ FUSE_MOUNT|fuseiso %SOURCE_FILE %DESTINATION_DIR, " SshMount filetype *.ssh \ {Mount with sshfs} \ FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR %FOREGROUND, " FtpMount filetype *.ftp \ {Mount with curlftpfs} \ FUSE_MOUNT2|curlftpfs -o ftp_port=-,,disable_eprt %PARAM %DESTINATION_DIR %FOREGROUND, " Fuse7z and 7z archives filetype *.7z \ {Mount with fuse-7z} \ FUSE_MOUNT|fuse-7z %SOURCE_FILE %DESTINATION_DIR, fileviewer *.7z 7z l %c " Office files filextype *.odt,*.doc,*.docx,*.xls,*.xlsx,*.odp,*.pptx libreoffice %f & filetype *.doc catdoc %c | nvim fileviewer *.doc catdoc %c filetype *.docx \ pandoc -s -t markdown %f | nvim, \ docx2txt %f - | nvim fileviewer *.docx \ [ "$TERM_DARK" = "true" ] && pandoc -s -t markdown %f | glow --style=dark - || pandoc -s -t markdown %f | glow --style=light -, \ pandoc -s -t markdown %f | bat --color=always --style=plain \ docx2txt %f - " TuDu files filetype *.tudu tudu -f %c " Qt projects filextype *.pro qtcreator %f & " Directories filextype */ \ {View in thunar} \ Thunar %f &, fileviewer */ \ exa --color always --tree -L2, \ tree -L 2, " markdown text fileviewer *.md \ [ "$TERM_DARK" = "true" ] && glow --style=dark %c || glow --style=light %c, \ bat --color=always --style=plain " use custom viewer script for rest fileviewer * vifm-default-viewer %c " use our own custom opener filetype * open " Syntax highlighting in preview " " Explicitly set highlight type for some extensions " " 256-color terminal " fileviewer *.[ch],*.[ch]pp highlight -O xterm256 -s dante --syntax c %c " fileviewer Makefile,Makefile.* highlight -O xterm256 -s dante --syntax make %c " " 16-color terminal " fileviewer *.c,*.h highlight -O ansi -s dante %c " " Or leave it for automatic detection " " fileviewer *[^/] pygmentize -O style=monokai -f console256 -g " Displaying pictures in terminal " " fileviewer *.jpg,*.png shellpic %c " Open all other files with default system programs (you can also remove all " :file[x]type commands above to ensure they don't interfere with system-wide " settings). By default all unknown files are opened with 'vi[x]cmd' " uncommenting one of lines below will result in ignoring 'vi[x]cmd' option " for unknown file types. " For *nix: " filetype * xdg-open " For OS X: " filetype * open " For Windows: " filetype * start, explorer " }}} " Various customization examples " Add additional place to look for executables " " let $PATH = $HOME.'/bin/fuse:'.$PATH " Block particular shortcut " " nnoremap " Export IPC name of current instance as environment variable and use it to " communicate with the instance later. " " It can be used in some shell script that gets run from inside vifm, for " example, like this: " vifm --server-name "$VIFM_SERVER_NAME" --remote +"cd '$PWD'" " " let $VIFM_SERVER_NAME = v:servername command! cmpinternal vifmdiff %a %S command! cmp : if expand('%%c') == expand('%%f') \ | echo expand('Comparing %%"c and %%"C:t ...') \ | cmpinternal %c %C \ | else \ | echo expand('Comparing files: %%"f ...') \ | cmpinternal %f \ | endif