diff options
-rw-r--r-- | doc/examples/vim_file_chooser.vim | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/doc/examples/vim_file_chooser.vim b/doc/examples/vim_file_chooser.vim index 4f5fa3f2..064fbab6 100644 --- a/doc/examples/vim_file_chooser.vim +++ b/doc/examples/vim_file_chooser.vim @@ -2,16 +2,32 @@ " " Add ranger as a file chooser in vim " -" If you add this function and the key binding to the .vimrc, ranger can be -" started using the keybinding ",r". Once you select a file by pressing -" enter, ranger will quit again and vim will open the selected file. +" If you add this code to the .vimrc, ranger can be started using the command +" ":RagerChooser" or the keybinding "<leader>r". Once you select one or more +" files, press enter and ranger will quit again and vim will open the selected +" files. -fun! RangerChooser() - exec "silent !ranger --choosefile=/tmp/chosenfile " . expand("%:p:h") - if filereadable('/tmp/chosenfile') - exec 'edit ' . system('cat /tmp/chosenfile') - call system('rm /tmp/chosenfile') +function! RangeChooser() + let temp = tempname() + " The option "--choosefiles" was added in ranger 1.5.1. Use the next line + " with ranger 1.4.2 through 1.5.0 instead. + "exec 'silent !ranger --choosefile=' . shellescape(temp) + exec 'silent !ranger --choosefiles=' . shellescape(temp) + if !filereadable(temp) + " Nothing to read. + return endif - redraw! -endfun -map ,r :call RangerChooser()<CR> + let names = readfile(temp) + if empty(names) + " Nothing to open. + return + endif + " Edit the first item. + exec 'edit ' . fnameescape(names[0]) + " Add any remaning items to the arg list/buffer list. + for name in names[1:] + exec 'argadd ' . fnameescape(name) + endfor +endfunction +command! -bar RangerChooser call RangeChooser() +nnoremap <leader>r :<C-U>RangerChooser<CR> |