Basic things that need to be done.
    Termcap or terminfo support for keybindings (do we need this? curses does).
    Backgrounding of commands with job control (pause/resume/kill).
    Show background commands presence in the TUI.
    Fix window resizing (I think it's almost done).
    Handle commands that are too long to be passed directly to the shell.
    Perform operations using system calls, not programs.  This is much faster.
    Show operation progress.
    Maybe remove 'trash' option, since we have two commands for deletion.
    Templates for :touch.
    Mouse support.
    Ctrl-R combinations in the command-line mode.
    Wrapping of lines in the menus.
    IPC among all running vifm instances (share settings among instances).
    Write script to export aliases and function from sh to ~/.vifm/scripts/
    Make status bar able to display error and info messages at the same time.
    Command to create multiple copies of selected one with ability to rename
        it (e.g. a -> :hub b c -> a b c, a -> :hub! b c -> b c).
    Make :filetype, :filextype and :fileviewer show menus with 0 or 1 args.
    Add :increment and :decrement commands, which should work in two modes
        in the same way as Ctrl-X/Ctrl-A and like their combination with :clone.
    Improve ga and gA commands to recalculate sizes of modified directories
        only, and maybe update size of all parent cached directories.

Documentation.
    Better documentation.
    Maybe divide vifm.txt in several files (if it becomes too big).

Windows.
    Make :chmod accept arguments.
    Make properties dialog change file attributes recursively.
    Add a command to create .lnk files.
    Follow targets of .lnk files.
    Fix freezing (maybe already fixed).
    Use UTF8 internally.

Vi(m) specific features that need to be added.
    Fix '' to go back to all jumps G gg links (in one directory?).
    Change file list filters to use fold levels instead of just
        the dot filter and regular expression filter (what does this mean?).
    Some kind of selection mode (multiple blocks, mixing).
    Better registers support.
    /, ?, n, N as selectors.
    Make n, N, / and ? with count behave like Vim on nowrapscan and match fail.
    :map without arguments
    Better ranges (add support for search patterns).
    Ctrl-W F key.
    'wildignore' ('wig') option (also think about it in context of file
        filtering).
    Kinda macros like in Vim (qa ... q).
    Something like <silent> in Vim (no command blinking in the command-line)
    :let mapleader and <leader> support.
    Add :echo command.
    'cdpath' ('cd') option.
    Completion of first argument for :map commands.
    Add Ctrl-W H/J/K/L keys.
    Think about :split and :vsplit commands with path passed (what base should
        relative paths have?).
    Support hex and octal numbers in :set
    Add support for ^= in :set command.
    Add support of 'n' flag for :substitute command.
    Expand environment variables for :edit command.
    Think about dot normal mode command.

Possible things to add.
    Use system wide mimetypes file. /etc/mailcap?
    Virtual File System - currently vifm can use fuse to mount most
        file systems.
    Invert selection? (what :command or key?)
    Make :undolist more interactive.
    Maybe something like :g/.../com and :v/.../com in Vim.
    Add g/ and g? commands (search, but don't select files).
    Reverse searching (/ for search, g/ for selecting, g!/ for selecting
        reverse)
    Improve sorting (maybe iext; maybe ignore dirs).
    Add :mksession command and 'sessionoptions' option.
    Position macros for user defined commands (%1, %2, ..., %9). Something
        like %!1 could be used for mandatory parameters.
    Some key to (un)select all files with extension of current file.
    'incfilter' option.
    Maybe we should not reread configuration files on :restart when
        --no-configs was passed on startup.
    'wildmode' option.
    A macro to redirect command output into view pane.
    $_ env var and Alt-. combination as in bash shell.

Other (questionable) things.
    Use mimetypes in FILETYPE.
    %i macro to prompt user for input.
    Maybe inotify support on Linux.
    Command like ' but that executes bookmark ?
    Maybe we should add a command to view screen ?
    Summarize size of selected files.  Need to decide how to display it.
    Add support for comments at the end of line ? Just for fun?
    Make directory stack menu interactive ?
    Maybe add + and - commands to undo by commands, not command groups.
    :setlocal command.
    Remove items from :history command menu?
    :edit, etc. in the menus.
    :alias
    Like gv but to select just pasted files (gp?).
    Modify marks on rename operations.
    :toupper and :tolower
    Maybe accept regular expressions as second argument of :colo command.
    Think about setting filters for both views in vifmrc.
    Make :alink, :copy, ... accept globs (e.g. :co *.c).
    Option to trigger completion on slash in command-line.
    Maybe expand macros for :touch amd :mkdir commands (for :touch %"d)
    An option to hide ../ directory.
    An ability to customize how directories are shown (e.g. dir/, [dir]).
    Live preview of color schemes.

Code improvements.
    Write more tests.
    Improve logging (print back trace in some cases, increase verbosity).
    Add logging levels.
    Stay at the same file in some cases.
    Store directories names without slash symbol.
    Replace a lot of fields in cmd_add_t struct with a set of bit flags.
    Fix print buffer code duplication concerning variables.c and options.c.
    Change type of pause argument of shellout() function to an enum.
    Maybe move startup and initialization code out of config.c and vifm.c
        to a separate file.
    Get rid of repeatable `menu->win_rows - 3` in menu.c and menus.c.
    Get rid of repeatable `(menu->win_rows - 3 + 1)/2 - 1` in menu.c.
    Get rid of repeatable `(curr_view->window_rows + 1)/2 - 1` in normal.c.
    Think about window_rows and window_width members of FileView: why
        do they contain (rows - 1) and (width - 1) ?
    Add null_or_empty() function to utils/str.c unit.
    Get file size on Windows using GetFileAttributesEx().
