# nnn.vim
Fast and featureful file manager in vim/neovim powered by nnn.
colorscheme snow
### Requirements
1. nnn (minimum version 2.2)
2. Neovim or Vim 8.1 with terminal support
### Install
You must install nnn itself. Instructions
[here](https://github.com/jarun/nnn#installation).
Then install using your favorite plugin manager:
```vim
" using vim-plug
Plug 'mcchrish/nnn.vim'
```
### Usage
To open nnn as a file picker in vim/neovim, use the command `:NnnPicker` or
`:Np` or the key-binding `n`. You can pass a directory to `:NnnPicker`
command and opens nnn from there e.g. `:NnnPicker path/to/somewhere`.
Once you [select](https://github.com/jarun/nnn#selection) one or more files and
press enter, vim quits the nnn window and opens the first selected
file and add the remaining files to the arg list/buffer list.
Pressing enter on a file in nnn will pick any earlier selection, pick
the file and exit nnn.
To discard selection and exit, press ^G.
Please visit the complete documentation by running `:help nnn`.
### Configurations
#### Custom mappings
```vim
" Disable default mappings
let g:nnn#set_default_mappings = 0
" Then set your own
nnoremap nn :NnnPicker
" Or override
" Start nnn in the current file's directory
nnoremap n :NnnPicker '%:p:h'
```
#### Layout
```vim
" Opens the nnn window in a split
let g:nnn#layout = 'new' " or vnew, tabnew etc.
" Or pass a dictionary with window size
let g:nnn#layout = { 'left': '~20%' } " or right, up, down
```
#### Action
You can set extra key-bindings for opening files in different ways. Nothing is
set by default to not override nnn's own key-bindings.
```vim
let g:nnn#action = {
\ '': 'tab split',
\ '': 'split',
\ '': 'vsplit' }
```
For example, when inside an nnn window, pressing ctrl-t will open the
selected file in a tab, instead of the current window. ctrl-x will
open in a split an so on. Meanwhile for multi selected files will be loaded in
the buffer list.
#### Command override
When you want to override the default nnn command and add some extra flags.
Example you want to start nnn in light mode.
```vim
let g:nnn#command = 'nnn -l'
" or pass some env variables
let g:nnn#command = 'NNN_RESTRICT_NAV_OPEN=1 nnn -l'
```
#### `nnn#pick()`
The `nnn#pick([][,])` function can be called with custom directory
and additional options such as opening file in splits or tabs. Basically a more
configurable version of `:NnnPicker` command.
```vim
call nnn#pick('~/some-files', { 'edit': 'vertical split' })
" Then you can do all kinds of mappings if you want
```
`opts` can be:
- `edit` - type of window the select file will be open.
- `layout` - same as `g:nnn#layout` and overrides it if specified.
#### Environment variables
You can define env variables in `vimrc` and nnn will detect it.
```vim
let $NNN_RESTRICT_NAV_OPEN=1
```
### Credits
Main nnn program: https://github.com/jarun/nnn