function! s:smart_path() abort if !empty(&buftype) || bufname('%') =~# '^[^:]\+://' return fnamemodify('.', ':p') endif return fnamemodify(expand('%'), ':p:h') endfunctio nnoremap bb :Fern bookmark:/// nnoremap ee :Fern =smart_path() -reveal=% nnoremap EE :Fern . -drawer -toggle -reveal=% nnoremap jj :Fern =expand(g:junkfile#directory) -drawer -toggle -reveal=% nnoremap i :Fern -wait bookmark:///:Lista function! s:fern_init() abort " nnoremap " \ (fern-my-tcd:root-ready) " \ :call fern#smart#ready("\(fern-action-tcd:root)") " nmap " \ (fern-my-enter-and-tcd) " \ (fern-action-enter)(fern-my-tcd:root-ready) " nmap " \ (fern-my-leave-and-tcd) " \ (fern-action-leave)(fern-my-tcd:root-ready) nmap \ (fern-my-enter-and-tcd) \ (fern-action-enter)(fern-wait)(fern-action-tcd:root) nmap \ (fern-my-leave-and-tcd) \ (fern-action-leave)(fern-wait)(fern-action-tcd:root) nmap \ (fern-my-open-or-enter-and-tcd) \ fern#smart#leaf( \ "\(fern-action-open)", \ "\(fern-my-enter-and-tcd)", \ ) nmap \ (fern-my-open-or-enter) \ fern#smart#drawer( \ "\(fern-my-open-or-enter-and-tcd)", \ "\(fern-open-or-enter)", \ ) nmap \ (fern-my-leave) \ fern#smart#drawer( \ "\(fern-my-leave-and-tcd)", \ "\(fern-action-leave)", \ ) nmap (fern-my-open-or-enter) nmap (fern-my-leave) nmap (fern-my-open-or-enter) nmap (fern-my-leave) nmap (fern-action-open-and-stay) (fern-action-open) nmap ~ :Fern ~ " Open bookmark:/// nnoremap \ (fern-my-enter-bookmark) \ :Fern bookmark:/// nmap b \ fern#smart#scheme( \ "\(fern-my-enter-bookmark)", \ { \ 'bookmark': "\", \ }, \ ) endfunction function! s:fern_quickaccess() abort Fern bookmark:/// Lista endfunction augroup my-fern autocmd! * autocmd FileType fern call s:fern_init() augroup END " Disable netrw let g:loaded_netrw = 1 let g:loaded_netrwPlugin = 1 let g:loaded_netrwSettings = 1 let g:loaded_netrwFileHandlers = 1 augroup my-fern-hijack autocmd! autocmd BufEnter * ++nested call s:hijack_directory() augroup END function! s:hijack_directory() abort let path = expand('%:p') if !isdirectory(path) return endif bwipeout % execute printf('Fern %s', fnameescape(path)) endfunction if has('mac') && has('nvim') && !exists('$SSH_CONNECTION') let g:fern#renderer = 'devicons' endif let g:fern#keepalt_on_edit = 1