The file manipulation commands for vim-dirvish that you've always wanted
Have only tested on MacOS and Neovim, but it should work with Vim.
You'll need:
- dirvish.vim
- A CLI that provides a
trash
command, such as trash or trash-cli
Then install with your favorite package manager:
Plug 'roginfarrer/vim-dirvish-dovish', {'branch': 'main'}
Function | Default | Key |
---|---|---|
Create file | a |
<Plug>(dovish_create_file) |
Create directory | A |
<Plug>(dovish_create_directory) |
Delete under cursor | dd |
<Plug>(dovish_delete) |
Rename under cursor | r |
<Plug>(dovish_rename) |
Yank under cursor (or visual selection) | yy |
<Plug>(dovish_yank) |
Copy file to current directory | pp |
<Plug>(dovish_copy) |
Move file to current directory | PP |
<Plug>(dovish_move) |
You can unmap all of the maps above and set your own (mine are below). Add this to ftplugin/dirvish.vim
:
" unmap all default mappings
let g:dirvish_dovish_map_keys = 0
" unmap dirvish default
unmap <buffer> p
" Your preferred mappings
nmap <silent><buffer> i <Plug>(dovish_create_file)
nmap <silent><buffer> I <Plug>(dovish_create_directory)
nmap <silent><buffer> dd <Plug>(dovish_delete)
nmap <silent><buffer> r <Plug>(dovish_rename)
nmap <silent><buffer> yy <Plug>(dovish_yank)
xmap <silent><buffer> yy <Plug>(dovish_yank)
nmap <silent><buffer> p <Plug>(dovish_copy)
nmap <silent><buffer> P <Plug>(dovish_move)
Most file operations can be customized. Below are the defaults:
" Used for <Plug>(dovish_yank)
function! g:DovishCopyFile(target, destination) abort
return 'cp ' . a:target . ' ' . a:destination
endfunction
" Used for <Plug>(dovish_yank)
function! g:DovishCopyDirectory(target, destination) abort
return 'cp -r' . a:target . ' ' . a:destination
endfunction
" Used for <Plug>(dovish_move)
function! g:DovishMove(target, destination) abort
return 'mv ' . a:target . ' ' . a:destination
endfunction
" Used for <Plug>(dovish_delete)
function! g:DovishDelete(target) abort
return 'trash ' . a:target
endfunction
" Used for <Plug>(dovish_rename)
function! g:DovishRename(target, destination) abort
return 'mv ' . a:target . ' ' . a:destination
endfunction
Big shout out to Melandel for laying the foundation for this plugin!