"============================================================================= " defx.vim --- defx config " Copyright (c) 2016-2017 Wang Shidong & Contributors " Author: Wang Shidong < wsdjeg at 163.com > " URL: https://spacevim.org " License: GPLv3 "============================================================================= " defx supported is added in https://github.com/SpaceVim/SpaceVim/pull/2282 let s:SYS = SpaceVim#api#import('system') call defx#custom#option('_', { \ 'winwidth': g:spacevim_sidebar_width, \ 'split': 'vertical', \ 'direction': 'botright', \ 'show_ignored_files': 0, \ 'buffer_name': '', \ 'toggle': 1, \ 'resume': 1 \ }) call defx#custom#column('mark', { \ 'readonly_icon': '', \ 'selected_icon': '', \ }) call defx#custom#column('filename', { \ 'directory_icon': '', \ 'opened_icon': '', \ }) augroup vfinit au! autocmd FileType defx call s:defx_init() " auto close last defx windows autocmd BufEnter * nested if \ (!has('vim_starting') && winnr('$') == 1 \ && &filetype ==# 'defx') | \ call s:close_last_vimfiler_windows() | endif augroup END " in this function, we should check if shell terminal still exists, " then close the terminal job before close vimfiler function! s:close_last_vimfiler_windows() abort call SpaceVim#layers#shell#close_terminal() q endfunction function! s:defx_init() setl nonumber setl norelativenumber setl listchars= silent! nunmap silent! nunmap silent! nunmap silent! nunmap E silent! nunmap gr silent! nunmap gf silent! nunmap - silent! nunmap s " nnoremap st vimfiler#do_action('tabswitch') " nnoremap yY :call copy_to_system_clipboard() nnoremap ' \ defx#do_action('toggle_select') . 'j' " TODO: we need an action to clear all selections nnoremap V \ defx#do_action('toggle_select_all') " nmap v (vimfiler_quick_look) " nmap p (vimfiler_preview_file) " nmap i (vimfiler_switch_to_history_directory) " Define mappings nnoremap gx \ defx#do_action('execute_system') nnoremap yy \ defx#do_action('copy') nnoremap q \ defx#do_action('quit') nnoremap m \ defx#do_action('move') nnoremap P \ defx#do_action('paste') nnoremap h defx#do_action('call', 'DefxSmartH') nnoremap defx#do_action('call', 'DefxSmartH') nnoremap l \ defx#is_directory() ? \ defx#do_action('open_tree') . 'j' : defx#do_action('open') nnoremap \ defx#is_directory() ? \ defx#do_action('open_tree') . 'j' : defx#do_action('open') nnoremap \ defx#is_directory() ? \ defx#do_action('open_directory') : defx#do_action('drop') nnoremap <2-LeftMouse> \ defx#is_directory() ? \ defx#do_action('open_tree') : defx#do_action('drop') nnoremap sg \ defx#do_action('drop', 'vsplit') nnoremap sv \ defx#do_action('drop', 'split') nnoremap p \ defx#do_action('open', 'pedit') nnoremap N \ defx#do_action('new_file') nnoremap d \ defx#do_action('remove') nnoremap r \ defx#do_action('rename') nnoremap yy \ defx#do_action('yank_path') nnoremap . \ defx#do_action('toggle_ignored_files') nnoremap ~ \ defx#do_action('cd') nnoremap j \ line('.') == line('$') ? 'gg' : 'j' nnoremap k \ line('.') == 1 ? 'G' : 'k' nnoremap \ defx#do_action('redraw') nnoremap \ defx#do_action('print') nnoremap cd \ defx#do_action('change_vim_cwd') endf function! DefxSmartH(_) " candidate is opend tree? if defx#is_opened_tree() return defx#call_action('close_tree') endif " parent is root? let s:candidate = defx#get_candidate() let s:parent = fnamemodify(s:candidate['action__path'], s:candidate['is_directory'] ? ':p:h:h' : ':p:h') let sep = s:SYS.isWindows ? '\\' : '/' if s:trim_right(s:parent, sep) == s:trim_right(b:defx.paths[0], sep) return defx#call_action('cd', ['..']) endif " move to parent. call defx#call_action('search', s:parent) " if you want close_tree immediately, enable below line. call defx#call_action('close_tree') endfunction function! s:trim_right(str, trim) return substitute(a:str, printf('%s$', a:trim), '', 'g') endfunction