filebrowser.vim 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. " Netrw - Vim's built-in file browser.
  2. " Put errors in `:messages`
  3. let g:netrw_use_errorwindow = 0
  4. " 'o' to (o)pen
  5. autocmd FileType netrw map <silent> <buffer> o <CR>
  6. " Dirvish file browser.
  7. " Use relative paths if there is no `conceal` ability.
  8. let g:dirvish_relative_paths = (v:version <= 703 ? 1 : 0)
  9. augroup dirvishCustomisation
  10. autocmd!
  11. " Add/Adjust mappings.
  12. " - 'o' to (o)pen and 'i' to spl(i)t.
  13. " - Add, Copy, Delete, Rename with 'ma', 'mc', 'md', 'mr'.
  14. autocmd FileType dirvish let s:nowait = (v:version > 703 ? '<nowait>' : '')
  15. \| execute 'nnoremap '.s:nowait.'<buffer><silent> o :<C-U>.call dirvish#open("edit", 0)<CR>'
  16. \| execute 'nnoremap '.s:nowait.'<buffer><silent> i :<C-U>.call dirvish#open("split", 1)<CR>'
  17. \| execute 'xnoremap '.s:nowait.'<buffer><silent> O :call dirvish#open("edit", 0)<CR>'
  18. \| execute 'xnoremap '.s:nowait.'<buffer><silent> I :call dirvish#open("split", 1)<CR>'
  19. \| execute 'nnoremap '.s:nowait.'<buffer><silent> ma :<C-U>.call FileAdd()<CR>'
  20. \| execute 'nnoremap '.s:nowait.'<buffer><silent> mc :<C-U>.call FileCopy()<CR>'
  21. \| execute 'nnoremap '.s:nowait.'<buffer><silent> md :<C-U>.call FileDelete()<CR>'
  22. \| execute 'nnoremap '.s:nowait.'<buffer><silent> mr :<C-U>.call FileRename()<CR>'
  23. augroup END
  24. " Create any directories required.
  25. function! CreateDirs(filename)
  26. if &ft != "dirvish" | return | endif
  27. let dirname = fnamemodify(a:filename, ':p:h')
  28. if dirname != expand('%:h') | call system('mkdir -p '.dirname) | endif
  29. endfunction
  30. " Create files/directories in dirvish buffers.
  31. function! FileAdd()
  32. if &ft != "dirvish" | return | endif
  33. let newfile = inputdialog('New File: ', expand('%'), 0)
  34. if newfile == "0" | return | endif
  35. call CreateDirs(newfile)
  36. if !isdirectory(newfile)
  37. execute 'edit' newfile
  38. else
  39. normal R
  40. endif
  41. endfunction
  42. " Rename files/directories in dirvish buffers.
  43. function! FileCopy()
  44. if &ft != "dirvish" | return | endif
  45. let current = getline('.')
  46. let newname = inputdialog('Copy: ', current, 0)
  47. if newname == "0" | return | endif
  48. call CreateDirs(newname)
  49. call system('cp '.current.' '.newname) | normal R
  50. endfunction
  51. " Delete files/directories in dirvish buffers.
  52. function! FileDelete()
  53. if &ft != "dirvish" | return | endif
  54. let current = getline('.')
  55. if current == '/' | return | endif " Do not do the silly thing.
  56. let delcheck = confirm('Delete `'.current.'`?', "&Yes\n&No", 2)
  57. if delcheck != 1 | return | endif
  58. let delcheck = confirm('Are you SURE?', "&Yes\n&No", 2)
  59. if delcheck != 1 | return | endif
  60. call system('rm -rf '.current) | normal R
  61. endfunction
  62. " Rename files/directories in dirvish buffers.
  63. function! FileRename()
  64. if &ft != "dirvish" | return | endif
  65. let current = getline('.')
  66. let newname = inputdialog('Rename: ', current, 0)
  67. if newname == "0" | return | endif
  68. call CreateDirs(newname)
  69. call rename(current, newname) | normal R
  70. endfunction
  71. " Fuzzy Finder
  72. " Set `<Leader>p` to FZF if possible. CtrlP is always available at `<C-p>`
  73. if executable('fzf')
  74. map <silent> <Leader>p :FZF<CR>
  75. else
  76. let g:ctrlp_map = '<Leader>p'
  77. endif
  78. " CtrlP uses `git ls-files` in git repos, otherwise `ag` then `find`.
  79. let g:ctrlp_user_command = [
  80. \ '.git',
  81. \ 'cd %s && git ls-files . -co --exclude-standard',
  82. \ executable('ag') ? 'ag %s -l --nocolor -g ""' : 'find %s -type f'
  83. \]