Vifm v0.14 February 8, 2025
Thanks to everyone who tried out the beta.This release contains a number of changes which are technically non-backwards compatible. However, all of them should have very little negative impact (i.e., hard to notice the change without reading the changelog).
At the same time, a bug, fixing which is likely to have an impact on user
configuration, has been identified but not yet fixed to give a chance to
update all affected vifmrc files. If a bug is likely to be relied on by
the configuration, a dialog with the explanation and instructions will
appear.
Until this release Vifm has always used byte sorting (effectively, sorting of UTF-8 byte sequences). From now on a form of Unicode normalization is applied to strings when sorting views and completion results. The change can be expanded to other cases in future releases. The measured performance impact is negligible (several percent).
Practically, this means that characters like "a" and "ä" are now grouped together regardless of the way in which diacritic is being encoded. Some characters can still appear in weird non-alphabetic positions because full Unicode normalization results in losing case sensitivity and is therefore not applied.
Addressing some longtime woesFor one reason or another some inconvenient peculiarities have accumulated over the years. Time has come to replace workarounds with something better:
- global variables (
g:var) replace the use of environmental variables for internal purposes, thus avoiding polluting environment of child processes - use of
:letto invoke a builtin function discarding its result is superseded by a proper:callcommand - use of
execute 'normal! gl'to run selection now has:opencommand as a better alternative - size of selection can now be queried via
selected()(previous releases requiredexpand('%c') == expand('%f')or an equivalent trick) %{expression}macro in'statusline'can now have}embedded as\}(\\still means two slashes)- dialogs now recognize Enter and Escape keys as "yes" and "no" replies
:copen recalled last navigation menu for years, but that's not always
enough. Now up to 25 such menus are stored after their use and can be
navigated to via :chistory/:colder/:cnewer.
In addition, :grep or :find can be rerun on the same set of commands
right from the menu which previously required leaving the menu just to get
back to it.
History of command-line in menus is now also managed and stored, making staying in menu mode for longer a more pleasant experience.
UI improvements
Navigation between views/tabs via new :wingo command with optional
incremental completion thanks to new 'wildinc' option (applicable to any
other command or all of them at once).
Ability to highlight a view column (:highlight column:size ...), specify
how highlighting applies ('hloptions'), set a separator between miller
columns in set fillchars+=millersep:'|', shorten columns in the
middle (^ in 'viewcolumn').
Also, displaying of CJK characters on Windows should have much fewer issues now.
Lua APISlowly adding new functionality. This batch comes with things like primitive file operations, ability to create custom views or menus and handling ranges of :commands.
OtherSearch matches can be traversed via Tab and Shift-Tab while in the prompt (applies to navigation mode as well).
An invalid expression in :if or :elseif no longer just skips that
command, now all commands up to and including matching :endif are skipped to
avoid executing half-random sequences of commands due to a mistake, which also results
in better error messages. Previously, :elseif was also
evaluating its expression even some earlier branch was already taken.
:rename now asks whether file move is intended instead of assuming a user
mistake and refusing to proceed.
Support MTP devices by bundled vifm-media script if simple-mtpfs is
installed. Also improve what devices are offered for mounting (e.g., don't
offer a whole drive if it contains partitions).
Get preview graphics out of the way in more cases (like when opening menus). Terminals with more than 32768 color pairs should not cause visual defects or crashes anymore.
Merging of directories was either not asking for confirmation or aborting after skipping a file. Paths with some unreadable characters were not processed due to a regression. Directories weren't counted in estimates of file operations.
&& operator was always evaluating both branches instead of properly
short-circuiting. %a macro of 'statusline' was displaying wrong values
on non-Linux Unix-like systems. :compare falsely claimed that files of
identical size and with common prefix are identical.
More detailed list of changes...
Building- Changed
--with-gtkflag to--with-glib(old name is still available). GTK was pulled in by mistake, only GIO/GLib was ever used... - Updated
autotoolsscripts to their newer versions (thanks to phanium, a.k.a. phanen). - Fixed running tests with locales that use comma for decimal point (thanks to PRESFIL).
- Fixed running tests with
musllibc (thanks to Henrik Holst, a.k.a. hholst80).
- Changed default value of
'findprg'to avoid the use of syntax specific to GNUfind.The only difference is that now one can see "Permission denied" errors which weren't displayed before. Samplevifmrcfiles contain detection of GNUfindon startup (thanks to Jose Riha, a.k.a. jose1711). - Added
mchistoryvalue to'vifminfo'and'sessionoptions'option. It manages storing of command-line history of menus. - Added
'hloptions'option to configure which view colums get affected by file highlighting (thanks to qsmodo). - Added
millersep:value to'fillchars'that allows customizing the border between miller columns (thanks to Shuo, a.k.a. shenqshuoh). - Added
'wildinc'option that defines which :commands should be completed as they are edited. - Added middle view column alignment (specified by
^in'viewcolumns'option). Part of the text is replaced with ellipsis to keep both start and end visible (patch by Vadim Curcă). - Made completion of an option with its current value work not only on
opt=<tab>, but also onopt='<tab>andopt="<tab>(thanks to aleksejrs).
- Added
:history mcmdmenu for displaying command-line history of menus. - Added
:col[der]and:cnew[er]commands to menu mode to traverse history of navigation menus. - Added
:chi[story]command that opens a menu of saved menus. - Added
:chi[story]command to menu mode. - Added
column:{name}form of argument to:highlightcommand to specify style of a separate column (thanks to Anton Gepting). - Added
:wingocommand to navigate to a view by substring matching against its title or path (thanks to iSeeU816 and Alexandre Viau). - Added
:cal[l]command to run a function discarding its return value (thanks to anyone asking about simply running a function). - Added
:o[pen]command to open current file, selection or range as if Enter was pressed (thanks to Safal Piya, a.k.a. mrsafalpiya). - Added a way to insert
}inside of%{expr}macro of'statusline'(thanks to vuenn). - Made
:gotopreserve custom and tree views (thanks to Svetlozar Iliev, a.k.a. asmodeus812). - Made
:comparetreat non-regular files (pipes, sockets, etc.) as empty. - Allowed moving files via
:rename(requires an interactive confirmation) (thanks to aleksejrs). - Improved error message on trying to
:unleta builtin variable. - Expand environment variables in the arguments of
:markcommand (thanks to an anonymous at Vifm Q2A site). - Improved detection and reporting of invalid mark name by
:markcommand. - Made Tab and Shift-Tab in interactive search prompts (including when navigating) move cursor to next/previous search match (thanks to David Sierra DiazGranados, a.k.a. davidsierradz).
- Allow and skip !/!! prefix of custom external
:commandsfor more macros (%S,%q,%i,%m,%M,%s,%v,%u,%U,%Iu,%IU). - Adjusted heuristic for determining previewer type to allow use of
%pxand py with%pdwithout any implications (thanks to iambumblehead).
- Changed initialization to not create a copy of rendered man page at
$VIFM/vifm-help.txt,:helpnow opens the original file (thanks to intelfx). - Changed handling of Ctrl-Z to not suspend the application if a corresponding user mapping exists (patch 高浩亮, a.k.a. haolian9).
- Perform sorting of completion items after doing Unicode normalization.
- Perform sorting of file names after doing Unicode normalization (thanks to hacksenwerk).
- Added [S and ]S shortcuts as wrapping versions of [s and ]s (thanks to aksr).
- Made vifm-media not offer partitioned drives as they aren't mountable as a whole.
- Extended vifm-media script to support MTP devices if simple-mtpfs tool is installed (thanks to FlyCat, a.k.a. yanwh0311, and Alexandre Viau).
- Fixed vifm-media script not listing external drives with udevil and udisks.
- Fixed vifm-media script not listing removable drives with udisks marked as non-removable by udisks.
- Updated ncurses in AppImage to 6.5.
- Don't overwrite
$TERMINFOin AppImage, set/append to$TERMINFO_DIRSinstead (thanks to anonymous at Vifm Q2A site). - Fixed /usr/share/terminfo not being consulted when running from an AppImage (thanks to anonymous at Vifm Q2A site).
- Added command-line history to menu mode.
- Added
:gr[ep]command to menu mode. Allows (re)running grep command on the same set of files without leaving the mode. - Added
:fin[d]command to menu mode. Allows (re)running find command on the same set of files without leaving the mode. - Added inode number to File Info dialog.
- Added handling of Enter/Escape keys to prompts and error dialogs (thanks to laur89, Alexandre Viau and multiple other users who asked about this).
- Made register's content being listed in normal rather then reversed order in
:registers/:displaymenu. - Display number of color pairs in use in
:version/:vifmmenu. - Constrained background error dialogs to appear only in normal mode when not much is going on.
- Changed
%Nmacro to not be mutually exclusive with most of other macros (the limitation wasn't documented and didn't make much sense) (thanks to James Dietrich).
- Added a statusbar message and a dialog to warn about an upcoming fix for strings in conditional expressions (e.g.,
if $VARchecks for$VARbeing non empty instead of converting it to an integer) (thanks to justpretending2). - Changed behaviour on failure to evaluate an expression of
:ifor:elseif. Previously this resulted in trying to execute any commands until and including:endif(all branches taken). Now everything up to:endifwill not be executed (no branches taken) (thanks to Ed Pavlov). - Changed filetype() to accept path in its first parameter. This means that passing it something like
15abcwill no longer be interpreted as 15 (thanks to MikeLemon). - Added escape() builtin function to escape specific characters in strings (thanks to The Cyberduck).
- Added selected() builtin function which returns number of currently selected files.
- Added global variables (with
g:prefix) to avoid using environment variables in their place as a workaround. - Added v:version builtin variable that exposes version as an integer which can be meaningfully compared (thanks to an anonymous at Vifm Q2A site).
- Slightly improved performance of comparing files by content.
- Fixed performance degradation after preview consumes lots of color pairs.
- Clarified documentation on column literals and escaping (thanks to chelovechishko).
- Made documentation of
'vifminfo'more readable. - Rewrote "Menus and dialogs" section.
- Document how the use of different preview macros affects classification of a previewer (thanks to iambumblehead).
- Slightly expanded documentation on
%Nmacro (thanks to James Dietrich). - Somewhat improved documentation on functional keys.
- Fixed documentation on yy, Y, dd and DD not mentioning how
sflag of'cpoptions'affects their behaviour (thanks to James Dietrich). - Fixed outdated documentation on the behaviour of n/N when
'hlsearch'is enabled since the introduction of highlighting of search matches (thanks to James Dietrich).
- When processing multiple files in background, show current position in the list on the job bar.
- Shorten home directory in paths shown on the job bar.
- Provide numerical value of a color as a description of a completion item for it.
- Don't attempt clearing graphics when menu-like mode is active. The graphics should have been hidden on entering the mode.
- Allowed wild menu popup to take up up to 40% of the screen.
- Upgraded to PDCurses 3.9 (was 3.8). Combined with some other changes this improves the situation with handling of CJK characters (thanks to zzx41375004, vodbyte, Jeremy Yuan and others).
- Fixed
data/vifmrcnext to vifm.exe being used as global vifmrc file (thanks to midrare). - Fixed incorrectly determining whether a directory is writable (primarily C:\ could be reported as non-writable) (thanks to theorlangur and bitraid).
- Fixed system() and term() not taking
'shell'/'shellcmdflag'into account (thanks to spence91).
- Added WildBox highlight group. It can be used to set background of completion window.
- Fixed graphics of view mode not being hidden on activating menu, more or file info modes.
- Fixed graphics not being cleared on switching to single-pane view (thanks to ret2src).
- Fixed a historical omission of Ctrl-G not being available in some prompts: file rename on conflict; owner, group and symbolic link target change (thanks to Branislav Gerazov).
- Fixed display issues or a crash when using a terminal with more than 32768 color pairs (thanks to iboggs and itshog).
- Fixed
%a'statusline'macro producing wrong values on non-Linux Unix-like systems (thanks to voh9eepah). - Fixed merging directories on copying not asking for overwrite confirmations (thanks to aleksejrs).
- Fixed skipping of file move during merging aborting the whole operation (thanks to aleksejrs).
- Fixed
:[un]select !<text/html>treating<text/html>as an external command. - Fixed environment variables not being expanded on checking that a
:file[x]typeor:fileviewercommand exists in$PATH(thanks to Ben Elan). - Fixed weird sorting of filenames with non-Latin characters when
'sortnumbers'option is set and strverscmp() is not provided by the system (like on Windows). - Fixed
:comparereporting identical files as changed when there were more than a couple of files with identical size and 4096-byte prefix. A regression in 0.13-beta (thanks to Alexandr Keyp, a.k.a. IAmKapuze). - Fixed
:comparehanging on trying to compare non-regular files like pipes by contents. - Fixed
:substitute,:tr, gu* and gU* detecting a non-existent target name conflict when rename in a custom view would produce an identically named files in different directories (thanks to aleksejrs). - Fixed
:restartleaving histories disabled unless'history'is set to a non-default value in vifmrc (thanks to James Dietrich). - Fixed processing of file names and paths that undergo escaping in the UI, like inability to externally rename them (regression in 0.12.1 beta) (thanks to jc-SpaceXp).
- Fixed rules for handling of selection by
:file[x]typenot taking%"c/%"C/%"f/%"Fmacros into account (relevant mostly to Windows) (thanks to smoothdad). - Fixed
:elseifevaluating its expression even if an earlier conditional branch was already taken. - Fixed loading a session with global tabs when
'tabscope'ispaneresulting in global tabs being invisible. - Fixed Ctrl-A and Ctrl-E in command-line mode not stopping completion unlike other similar keys.
- Fixed directories not being accounted for in estimates (thanks to justpretending2).
- Fixed Escape being handled as Ctrl-C in prompts which suppresses future errors.
- Fixed
!!not affecting commands that include%sor%vmacro (thanks to James Dietrich). - Fixed a crash after a memory corruption when running an external command via expansion of an environment variable when
'fastrun'is set (e.g.,!$EDITOR) (thanks to Quaddroo). - Fixed abort on instance sending something over IPC to itself (thanks to Marcin Kurczewski, a.k.a. rr-).
- Fixed
&&operator which was acting as binary&(in terms of evaluation, the result was properly boolean) (thanks to justpretending2).
- Configure 'vifminfo' in sample vifmrcs to store most of the things in vifminfo by default (add missing histories and tabs) (thanks to Christoph Schmidpeter).
- Commented out one of MC-like shortcuts in sample vifmrc files, Ctrl-U, to avoid confusing Vim users with default configuration (thanks to midrare).
|
Source Code vifm-0.14.tar.bz2 (signature) |
|
|||||||||
|
Win32 Binaries vifm-w32-0.14-binary.zip (signature) |
|
|||||||||
|
Win32 Single-Executable Binaries vifm-w32-se-0.14-binary.zip (signature) |
|
|||||||||
|
Win64 Single-Executable Binaries vifm-w64-se-0.14-binary.zip (signature) |
|
|||||||||
|
AppImage (x86-64) vifm-v0.14-x86_64.AppImage |
|