vim插件defx配置成类似ranger风格

在命令行中我喜欢使用ranger来管理文件。ranger的操作风格与vim类似,我很喜欢。vim中有很多优秀的文件管理插件。今天介绍一下我在使用defx时的心得,分享一下配置。
在这里插入图片描述

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://blog.csdn.net/lxyoucan/article/details/115695733

配置

快捷键的设置,主要为了与ranger保持一至,常用操作是:

项目快捷键
下移j 或者 <Down>
上移k 或者 <Up>
上一层h 或者 <Left>
打开l 或者 <Right>
复制yy
剪切dd
粘贴pp
删除dD
新建目录K
新建文件N
选择文件<Space>或者 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()`<CR>
nnoremap <silent>sf :<C-u>Defx -listed -resume
      \ -columns=indent:mark:icon:icons:filename:git:size
      \ -buffer-name=tab`tabpagenr()`
      \ `expand('%:p:h')` -search=`expand('%:p')`<CR>
nnoremap <silent>fi :<C-u>Defx -new `expand('%:p:h')` -search=`expand('%:p')`<CR>

autocmd FileType defx call s:defx_my_settings()
	function! s:defx_my_settings() abort
	  " Define mappings
	  nnoremap <silent><buffer><expr> <CR>
	  \ defx#do_action('open')
	  nnoremap <silent><buffer><expr> yy
	  \ defx#do_action('copy')
	  nnoremap <silent><buffer><expr> dd
	  \ defx#do_action('move')
	  nnoremap <silent><buffer><expr> pp
	  \ defx#do_action('paste')
	  nnoremap <silent><buffer><expr> l
	  \ defx#do_action('open')
	  nnoremap <silent><buffer><expr> <Right>
	  \ defx#do_action('open')
	  nnoremap <silent><buffer><expr> E
	  \ defx#do_action('open', 'vsplit')
	  nnoremap <silent><buffer><expr> n
	  \ defx#do_action('open', 'pedit')
	  nnoremap <silent><buffer><expr> i
	  \ defx#do_action('open', 'choose')
	  nnoremap <silent><buffer><expr> o
	  \ defx#do_action('open_or_close_tree')
	  nnoremap <silent><buffer><expr> K
	  \ defx#do_action('new_directory')
	  nnoremap <silent><buffer><expr> N
	  \ defx#do_action('new_file')
	  nnoremap <silent><buffer><expr> M
	  \ defx#do_action('new_multiple_files')
	  nnoremap <silent><buffer><expr> C
	  \ defx#do_action('toggle_columns',
	  \                'mark:indent:icon:filename:type:size:time')
	  nnoremap <silent><buffer><expr> S
	  \ defx#do_action('toggle_sort', 'time')
	  nnoremap <silent><buffer><expr> dD
	  \ defx#do_action('remove')
	  nnoremap <silent><buffer><expr> a
	  \ defx#do_action('rename')
	  nnoremap <silent><buffer><expr> !
	  \ defx#do_action('execute_command')
	  nnoremap <silent><buffer><expr> x
	  \ defx#do_action('execute_system')
	  nnoremap <silent><buffer><expr> YY
	  \ defx#do_action('yank_path')
	  nnoremap <silent><buffer><expr> .
	  \ defx#do_action('toggle_ignored_files')
	  nnoremap <silent><buffer><expr> ;
	  \ defx#do_action('repeat')
	  nnoremap <silent><buffer><expr> h
	  \ defx#do_action('cd', ['..'])
	  nnoremap <silent><buffer><expr> <Left>
	  \ defx#do_action('cd', ['..'])
	  nnoremap <silent><buffer><expr> ~
	  \ defx#do_action('cd')
	  nnoremap <silent><buffer><expr> q
	  \ defx#do_action('quit')
	  nnoremap <silent><buffer><expr> <Space>
	  \ defx#do_action('toggle_select') . 'j'
	  nnoremap <silent><buffer><expr> m
	  \ defx#do_action('toggle_select') . 'j'
	  nnoremap <silent><buffer><expr> vv
	  \ defx#do_action('toggle_select_all')
	  nnoremap <silent><buffer><expr> *
	  \ defx#do_action('toggle_select_all')
	  nnoremap <silent><buffer><expr> j
	  \ line('.') == line('$') ? 'gg' : 'j'
	  nnoremap <silent><buffer><expr> k
	  \ line('.') == 1 ? 'G' : 'k'
	  nnoremap <silent><buffer><expr> <C-l>
	  \ defx#do_action('redraw')
	  nnoremap <silent><buffer><expr> <C-g>
	  \ defx#do_action('print')
	  nnoremap <silent><buffer><expr> 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如下图所示:
vim中使用ranger
defx如下图所示:
defx
从界面上可以看出defx的图标有不同的颜色更鲜艳。defx可以在指定窗口打开文件,这点我很喜欢。而且在vim中定义的一些按键映射直接就可以使用比如:<C - j> ⇒ 5j 这个我经常用,直接就可以使用了。

而ranger作为一个专业的文件管理器,文件管理相关的细节会更多。各有优缺点,选哪个呢?作为vim中的文件管理器,两都都非常够用。
小孩子才做选择,我都要。用哪个看心情好了。

灵感源于

https://github.com/craftzdog/dotfiles-public/blob/master/.config/nvim/plugins/defx.rc.vim

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值