" Netrw - Vim's built-in file browser. " Put errors in `:messages` let g:netrw_use_errorwindow = 0 " 'o' to (o)pen autocmd FileType netrw map o " Dirvish file browser. " Use relative paths if there is no `conceal` ability. let g:dirvish_relative_paths = (v:version <= 703 ? 1 : 0) augroup dirvishCustomisation autocmd! " Add/Adjust mappings. " - 'o' to (o)pen and 'i' to spl(i)t. " - Add, Copy, Delete, Rename with 'ma', 'mc', 'md', 'mr'. autocmd FileType dirvish let s:nowait = (v:version > 703 ? '' : '') \| execute 'nnoremap '.s:nowait.' o :.call dirvish#open("edit", 0)' \| execute 'nnoremap '.s:nowait.' i :.call dirvish#open("split", 1)' \| execute 'xnoremap '.s:nowait.' O :call dirvish#open("edit", 0)' \| execute 'xnoremap '.s:nowait.' I :call dirvish#open("split", 1)' \| execute 'nnoremap '.s:nowait.' ma :.call FileAdd()' \| execute 'nnoremap '.s:nowait.' mc :.call FileCopy()' \| execute 'nnoremap '.s:nowait.' md :.call FileDelete()' \| execute 'nnoremap '.s:nowait.' mr :.call FileRename()' augroup END " Create any directories required. function! CreateDirs(filename) if &ft != "dirvish" | return | endif let dirname = fnamemodify(a:filename, ':p:h') if dirname != expand('%:h') | call system('mkdir -p '.dirname) | endif endfunction " Create files/directories in dirvish buffers. function! FileAdd() if &ft != "dirvish" | return | endif let newfile = inputdialog('New File: ', expand('%'), 0) if newfile == "0" | return | endif call CreateDirs(newfile) if !isdirectory(newfile) execute 'edit' newfile else normal R endif endfunction " Rename files/directories in dirvish buffers. function! FileCopy() if &ft != "dirvish" | return | endif let current = getline('.') let newname = inputdialog('Copy: ', current, 0) if newname == "0" | return | endif call CreateDirs(newname) call system('cp '.current.' '.newname) | normal R endfunction " Delete files/directories in dirvish buffers. function! FileDelete() if &ft != "dirvish" | return | endif let current = getline('.') if current == '/' | return | endif " Do not do the silly thing. let delcheck = confirm('Delete `'.current.'`?', "&Yes\n&No", 2) if delcheck != 1 | return | endif let delcheck = confirm('Are you SURE?', "&Yes\n&No", 2) if delcheck != 1 | return | endif call system('rm -rf '.current) | normal R endfunction " Rename files/directories in dirvish buffers. function! FileRename() if &ft != "dirvish" | return | endif let current = getline('.') let newname = inputdialog('Rename: ', current, 0) if newname == "0" | return | endif call CreateDirs(newname) call rename(current, newname) | normal R endfunction " Fuzzy Finder " Set `p` to FZF if possible. CtrlP is always available at `` if executable('fzf') map p :FZF else let g:ctrlp_map = 'p' endif " CtrlP uses `git ls-files` in git repos, otherwise `ag` then `find`. let g:ctrlp_user_command = [ \ '.git', \ 'cd %s && git ls-files . -co --exclude-standard', \ executable('ag') ? 'ag %s -l --nocolor -g ""' : 'find %s -type f' \]