在命令行中我喜欢使用ranger来管理文件。ranger的操作风格与vim类似,我很喜欢。vim中有很多优秀的文件管理插件。今天介绍一下我在使用defx时的心得,分享一下配置。
项目主页 https://github.com/Shougo/defx.nvim
关于Defx 是一个用于 Neovim/Vim 浏览文件的插件。它取代了已弃用的 vimfiler 插件。
概念-
不依赖于 denite.nvim
-
Vim8/neovim 兼容(Vim8 需要 nvim-yarp)
-
由 Python3 实现
-
没有双重过滤器功能
-
栏目特色
-
源功能,如 denite.nvim
-
选项
-
突出显示由列定义
-
很少的命令(仅:Defx 命令?)
-
扩展重命名
-
标记
-
需要 Windows 支持者
-
最大功能不喜欢其他文件管理器
注意: defx 需要 Neovim 0.4.0+ 或 Vim8.2+ 和 Python3.6.1+。如果您不确定您是否有此要求,请参阅 要求。
For vim-plug
if has('nvim')
Plug 'Shougo/defx.nvim', { 'do': ':UpdateRemotePlugins' }
else
Plug 'Shougo/defx.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
endif
要求
defx 需要 Python3.6.1+ 和 Neovim(0.4.0+) 或带有 if_python3 的 Vim8.2+。如果 :echo has(“python3”)返回1,那么你有 python 3 支持;否则,请参见下文。
注意:推荐使用最新的 Neovim,因为它更快。
您可以使用 pip 启用 Python3 接口:
pip3 install --user pynvim
请为 Vim8 安装 nvim-yarp 插件。 https://github.com/roxma/nvim-yarp 请为 Vim8 安装 vim-hug-neovim-rpc 插件。 https://github.com/roxma/vim-hug-neovim-rpc
关于图标如果你发现没有像有截图上的那样有图标,安装下面两个插件就可以解决不显示图标的问题。
"显示dev图片
Plug 'ryanoasis/vim-devicons'
Plug 'kristijanhusak/defx-icons'
对应项目地址:
- https://github.com/ryanoasis/vim-devicons
- https://github.com/kristijanhusak/defx-icons
然后你还需要给你的终端配置字体,可以参考:https://blog.csdn.net/lxyoucan/article/details/115695733
配置快捷键的设置,主要为了与ranger保持一至,常用操作是:
项目快捷键下移j 或者
上移k 或者
上一层h 或者
打开l 或者
复制yy剪切dd粘贴pp删除dD新建目录K新建文件N选择文件
或者 M全选文件* 或者 vv复制文件路径YY打开或关闭文件夹o执行shell 命令(如:mkdir mv cp等)!指定窗口中打开文件(需要安装t9md/vim-choosewin)i
配置如下:
" Define mappings
"cnoreabbrev sf Defx -listed -new
" \ -columns=indent:mark:icon:icons:filename:git:size
" \ -buffer-name=tab`tabpagenr()`
nnoremap sf :Defx -listed -resume
\ -columns=indent:mark:icon:icons:filename:git:size
\ -buffer-name=tab`tabpagenr()`
\ `expand('%:p:h')` -search=`expand('%:p')`
nnoremap fi :Defx -new `expand('%:p:h')` -search=`expand('%:p')`
autocmd FileType defx call s:defx_my_settings()
function! s:defx_my_settings() abort
" Define mappings
nnoremap
\ defx#do_action('open')
nnoremap yy
\ defx#do_action('copy')
nnoremap dd
\ defx#do_action('move')
nnoremap pp
\ defx#do_action('paste')
nnoremap l
\ defx#do_action('open')
nnoremap
\ defx#do_action('open')
nnoremap E
\ defx#do_action('open', 'vsplit')
nnoremap n
\ defx#do_action('open', 'pedit')
nnoremap i
\ defx#do_action('open', 'choose')
nnoremap o
\ defx#do_action('open_or_close_tree')
nnoremap K
\ defx#do_action('new_directory')
nnoremap N
\ defx#do_action('new_file')
nnoremap M
\ defx#do_action('new_multiple_files')
nnoremap C
\ defx#do_action('toggle_columns',
\ 'mark:indent:icon:filename:type:size:time')
nnoremap S
\ defx#do_action('toggle_sort', 'time')
nnoremap dD
\ defx#do_action('remove')
nnoremap a
\ defx#do_action('rename')
nnoremap !
\ defx#do_action('execute_command')
nnoremap x
\ defx#do_action('execute_system')
nnoremap YY
\ defx#do_action('yank_path')
nnoremap .
\ defx#do_action('toggle_ignored_files')
nnoremap ;
\ defx#do_action('repeat')
nnoremap h
\ defx#do_action('cd', ['..'])
nnoremap
\ defx#do_action('cd', ['..'])
nnoremap ~
\ defx#do_action('cd')
nnoremap q
\ defx#do_action('quit')
nnoremap
\ defx#do_action('toggle_select') . 'j'
nnoremap m
\ defx#do_action('toggle_select') . 'j'
nnoremap vv
\ defx#do_action('toggle_select_all')
nnoremap *
\ defx#do_action('toggle_select_all')
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')
endfunction
call defx#custom#column('icon', {
\ 'directory_icon': '▸',
\ 'opened_icon': '▾',
\ 'root_icon': ' ',
\ })
call defx#custom#column('git', 'indicators', {
\ 'Modified' : 'M',
\ 'Staged' : '✚',
\ 'Untracked' : '✭',
\ 'Renamed' : '➜',
\ 'Unmerged' : '═',
\ 'Ignored' : '☒',
\ 'Deleted' : '✖',
\ 'Unknown' : '?'
\ })
指定窗口中打开文件
这一点我单独列出来说一下,因为我觉得这个对我来说非常的实用。可以选择文件在哪个窗口打开,这个是我一直想要的功能。实现起来很简单。 安装插件
Plug 't9md/vim-choosewin'
配置
" if you want to use overlay feature
let g:choosewin_overlay_enable = 1
好了,这下可以愉快的使用i来在指定窗口打开想要打开的文件啦。
总结这样配置下来,在vim中使用defx的感觉基本与ranger差不多了。用起来很顺手。
虽然vim中也可以直接使用ranger,可以参考:《vim中使用ranger强强联手更快更强》 https://blog.csdn.net/lxyoucan/article/details/116486176
毕竟defx是vim 的插件与vim结合的相对更紧,可配置的地方更多。
在vim中使用ranger如下图所示: defx如下图所示:
从界面上可以看出defx的图标有不同的颜色更鲜艳。defx可以在指定窗口打开文件,这点我很喜欢。而且在vim中定义的一些按键映射直接就可以使用比如: ⇒ 5j 这个我经常用,直接就可以使用了。
而ranger作为一个专业的文件管理器,文件管理相关的细节会更多。各有优缺点,选哪个呢?作为vim中的文件管理器,两都都非常够用。 小孩子才做选择,我都要。用哪个看心情好了。
灵感源于https://github.com/craftzdog/dotfiles-public/blob/master/.config/nvim/plugins/defx.rc.vim