n³ The unorthodox terminal file manager

Overview

nnn
nnn - Supercharge your productivity!

Latest release Availability CircleCI Status GitHub CI Status Privacy Awareness License

nnn in action

[Features] [Quickstart] [Plugins] [Documentation]



nnn () is a full-featured terminal file manager. It's tiny and nearly 0-config with an incredible speed.

It is designed to be unobtrusive with smart workflows to match the trains of thought.

nnn can analyze disk usage, batch rename, launch apps and pick files. The plugin repository has tons of plugins and documentation to extend the capabilities further e.g. preview, (un)mount disks, find & list, file/dir diff, upload files.

There are 2 independent (neo)vim plugins - nnn.vim and vim-floaterm nnn wrapper.

It runs smoothly on the Pi, Termux (Android), Linux, macOS, BSD, Haiku, Cygwin, WSL, across DEs and GUI utilities or a strictly CLI environment.

Expand for some nnn magic! 🕶️
  • Instantly load, sort, filter thousands of files
  • Type to navigate with automatic dir selection
  • List input stream and pick entries to stdout or file
  • find/fd/grep/ripgrep/fzf from nnn and list in nnn
  • Never lose context - start where you quit
  • Mount any cloud storage service in a few keypresses
  • Select files from anywhere (not just a single dir)
  • Unlimited bookmarks, plugins, cmds with custom hotkeys
  • Write a plugin in any language you know
  • Edit and preview markdown, man page, HTML
  • Open a file and auto-advance to the next
  • Filter filtered entries, export list of visible files
  • Configure the middle mouse click to do anything
  • Fuzzy search subtree and open a file (or its parent dir)
  • Load four dirs with custom settings at once
  • Notifications on cp, mv, rm completion
  • Auto-sync selection to system clipboard
  • Access selection from another instance of nnn
  • Open text files detached in another pane/tab/window
  • Mount and modify archives
  • Create files/dirs/duplicates with parents (like mkdir -p)
  • Toggle hidden with ., visit $HOME with ~, last dir with -
  • Mark a frequently visited dir at runtime
  • Sort by modification, access and inode change time
  • Compile out/in features with make variables
  • Watch matrix text fly or read fortune messages
  • Configure in 5 minutes!

Donate via PayPal!

Features

  • Frugal
    • Typically needs less than 3.5MB resident memory
    • Works with 8 colors (and xterm 256 colors)
    • Disk-IO sensitive (few disk reads and writes)
    • No FPU usage (all integer maths, even for file size)
    • Minimizes screen refresh with fast line redraws
    • Tiny binary (typically around 100KB)
    • 1-column mode for smaller terminals and form factors
    • Hackable - compile in/out features and dependencies
  • Portable
    • Language-agnostic plugins
    • Static binary available (no need to install)
    • Minimal library deps, easy to compile
    • No config file, minimal config with sensible defaults
    • Plugin to backup configuration
    • Widely available on many packagers
    • Touch enabled, comfortable on handhelds too!
    • Unicode support
  • Quality
    • Privacy-aware (no unconfirmed user data collection)
    • POSIX-compliant, follows Linux kernel coding style
    • Highly optimized, static analysis integrated code
  • Modes
    • Light (default), detail
    • Disk usage analyzer (block/apparent)
    • File picker, (neo)vim plugin
  • Navigation
    • Type-to-nav mode with dir auto-select
    • Contexts (aka tabs/workspaces) with custom colors
    • Sessions, bookmarks with hotkeys; mark and visit a dir
    • Remote mounts (needs sshfs, rclone)
    • Familiar shortcuts (arrows, ~, -, @), quick look-up
    • cd on quit (easy shell integration)
    • Auto-advance on opening files
  • Search
    • Instant filtering with search-as-you-type
    • Regex (POSIX/PCRE) and string (default) filters
    • Subtree search plugin to open or edit files
  • Sort
    • Ordered pure numeric names by default (visit /proc)
    • Case-insensitive version (aka natural) sort
    • By name, access/change/mod (default) time, size, extn
    • Reverse sort
  • Mimes
    • Preview hovered files in FIFO-based previewer
    • Open with desktop opener or specify a custom opener
    • File-specific colors (or minimal dirs in context color)
    • Icons (customize and compile-in)
    • Plugins for image and video thumbnails
    • Create, list, extract, mount (FUSE based) archives
    • Option to open all text files in $EDITOR
  • Information
    • Detailed file information
    • Media information plugin
  • Convenience
    • Run plugins and custom commands with hotkeys
    • FreeDesktop compliant trash (needs trash-cli)
    • Cross-dir file/all/range selection
    • Create (with parents), rename, duplicate files and dirs
    • Batch renamer for selection or dir
    • List input stream of file paths from stdin or plugin
    • Copy (as), move (as), delete, archive, link selection
    • Dir updates, notification on cp, mv, rm completion
    • Copy file paths to system clipboard on select
    • Launch apps, run commands, spawn a shell, toggle exe
    • Access hovered file as $nnn at prompt or spawned shell
    • Lock terminal after configurable idle timeout
    • Basic support for screen readers and braille displays

Quickstart

  1. Install nnn and any dependencies you need. All files are opened with the desktop opener by default.
  2. Add option -e to your alias to open text files in $VISUAL/$EDITOR/ vi. Open detached if you wish.
  3. Configure cd on quit.
  4. Sync subshell $PWD to nnn.
  5. Install plugins.
  6. Use option -x to copy selected file paths to system clipboard and show notis on cp, mv, rm completion.
  7. For a CLI-only environment, customize and use plugin nuke with option -c (overrides -e).
  8. Bid ls goodbye! alias ls='nnn -de' 😎

Don't memorize! Arrows (or h j k l), /, q suffice. Tab creates and/or cycles contexts. ? lists shortcuts.

Wiki

Videos

Elsewhere

Developers

Visit the ToDo list to contribute or see the features in progress.

Comments
  • ToDo list

    ToDo list

    Rolled from #337.

    For next release

    • [x] all keybinds and options reviewed by the team, finalized and frozen
    • [x] auto archive handling by extension (see config NNN_ARCHIVE)
    • [x] reverse sort (keys R and ^T)
    • [X] sort only filtered entries (instead of refresh)
    • [x] Lead key simplified to Bookmark key (b or ^/)
    • [x] improved help screen readability
    • [x] plugin nuke: sample opener (CLI-only by default)
    • [x] internal plugin .cbcp: copy selection to system clipboard
    • [x] internal plugin .ntfy: show notis on cp, mv, rm completion
    • [x] plugin autojump: navigate using autojump
    • [x] plugin upload (previously transfer), uses https://file.io
    • [x] prefix - to skip dir refresh after running (cmd as) plugin
    • [x] suffix * to skip confirmation after running cmd as plugin
    • [x] all fuzzy plugins modified to support both fzf and fzy
    • [x] add prefix instead of suffix for link creation
    • [x] indicate range selection mode with *
    • [x] list keys at bookmark and plugin key prompts
    • [x] jump to pinned directory like bookmark (Bookmark key followed by ,)
    • [x] toggle executable (key *)
    • [x] show mime along with file details
    • [x] retain filter when Up and Down are pressed (across contexts)
    • [x] remove option -f to run filter as prompt on prompt key (can be disruptive)
    • [x] remove redundant plugin key : (alternatives more convenient)
    • [x] remove redundant first file key Lead' (alternative more convenient)
    • [x] option -x: enable notis and copy selection to system clipboard
    • [x] option -g: regex filters (substring filter is default now)
    • [x] option -Q: quit program without confirmation
    • [x] option -s: load session (earlier -e)
    • [x] option -n: start in nav-as-you-type mode (earlier -i)
    • [x] option -v: version sort (earlier -n)
    • [x] option -V: show program version (earlier -v)
    • [x] option -A: disable dir auto-select (earlier -t)
    • [x] key v: runtime version sort
    • [x] key s: manage session
    • [x] key y: list selection, key ^Y: edit selection
    • [x] key ,: pin CWD
    • [x] key i: archive entry
    • [x] key ^V: copy/move selection as
    • [x] key ^P: pick and run a plugin
    • [x] ISO 8601 compliant date in status bar
    • [x] ported to Haiku OS (thanks @annagrram)
    • [x] fix getplugs to install hidden files
    • [x] fix several selection issues (see #400)
    • [x] fix detail mode not restored on loading session
    • [x] fix symlink to directory not auto-selected
    • [x] fix regex error on partial regex patterns
    • [x] fix symlink not shown if stat() on target fails
    • [x] fix flags when spawning a CLI opener as default FM
    • [x] fix issue with stat flag on Sun (no support for dirent.d_type)
    • [x] fix current file in current context not saved correctly in session
    • [x] signed source distribution on release
    • [x] simplified debugging with line numbers in logs

    Proposed features and tasks (up for grabs)

    • [ ] remember the last filter within the filter buffer and show it at a particular keypress if the filter is empty (have a keybind at empty filter)
    • [ ] switch between substring-search and regex (have keybind at empty filter to switch)
    • [ ] detect and enable case-sensitive matches when there's a capital in the string
    • [ ] redraw only affected lines on Up/Down key navigation
    • [ ] take list of files as input and show
    • [ ] add PCRE code within a macro and add Makefile target to compile with PCRE library
    • [ ] support pre-defined filters like bookmarks
    • [ ] Cygwin package
    • [ ] update the nnn.vim plugin to show a persistent bar (https://github.com/mcchrish/nnn.vim/issues/46)
    • [ ] a video exploring nnn plugins

    Anything else which would add value (please discuss in this thread).

    List of completed features and tasks.

    opened by jarun 128
  • ToDo list

    ToDo list

    Rolled from #213.

    Ready for next release

    • [x] custom key-plugin keybinds to run plugins directly
    • [x] fix tar/bsdtar always creating tar archives (and not by suffix)
    • [x] make selection based archives lose path prefix for files in current dir
    • [x] fix single mouse click to select file not working
    • [x] key Lead' to jump to first file in current directory
    • [x] auto-proceed to next file on cherry-pick in selection mode
    • [x] fix symlink to dir removed on batch rename
    • [x] config NNN_OPS_PROG renamed to NNN_CP_MV_PROG

    Proposed features and tasks (up for grabs)

    • [ ] script to duplicate selection in respective directories
    • [ ] refactor function browse()

    Anything else which would add value (please discuss in this thread).

    List of completed features and tasks.

    opened by jarun 93
  • Persistent selection

    Persistent selection

    Added a patch for persistent selection markers across directory change.

    It is not a smart implementation, it simply searches the selection for every entry found in a directory an sets its selected flag if found. Works surprisingly smoothly even with 100k+ selected files while browsing across directories with up to 10k files. When I tried to enter a 100k directory with 100k file selection I had to wait a few seconds. Do test it on an older system. Where it falls apart is deselection. It searches for the path to be deselected and moves everything in front of it in the buffer back. Which means that removing older selections is more expensive than removing new ones.

    It doesn't allocate any extra memory compared to master. It does use memmem() which is not part of the C standard, but should be available on the majority of systems.

    I was thinking of also making a version with a trie, but now that I see that only deselection is slow (on a PC bought last year) I'm not really sure. It would use more memory and more CPU over master, but at a certain size of selection it should use less CPU than this brute. But nothing is for sure until benched properly. Let me hear what you think.

    Fixes #alotofissues

    opened by KlzXS 88
  • ToDo list

    ToDo list

    Rolled from #1133.

    Cooking

    • [x] support macOS iterm2 in plugin preview-tui (#1196)
    • [x] use selection at native command prompt with %j and %J
    • [x] scroll strings longer than columns in rename/new prompts (#1213, #279)
    • [x] batch rename symlink targets in listing mode (#1214)
    • [x] picker mode: enable auto-proceed
    • [x] picker mode: don't pick hovered file on Enter if selection exists
    • [x] picker mode: fix issue in plugin fzopen when used to pick files
    • [x] send file to explorer FIFO on double left click instead of opening it
    • [x] new neovim plugin nnn.nvim featuring explorer mode (-F flag)
    • [x] explorer mode for nnn.vim
    • [x] remove option -w: always place HW cursor on current entry
    • [x] accept link name when linking a single target (#1201)
    • [x] option -i to show current file information in info bar
    • [x] force GNU sed on *BSD and Solaris
    • [x] fix preview-tui without -a (#1208)
    • [x] disable editing file in picker mode (#1183)
    • [x] save session in picker mode (#1190)

    Up for grabs

    None open at the time.

    For anything else please discuss in this thread.

    Contribution guideline.

    planning 
    opened by jarun 86
  • Sane keybinds and switches

    Sane keybinds and switches

    I spent a lot of time today on having some sanity in our keybinds & program switches. Came up with commit 146da5911d8273ce302fb70ddf443cb577f9def4.

    Keybinds: https://github.com/jarun/nnn/wiki/Usage#keyboard-and-mouse

    Options: https://github.com/jarun/nnn/wiki/Usage#command-line-options

    I need all of you to review this and suggest any further changes or discuss if you have anything in mind. From the next release these keys will be fixed.

    opened by jarun 84
  • ToDo list

    ToDo list

    Rolled from #386.

    For next release

    • [x] program option -e replaces NNN_USE_EDITOR
    • [x] program option -t replaces NNN_IDLE_TIMEOUT
    • [x] use umount on macOS to unmount
    • [x] confirm and try lazy unmount when regular unmount fails
    • [x] quit with error code on Q
    • [x] additional key F5 to toggle hidden
    • [x] fix crash on entering empty dir, then Down
    • [x] add glow as Markdown viewer in nuke

    Proposed features and tasks (up for grabs)

    • [ ] take list of files as input and show
    • [ ] add PCRE code within a macro and add Makefile target to compile with PCRE library (sample code)
    • [ ] support pre-defined filters like bookmarks
    • [ ] Cygwin package
    • [ ] update the nnn.vim plugin to show a persistent bar (https://github.com/mcchrish/nnn.vim/issues/46)
    • [ ] a video exploring nnn plugins

    Anything else which would add value (please discuss in this thread).

    List of completed features and tasks.

    opened by jarun 81
  • ToDo list

    ToDo list

    Rolled from #332.

    Ready for next release

    • run custom (non-shell-interpreted) commands like plugins
    • sessions (thanks @annagrram)
    • configure cd-on-quit as the default behaviour
    • copy as and move as workflow
    • edit , flush selection buffer (thanks @KlzXS)
    • changed the key to size sort to z
    • ignore events during selection so the + symbol is not lost
    • mount archives using archivemount
    • smoother double click handling
    • keybind collision checker (for users setting custom keybinds) (thanks @annagrram)
    • show size of file in bytes in status bar in disk usage mode
    • pass unresolved path as second argument ($2) to plugin
    • mechanism for plugins to control active directory
    • plugins
      • getplugs - a lot of intelligence added to the plugin installer (thanks @KlzXS)
      • drag-file & drop-file: drag & drop files using dragon
      • gutenread: browse, download and read from Project Gutenberg
      • suedit - edit file with superuser permissions
      • fzhist - fuzzy select commands from history, edit and run
      • fzcd - change to a fuzzy-searched directory
      • pskill - fuzzy list a process or zombies by name and kill
      • exetoggle - toggle executable status of hovered file
      • treeview - informative tree output with file permissions and size
      • checksum - recursively calculate checksum for files in hovered directory
      • fzy-open renamed to fzopen
    • additional key ; to execute plugin
    • more explicit force removal message
    • export current file as $NNN (instead of $NN)
    • fix opening files from browser

    Proposed features and tasks (up for grabs)

    • [ ] print disk usage and directory snapshot
    • [ ] a video exploring nnn plugins
    • [ ] script to duplicate files in selection

    Anything else which would add value (please discuss in this thread).

    List of completed features and tasks.

    opened by jarun 72
  • ToDo list and discussion

    ToDo list and discussion

    Rolled from #1416.

    Cooking

    • [x] add correct check for Wayland in clipboard plugins

    Up for grabs

    None open at the time.

    For anything else please discuss in this thread.

    Contribution guideline.

    planning 
    opened by jarun 71
  • Get nnn compile and run on Haiku

    Get nnn compile and run on Haiku

    I got a bit of free time so I decided to take something small from #386.

    I don't use Haiku, but got interested in it, so here is a small nudge in the right direction. Code now compiles and runs. Still need to implement eventing and test everything else :)

    Maybe more people with more familiarity with Haiku can jump in and help.

    opened by annagrram 68
  • ToDo list

    ToDo list

    Rolled from #1040.

    Cooking

    • [x] add bookmarks directory for flexible symlinked bookmarks
    • [x] new key B to add a symlinked bookmark for current dir
    • [x] sync multiple instances of nnn after operation on selection
    • [x] save complete per-context filter when saving sessions
    • [x] disable symlink resolution for paths in NNN_BMS and arg PATH
    • [x] do not end selection mode before running plugins/prompt/shell
    • [x] plugin finder will now retain search filter history
    • [x] plugin bookmarks removed with symlinked bookmarks support
    • [x] list open locations in active contexts in help page
    • [x] make option O_MATCHFLTR to discard filter key if no match
    • [x] configurable NNN_TMPFILE to cd on quit
    • [x] disable auto marking directories (use -)
    • [x] picker mode improvements
      • open tty for input if STDIN is non-tty
      • truncate output file before writing
      • do not double select a file on Enter
    • [x] no redraw during du calculation, show only current dir name
    • [x] plugin xdgdefault: add dmenu support

    Up for grabs

    • [ ] notcurses UI backend (#1014) [@KlzXS]
    • [ ] open new terminal window in spawned shell dir (#759)

    For anything else please discuss in this thread.

    Contribution guideline.

    planning 
    opened by jarun 67
  • Icons

    Icons

    Icons can be optionally be compiled in. They can be configured to be any printable string, although to get actual icons you need a patched font. This uses the icons-in-terminal.h generated header with the default configuration. I haven't included that header here as it should be generated when icons-in-terminal does its magic, so you can just copy that over to the sources folder.

    Padding (also any printable string) can be added from both left and right. On my system I needed a single space from the right side to prevent it overlapping with the entry name. You will need to figure out the proper amount for yourself.

    All the configuration is done in the new icons.h header.

    The icons look good, I think they look much better if you apply the color of the entry to them so I did that. I tested it on a directory with 3000+ files with all the extensions and I can't see a difference in load time. Everything works when changing the number of columns.

    When this gets merged I'll add a wiki entry explaining the usage there.

    opened by KlzXS 67
  • Notification system for plugins

    Notification system for plugins

    Currently plugins have various ways to have switch on notification.

    Most of them have code you need to comment out if you want notification. kdeconnect has an internal variable you need to set to 1.

    I think this should be governed centrally by the -x command line switch.

    nnn should send the NNN_OPTS env variable to the sub-shell that run the plugins, or ad-hoc create one by merging the command line switches if the user is using command line switches rather than the environment variable.

    The plugins can then check the exported NNN_OPTS environment variable and look for the x flag.

    enhancement 
    opened by raffaem 1
  • Tracker

    Tracker

    Rolled from #1537.

    Cooking

    • [x] create new file or directory (tree) on startup
    • [x] improve archive, rename and create new workflows
    • [x] optimize link creation
    • [x] allow overwriting regular files on new empty file creation
    • [x] add correct check for Wayland in clipboard plugins
    • [x] plugin kdeconnect - send multiple files
    • [x] plugin nmount - misc. improvements

    Up for grabs

    None open at the time.

    Contribution guideline.

    planning 
    opened by jarun 0
Releases(v4.7)
Owner
Mischievous Meerkat
Blending the terminal in a GUI world.
Mischievous Meerkat
Spitfire is a basic terminal language that can exicute code via the terminal.

Spitfire is a basic terminal language that can exicute code via the terminal. It is easy to learn and runs fast, considering that its just a 300 line c++ file.

jhomas tefferson 0 Nov 18, 2021
Simple Unix Terminal Football Manager-like game.

Superleage 2020/2021 It is a "work in progress" simple game based on some mechanics of Football Manager. The game is in a very early stage of Developm

sewe2000 2 Oct 14, 2021
The KISS file manager: CLI-based, ultra-lightweight, lightning fast, and written in C

CliFM is a CLI-based, shell-like (non-curses) and KISS terminal file manager written in C: simple, fast, and lightweight as hell

leo-arch 819 Jan 8, 2023
Small header only C++ library for writing multiplatform terminal applications

Terminal Terminal is small header only library for writing terminal applications. It works on Linux, macOS and Windows (in the native cmd.exe console)

Jupyter Xeus 274 Jan 2, 2023
:computer: C++ Functional Terminal User Interface. :heart:

FTXUI Functional Terminal (X) User interface A simple C++ library for terminal based user interface. Demo: Feature Functional style. Inspired by [1] a

Arthur Sonzogni 4k Jan 3, 2023
A little UNIX-inspired terminal application for the Numworks Calculator (not using escher).

L.E. Terminal (let for short) is a little UNIX-inspired terminal for the Numworks Calculator.

Cacahuète Sans Sel 20 Aug 31, 2022
Draw sequence diagram in text from terminal.

sequence-diagram-cli Draw seqence diagram from terminal.

null 44 Dec 20, 2022
Terminal calculator made for programmers working with multiple number representations, sizes, and overall close to the bits

Programmer calculator The programmer calculator is a simple terminal tool designed to give maximum efficiency and flexibility to the programmer workin

romes 183 Dec 24, 2022
X terminal emulator rendering through OpenGL ES Compute Shaders

Zutty is a terminal emulator for the X Window System, functionally similar to several other X terminal emulators such as xterm, rxvt and countless others

Tom Szilagyi 259 Dec 24, 2022
The new Windows Terminal and the original Windows console host, all in the same place!

The new Windows Terminal and the original Windows console host, all in the same place!

Microsoft 86.8k Dec 29, 2022
Graphs the activity of a chia harvester in a linux terminal.

Chia Harvest Graph Monitor for Chia Harvesting Introduction The chiaharvestgraph tool will graph Chia Harvesting activity in a linux terminal. Use a 2

Bram Stolk 215 Dec 11, 2022
a simple to use linux terminal

a simple to use linux terminal

notaweeb 7 Feb 17, 2022
Collection of human friendly terminal interface for git.

A collection of human friendly terminal user interface for git.

Arthur Sonzogni 76 Dec 30, 2022
Simple benchmark for terminal output

TermBench This is a simple timing utility you can use to see how slow your terminal program is at parsing escape-sequence-coded color output. It can b

Casey Muratori 174 Dec 4, 2022
tinytetris - 80x23 terminal tetris

tinytetris - 80x23 terminal tetris

Conor Taylor 2k Jan 3, 2023
Contour - A modern C++ Terminal Emulator

contour is a modern terminal emulator, for everyday use. It is aiming for power users with a modern feature mindset.

Contour Terminal Emulator 1.1k Dec 28, 2022
A C, C++ and Rust library to draw graphics with pixels in the terminal

A library to draw graphics with pixels in the terminal Who needs a GUI when you have a terminal ? Building To generate libpluto.a, run: $ make To ins

null 69 Nov 7, 2022
📺🗿 Terminal graphics for the 21st century.

???? Chafa is a command-line utility that converts all kinds of images, including animated GIFs, into sixel or ANSI/Unicode character output that can be displayed in a terminal.

Hans Petter Jansson 1.8k Dec 31, 2022
timg - Terminal Image and Video Viewer

timg - Terminal Image and Video Viewer

Henner Zeller 1.3k Dec 31, 2022