Vifm v0.9 betaJune 4, 2017

New version brings two new ways of viewing and processing file lists, namely tree-view and directory-comparison. As usual, previously existing facilities were extended and improved to become more useful.

The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released.

Main changes
  • Introduced tree-like representation of files.
  • Added directory comparison facilities.
  • Added ability to restore last navigation menu.
  • Background operations and programs can now be cancelled.
  • Dismissed error output of external programs can now be queried.
  • Added shell completion for bash and zsh.
  • Now it's possible to configure mappings in dialogs.
Demonstration of new features... Hover mouse and wait a bit to start animations.

Navigation in a tree


File operations in a tree


File filtering in a tree


Viewing discarded output of background jobs


Reusing last navigation menu


Completion of options


Comparison of two FS-trees


Comparison of files within one FS-tree

More detailed list of changes... Packaging:
  • Removed -Werror in tests from non-developer builds.
Command-line mode:
  • Added :tree command that converts current view into a tree (thanks to filterfalse and Kornel).
  • Added :dmap, :dnoremap and :dunmap commands to configure mappings in dialogs (thanks to Sassan Haradji, a.k.a. sassanh).
  • Added "tree" parameter to :sync! that enables synchronization of tree view (thanks to filterfalse).
  • Added :compare command to perform comparison in one or two directory trees (thanks to anonymous on SourceForge discussion forum and aleksejrs).
  • Added :copen command to restore last menu that supports navigation (thanks to Sassan Haradji, a.k.a. sassanh).
  • Added :screen! form that enables terminal multiplexers support (instead of toggling it as :screen does) (thanks to Marcos Cruz).
  • Added :siblnext and :siblprev commands. They change directory to next or previous sibling directories of current path (in global sorting order of current pane) (thanks to sudo-nice).
  • Made :put, :touch and :mkdir accept [line] range, which can be used to specify target position in tree-view (thanks to filterfalse).
  • Accept paths in :touch, not just file names (thanks to filterfalse).
  • Disallow applying :chmod on ".." entry.
  • Disallow selecting ".." entry with :select command.
Macros:
  • Added %Iu and %IU macros, which are %u and %U equivalents, but work better if external command is interactive and changes terminal state.
  • Added %q macro that redirects command output into quick view (thanks to svenn71).
:set command and options:
  • Added 'dotfiles' (local) option, which exposes dot files filter as an option (thanks to filterfalse).
  • Added 'caseoptions' option that enables more fine-grained control over case sensitivity (thanks to Alexandru Geana, a.k.a. alegen).
  • Added 'sizefmt' option that configures formatting of human-friendly size (thanks to sudo-nice).
  • Added %f 'statusline' macro that inserts relative path of the entry, which might be useful for non-regular views (thanks to filterfalse).
  • Added %D 'statusline' macro that displays path of the other pane in single-pane layout (thanks to sudo-nice).
  • Added %T 'statusline' macro that displays symbolic link target (thanks to sudo-nice).
  • Added %a 'statusline' macro that displays amount of free space available at current partition (thanks to sudo-nice).
  • Consider trailing slash for directories or symbolic links that point to directories in 'classify' patterns by file name (e.g., this works now: [::*/::]).
  • Better handling of setting 'fillchars' to incorrect or excessive value.
Normal and visual modes:
  • Added [d and ]d shortcuts to navigate to previous/next directory entry (thanks to filterfalse).
  • Added [s and ]s shortcuts to navigate to previous/next selected entry (thanks to filterfalse).
  • Added [z and ]z shortcuts to navigate to first/last sibling in a tree (thanks to filterfalse).
  • Added zj and zk shortcuts to navigate to next/previous directory sibling in a tree (thanks to filterfalse).
  • Added [c and ]c shortcuts to navigate to previous/next mismatch in directory comparison view (thanks to filterfalse).
  • Added do and dp keys to compare views for applying changes in files (thanks to filterfalse).
Menus and dialogs:
  • Added dd key to :jobs menu, which requests cancellation of background operation. Background :put, :copy, :move, :delete, size calculation with ga and gA as well as applications started in background can be cancelled this way (thanks to blurm).
  • Added e key to :jobs menu that displays list of errors issues by that jobs, if any. h key goes back to :jobs menu.
  • Added % key to menu mode, which navigates to [count]-th percent of the list.
  • Added meaning to [count] of cp shortcut, which is now processed as numerical argument for non-recursive chmod command (thanks to sudo-nice).
  • Partially return progress report for menus. Was disabled by introduction of null byte heuristic.
File operations:
  • Enable restoring files from trash from custom views.
  • Disallow moving/copying/linking files into custom view (put is forbidden, so makes sense to forbid these too).
  • Try harder to move files by not giving up on getting permission error, which isn't always a reliable indication of actual permission error. Only when 'syscalls' is on (thanks to Marcin Kurczewski, a.k.a. rr-).
File preview:
  • View current directory on ".." for quickview/view mode (thanks to filterfalse).
  • Enable cancellation of tree preview construction (thanks to filterfalse).
  • Do not resolve symbolic links in directory preview (thanks to filterfalse).
Security:
  • Make temporary rename files accessible only by the user (thanks to aleksejrs).
Performance:
  • Improve performance of startup and exit by omitting file existence checks. The cost is possibly old files staying in the state, but it should be for long time (thanks to Marcin Kurczewski, a.k.a. rr-).
  • Improved sorting performance in the presence of huge amount of symbolic links (thanks to Marcin Kurczewski, a.k.a. rr-).
Invocation:
  • Don't disable preview on --remote --select if it doesn't hide updated pane (thanks to Marcin Kurczewski, a.k.a. rr-).
  • Make +{num} and similar options work (actually affect cursor of the view) (thanks to filterfalse).
  • Treat + option the same way as Vim (like :$) (thanks to filterfalse).
Scripting:
  • Added v:servername variable, which provides access to server name of the running instance used by --remote feature (thanks to Marcin Kurczewski, a.k.a. rr-).
  • getpanetype() got new value ("tree") to indicate tree-view (thanks to filterfalse).
TUI (Text User Interface):
  • Limited maximum height of message popup, just print how many lines we're skipping.
  • Put hardware cursor according to current mode and cursor within it (thanks to Tyler Spivey).
  • Display path to the conflicting file in conflict resolution dialog.
  • Provide better messages on i/o errors with 'syscalls' (thanks to Behrooz).
File filtering:
  • Don't move cursor off "../" before start of local filtering (thanks to filterfalse).
  • Prevent clearing filters on zM if there were no zO preceding it (thanks to sudo-nice).
Color schemes:
  • Added CmpMismatch highlight group for highlighting mismatched files on side-by-side comparison.
Integration:
  • Added completion scripts for bash and zsh (patches by filterfalse).
  • Escape first tilde in paths that go to the shell (thanks to Marius Schmidl).
  • Resolve symbolic link for listing associated programs from desktop-files (thanks to filterfalse).
Vim-plugin:
  • Work around :drop command being disabled in the plugin (thanks to Phil Runninger).
  • Fixed inconsistent behaviour of :EditVifm in plugin with regard to "[No Name]" buffer (thanks to Phil Runninger).
  • Fixed plugin in versions of Vim where :argadd without argument doesn't work (thanks to eco0414).
Only on Windows:
  • Use <exe file location>/data/colors as global storage of color schemes on Windows (thanks to r44083).
  • Handle terminal resize on Windows 10 (thanks to randomizedthinking).
  • Properly recover from invalid/strange UNC root on Windows. Don't end up with empty filelist.
  • Fixed use of non-latin characters in environment variables and command-line options (thanks to khaoos-abominable).
Important fixes:
  • Fixed redirecting stdout of background commands to /dev/null, which could be unwritable descriptor (thanks to c02y).
  • Fixed possible data loss on moving/copying files over their own parent or child directories via p, P, :move, :copy, :alink and :rlink (thanks to Marius Schmidl).
  • Fixed detection of too-small-terminal state.
  • Fixed treating characters like š and ć (with low Unicode values, just above 0x100) as functional keys on input (thanks to granderil).
Other changes:
  • Changed size formatting to round from zero (matches behaviour of e.g. ls).
  • Read error output of background commands independently of main thread (prevents blocking of tools which produce huge amount of output) (thanks to Stas Malavin).
  • No vifminfo merging if file change isn't detected. Might result in faster quitting in some cases. Not accounting for some changes is still possible when multiple instances quit simultaneously, but same could happen without this change.
  • Made search consider trailing slash for directories and symbolic links that point to directories (thanks to filterfalse).
See change log for the full list.
Download links
Source Code
vifm-0.9-beta.tar.bz2
MD523e2e247a924da7ecbcedfc811a7e15f
SHA1100f1bf982e4882263405b9ba8fdeefd0689dc35
RIPEMD1604f2ac5cde006a811b32e65fe73d39242516e9b85
Win32 Binaries
vifm-w32-0.9-beta-binary.zip
MD54db3f656707ac75259326c422d52b618
SHA142e6da808d5af3b17d2df05acb79e5f5c94b9e8b
RIPEMD1609f32ae92d63ff0182e0bc78c6a6ebb9836830a2c
Win32 Single-Executable Binaries
vifm-w32-se-0.9-beta-binary.zip
MD53639f19b743b29041578e74a3dfecc8c
SHA1442b7a10e96f99d3c28110f3727cc797589940af
RIPEMD160aa68ba4a584dbe1d9b11d81a830cf8a1985feafa
Win64 Single-Executable Binaries
vifm-w64-se-0.9-beta-binary.zip
MD5eb1d87394a909025fb32de1754f4d450
SHA19c807820a4b44425fc6275f7b2e2b398d1e1c64b
RIPEMD1604328ecea8618982dcd6d87f62a8193876051e593