" vim/neovim plugin to use nnn as a file picker " Closely follows and inspired by the vim_file_chooser plugin for ranger. " " Author: Arun Prakash Jana " Email: engineerarun@gmail.com " Homepage: https://github.com/jarun/nnn " Copyright © 2018 Arun Prakash Jana " " Usage: " Copy this file to the vim/neovim plugin directory. " To open nnn as a file picker in vim/neovim, use the command ":NnnPicker" or " ":Np" or the key-binding "n". Once you select one or more files and " quit nnn, vim/neovim will open the first selected file and add the remaining " files to the arg list/buffer list. If no file is explicitly selected, the " last selected entry is picked. let s:temp = "" fun! s:T_OnExit(job_id, code, event) dict if a:code == 0 bd! call s:evaluate_temp() endif endfun fun! s:evaluate_temp() if !filereadable(s:temp) echoerr 'Temp file ' . s:temp . 'not readable!' redraw! " Nothing to read. return endif let names = readfile(s:temp) if empty(names) redraw! " Nothing to open. return endif " Edit the first item. exec 'edit ' . fnameescape(names[0]) " Add any remaining items to the arg list/buffer list. for name in names[1:] exec 'argadd ' . fnameescape(name) endfor redraw! endfun function! NnnPicker() let s:temp = tempname() let l:cmd = 'nnn -p ' . shellescape(s:temp) if has("nvim") enew call termopen(l:cmd, {'on_exit': function('s:T_OnExit')}) | startinsert elseif has("gui_running") exec 'silent !xterm -e ' . l:cmd call s:evaluate_temp() else exec 'silent !' . l:cmd call s:evaluate_temp() endif endfunction command! -bar NnnPicker call NnnPicker() nnoremap n :NnnPicker command! -nargs=* -complete=file Np :call NnnPicker()