xaizek / vifm (License: GPLv2+) (since 2018-12-07)
Vifm is a file manager with curses interface, which provides Vi[m]-like environment for managing objects within file systems, extended with some useful ideas from mutt.
<root> / data / vifmrc-osx (f17040df8219d591afa2c989f397726d72992ff8) (14KiB) (mode 100644) [raw]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456
" vim: filetype=vifm :
" Sample configuration file for vifm on OSX (last updated: 20 April, 2024)
" 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.

" ------------------------------------------------------------------------------
" Main settings
" ------------------------------------------------------------------------------

" Command used to edit files in various contexts.  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.
"
" Mind that due to `filetype * open` below by default the editor won't be used
" for opening files via l/Enter keys.  Comment that line out to change the
" behaviour.
if executable('vim')
    set vicmd=vim
elseif executable('nvim')
    set vicmd=nvim
elseif executable('elvis')
    set vicmd=elvis\ -G\ termcap
elseif executable('vile')
    set vicmd=vile
elseif $EDITOR != ''
    echo 'Note: using `'.$EDITOR.'` as an editor'
    let &vicmd = $EDITOR
endif

" 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

" 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

" What should be saved automatically on restarting vifm.  Drop "savedirs"
" value if you don't want vifm to remember last visited directories for you.
set vifminfo=dhistory,savedirs,chistory,state,tui,tabs,shistory,ehistory,
            \phistory,fhistory,dirstack,registers,bookmarks,bmarks,mchistory

" This is how many directories to store in the directory history.
set history=100

" Automatically resolve symbolic links on l or Enter.
set nofollowlinks

" Natural sort of (version) numbers within text.
set sortnumbers

" Maximum number of changes that can be undone.
set undolevels=100

" Use Vim's format of help file (has highlighting and "hyperlinks").
" If you would rather use a plain text help file set novimhelp.
set vimhelp

" If you would like to run an executable file when you
" press Enter, l or Right Arrow, set this.
set norunexec

" 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,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
set slowfs=curlftpfs

" Set custom status line look
set statusline="  Hint: %z%= %A %10u:%-7g %15s %20d  "

" List of color schemes to try (picks the first one supported by the terminal)
colorscheme Default-256 Default

" ------------------------------------------------------------------------------
" Bookmarks
" ------------------------------------------------------------------------------

" :mark mark /full/directory/path [filename]

mark b ~/bin/
mark h ~/

" ------------------------------------------------------------------------------
" Commands
" ------------------------------------------------------------------------------

" :com[mand][!] command_name action
"
" These are some of the macros that can be used in the action part:
"  %a for user arguments
"  %c for current file under the cursor
"  %C for current file under the cursor of inactive pane
"  %f for selected file(s)
"  %F for selected file(s) of inactive pane
"  %b is the same as %f %F
"  %d for current directory name
"  %D for current directory name of inactive pane
"  %r{x} for list of files in register {x}
"  %m runs the command in a menu window
"  %u uses command's output to build a file list
"  see `:help vifm-macros` and `:help vifm-filename-modifiers` for more

command! df df -h %m 2> /dev/null
command! diff vim -d %f %F
command! zip zip -r %c.zip %f
command! run !! ./%f
command! make !!make %a
command! mkcd :mkdir %a | cd %a
command! reload :write | restart full

" ------------------------------------------------------------------------------
" File types association
" ------------------------------------------------------------------------------

" :filetype pattern1,pattern2 defaultprogram,program2
" :fileviewer pattern1,pattern2 consoleviewer
"
" The first entry is the default program to be used with a matching file.
" The other programs for the file type can be accessed via :file command.
" The command macros like %f, %F, %d, %D may be used in the commands.
" The %a macro is ignored.  To use a % you must put %%.
" Spaces in an app name must be escaped, for example: QuickTime\ Player.app

" For automated FUSE mounts, you must register an extension with :file[x]type
" in one of the following formats:
"
" :filetype patterns FUSE_MOUNT|mount_cmd %SOURCE_FILE %DESTINATION_DIR
"
" %SOURCE_FILE and %DESTINATION_DIR are filled in at runtime.
"
" Example:
"   :filetype *.zip,*.[jwe]ar FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR
"
" :filetype patterns FUSE_MOUNT2|mount_cmd %PARAM %DESTINATION_DIR
"
" %PARAM and %DESTINATION_DIR are filled in at runtime.
"
" Example:
"   :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR
"
" %PARAM value is the first line of the matched file, example: root@127.0.0.1:/
"
" You can also add %CLEAR if you want to clear screen before running FUSE
" program.  There is also %FOREGROUND, which is useful for entering passwords.

" Pdf
filetype {*.pdf},<application/pdf>
       \ {Open in Preview}
       \ open -a Preview.app,
       \ {Open in Skim}
       \ open -a Skim.app,
fileviewer {*.pdf},<application/pdf> pdftotext -nopgbrk %c -

" PostScript
filetype {*.ps,*.eps,*.ps.gz},<application/postscript> open -a Preview.app

" Djvu
filetype {*.djvu},<image/vnd.djvu> open -a MacDjView.app

" Audio
filetype {*.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus,
         \*.aac,*.mpga},
        \<audio/*>
       \ {Open in Music}
       \ open -a Music.app,
       \ {Open in QuickTime Player}
       \ open -a QuickTime\ Player.app,
       \ {Open in IINA}
       \ open -a IINA.app,
fileviewer {*.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus,
           \*.aac,*.mpga},
          \<audio/*>
         \ ffprobe -hide_banner -pretty %c 2>&1

" Video
filetype {*.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
         \*.fl[icv],*.m2v,*.mov,*.webm,*.mts,*.m4v,*.r[am],*.qt,*.divx,
         \*.as[fx],*.unknown_video},
        \<video/*>
       \ {Open in QuickTime Player}
       \ open -a QuickTime\ Player.app,
       \ {Open in IINA}
       \ open -a IINA.app,
       \ {Open in VLC}
       \ open -a VLC.app,
fileviewer {*.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
           \*.fl[icv],*.m2v,*.mov,*.webm,*.mts,*.m4v,*.r[am],*.qt,*.divx,
           \*.as[fx],*.unknown_video},
          \<video/*>
         \ ffprobe -hide_banner -pretty %c 2>&1

" Web
filetype {*.xhtml,*.html,*.htm},<text/html>
       \ {Open in Safari}
       \ open -a Safari.app,
       \ {Open in Firefox}
       \ open -a Firefox.app,
       \ {Open in Chrome}
       \ open -a Google\ Chrome.app,
       \ {Open in vim}
       \ vim,
fileviewer {*.xhtml,*.html,*.htm},<text/html> w3m -dump -T text/html

" Object
filetype {*.o},<application/x-object> nm %f | less

" Man page
filetype {*.[1-8]},<text/troff> man ./%c
fileviewer {*.[1-8]},<text/troff> man ./%c | col -b

" Image
filetype {*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm},<image/*>
       \ open -a Preview.app,
fileviewer {*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm},<image/*>
         \ identify %f

" MD5
filetype *.md5
       \ {Check MD5 hash sum}
       \ md5sum -c %f %S,

" SHA1
filetype *.sha1
       \ {Check SHA1 hash sum}
       \ shasum -c %f %S,

" SHA256
filetype *.sha256
       \ {Check SHA256 hash sum}
       \ shasum -a 256 -c %f %S,

" SHA512
filetype *.sha512
       \ {Check SHA512 hash sum}
       \ shasum -a 512 -c %f %S,

" Torrent
filetype {*.torrent},<application/x-bittorrent> open -a Transmission.app
fileviewer {*.torrent},<application/x-bittorrent>
         \ dumptorrent -v %c,
         \ transmission-show %c

" Extract zip files
filetype {*.zip},<application/zip,application/java-archive>
       \ mkdir %f:r && tar -vxf %f --directory %f:r
fileviewer {*.zip,*.jar,*.war,*.ear},
          \<application/zip,application/java-archive>
          \ tar -tf %f

" Extract tar archives
filetype {*.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.tar.zst,
         \*.tzst},
        \<application/x-tar>
       \ tar -vxf %f
fileviewer {*.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.tar.zst,
           \*.tzst},
          \<application/x-tar>
         \ tar -tf %f

" Extract .bz2 archives
filetype *.bz2 bzip2 -d %f

" Extract .gz files
filetype *.gz gunzip %f

" Extract rar files
filetype *.rar unrar x -y -c- -ad %f %s
fileviewer *.rar unrar lb %c

" Mount .dmg archives
filetype *.dmg open

" Mount disk .img
filetype *.img open

" Open .pkg binaries
filetype *.pkg open

" Office files
filetype {*.odt,*.doc,*.docx,*.xls,*.xlsx,*.odp,*.pptx,*.ppt},
         \<application/vnd.openxmlformats-officedocument.*,
          \application/msword,
          \application/vnd.ms-excel>
       \ open -a LibreOffice.app
fileviewer {*.doc},<application/msword> antiword -
fileviewer {*.docx},
          \<application/
           \vnd.openxmlformats-officedocument.wordprocessingml.document>
         \ docx2txt.pl %f -

" 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).  Use of the line below results in ignoring 'vi[x]cmd' option for
" unknown file types on l/Enter keys.
filetype * open

" ------------------------------------------------------------------------------
" Panel configuration examples
" ------------------------------------------------------------------------------

" Customize view columns a bit (enable ellipsis for truncated file names)
" set viewcolumns=-{name}..,6{}.

" Show vertical border
" set fillchars=vborder:│

" Filter-out build and temporary files
" filter! {*.lo,*.o,*.d,*.class,*.pyc,*.pyo,.*~}

" ------------------------------------------------------------------------------
" Sample keyboard mappings
" ------------------------------------------------------------------------------

" Start shell in current directory
nnoremap s :shell<cr>

" Display sorting dialog
nnoremap S :sort<cr>

" Toggle visibility of preview window
nnoremap w :view<cr>
vnoremap w :view<cr>gv

" Open file in new MacVim tab
nnoremap o :!mvim --remote-tab-silent %f<cr>
" Open file in new MacVim window
nnoremap O :!mvim %f<cr>

" Open file in the background using its default program
nnoremap gb :!open -g %f<cr>

" Yank current directory path into the clipboard
nnoremap yd :!printf %d | pbcopy<cr>

" Yank current file path into the clipboard (escape spaces)
nnoremap yf :!printf %f:p:gs? ?\\ ? | pbcopy<cr>

" View preview in Quick Look
nnoremap <space> :!qlmanage -p %f > /dev/null 2>&1<cr>

" Mappings for faster renaming
nnoremap I cw<c-a>
nnoremap cc cw<c-u>
nnoremap A cw

" As above, but without the file extension
" nnoremap I cW<c-a>
" nnoremap cc cW<c-u>
" nnoremap A cW

" Open editor to edit vifmrc and apply settings after returning to vifm
nnoremap ,c :write | edit $MYVIFMRC | restart full<cr>
" Open MacVim to edit vifmrc
nnoremap ,C :!mvim --remote-tab-silent $MYVIFMRC &<cr>

" Toggle wrap setting on ,w key
nnoremap ,w :set wrap!<cr>

" Example of standard two-panel file managers mappings
nnoremap <f3> :!less %f<cr>
nnoremap <f4> :edit<cr>
nnoremap <f5> :copy<cr>
nnoremap <f6> :move<cr>
nnoremap <f7> :mkdir<space>
nnoremap <f8> :delete<cr>

" Midnight commander alike mappings
" Open current directory in the other pane
nnoremap <a-i> :sync<cr>
" Open directory under cursor in the other pane
nnoremap <a-o> :sync %c<cr>
" Swap panes (uncomment if you don't need builtin behaviour of Ctrl-U)
nnoremap <c-u> <c-w>x

" ------------------------------------------------------------------------------
" Various customization examples
" ------------------------------------------------------------------------------

" Use ag (the silver searcher) instead of grep
" set grepprg='ag --line-numbers %i %a %s'

" Add additional place to look for executables
" let $PATH = $HOME.'/bin/fuse:'.$PATH

" Block particular shortcut
" nnoremap <left> <nop>

" 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

" Activate screen/tmux support
" screen!

" ------------------------------------------------------------------------------
" Icon decorations example
" ------------------------------------------------------------------------------

" https://github.com/cirala/vifm_devicons
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/vifm

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/vifm

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master