Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

NERDTree Git 插件

GitHub 仓库

https://github.com/Xuyuanp/nerdtree-git-plugin

安装

使用 vim-plug 安装

.vimrc 文件中添加:

Plug 'Xuyuanp/nerdtree-git-plugin'

配置 Git 状态指示器

" 显示文件数量统计
let g:NERDTreeGitStatusShowCounts = 1

" 自定义状态图标
let g:NERDTreeGitStatusIndicatorMapCustom = {
    \ 'Modified'  : '✹',
    \ 'Staged'    : '✚',
    \ 'Untracked' : '✭',
    \ 'Renamed'   : '➜',
    \ 'Unmerged'  : '═',
    \ 'Deleted'   : '✖',
    \ 'Dirty'     : '✗',
    \ 'Ignored'   : '☒',
    \ 'Clean'     : '✔︎',
    \ 'Unknown'   : '?',
    \ }

安装 Nerd Fonts

为了正确显示图标,需要安装 Nerd Fonts:

使用安装脚本

wget https://raw.githubusercontent.com/mcarvalho1/Simple-NerdFonts-Downloader/c7854dae2153aa199277926bed4b992488b65a3d/nf_downloader.sh
chmod +x nf_downloader.sh
./nf_downloader.sh

手动安装字体

# 下载字体文件
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts

# 下载常用 Nerd Fonts
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/Meslo.zip
unzip Meslo.zip -d Meslo
rm Meslo.zip

# 更新字体缓存
fc-cache -fv

功能特性

1. Git 状态显示

  • 在 NERDTree 中显示文件的 Git 状态
  • 使用图标表示不同的 Git 状态
  • 支持显示修改文件数量统计

2. 状态图标说明

图标状态说明
Modified文件已修改
Staged文件已暂存
Untracked未跟踪文件
Renamed文件已重命名
Unmerged合并冲突
Deleted文件已删除
Dirty工作目录不干净
Ignored被忽略的文件
✔︎Clean文件干净
?Unknown未知状态

3. 配置选项

基本配置

" 启用 Git 状态显示
let g:NERDTreeGitStatusEnable = 1

" 显示修改文件数量
let g:NERDTreeGitStatusShowCounts = 1

" 显示 Git 状态文本
let g:NERDTreeGitStatusShowText = 1

颜色配置

" 自定义颜色
let g:NERDTreeGitStatusColors = {
    \ 'Modified'  : '#FFA500',
    \ 'Staged'    : '#00FF00',
    \ 'Untracked' : '#FFFF00',
    \ 'Renamed'   : '#00FFFF',
    \ 'Unmerged'  : '#FF00FF',
    \ 'Deleted'   : '#FF0000',
    \ 'Dirty'     : '#FF4500',
    \ 'Ignored'   : '#808080',
    \ 'Clean'     : '#00FF00',
    \ 'Unknown'   : '#FFFFFF'
    \ }

性能优化

" 延迟更新 Git 状态
let g:NERDTreeGitStatusUpdateOnWrite = 1
let g:NERDTreeGitStatusUpdateOnCursorHold = 1

" 限制 Git 命令执行频率
let g:NERDTreeGitStatusCommand = 'git'
let g:NERDTreeGitStatusAsync = 1

使用示例

1. 完整配置示例

" NERDTree Git 插件配置
Plug 'preservim/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'

" NERDTree 配置
let NERDTreeShowHidden=1
let NERDTreeIgnore=['\.pyc$', '\~$', '\.swp$']

" Git 状态配置
let g:NERDTreeGitStatusShowCounts = 1
let g:NERDTreeGitStatusIndicatorMapCustom = {
    \ 'Modified'  : '✹',
    \ 'Staged'    : '✚',
    \ 'Untracked' : '✭',
    \ 'Renamed'   : '➜',
    \ 'Unmerged'  : '═',
    \ 'Deleted'   : '✖',
    \ 'Dirty'     : '✗',
    \ 'Ignored'   : '☒',
    \ 'Clean'     : '✔︎',
    \ 'Unknown'   : '?',
    \ }

" 快捷键
nnoremap <C-n> :NERDTreeToggle<CR>
nnoremap <leader>nf :NERDTreeFind<CR>

2. 与其他插件集成

" 与 vim-devicons 集成
Plug 'ryanoasis/vim-devicons'
let g:webdevicons_enable_nerdtree = 1
let g:NERDTreeGitStatusUseNerdFonts = 1

" 与 airline 集成
let g:airline#extensions#nerdtree#enabled = 1

故障排除

问题 1:图标不显示

# 检查字体是否安装
fc-list | grep -i "nerd"

# 检查终端是否支持图标
echo -e "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699"

# 设置终端字体
# 在终端设置中使用 Nerd Fonts

问题 2:Git 状态不更新

" 手动刷新 Git 状态
:NERDTreeRefresh

" 检查 Git 命令是否可用
:!git --version

" 启用异步更新
let g:NERDTreeGitStatusAsync = 1

问题 3:性能问题

" 禁用文件数量统计
let g:NERDTreeGitStatusShowCounts = 0

" 减少更新频率
let g:NERDTreeGitStatusUpdateOnCursorHold = 0

" 使用更快的 Git 命令
let g:NERDTreeGitStatusCommand = 'git --no-optional-locks'

高级功能

1. 自定义状态检测

" 自定义 Git 状态检测函数
function! MyGitStatusIndicator(path)
    " 自定义逻辑
    return '?'
endfunction

let g:NERDTreeGitStatusCustomIndicator = function('MyGitStatusIndicator')

2. 状态过滤

" 忽略特定文件的状态
let g:NERDTreeGitStatusIgnore = ['package-lock.json', 'yarn.lock']

" 只显示特定状态
let g:NERDTreeGitStatusShowOnly = ['Modified', 'Untracked']

3. 状态提示

" 启用状态提示
let g:NERDTreeGitStatusShowTooltip = 1

" 自定义提示格式
let g:NERDTreeGitStatusTooltipFormat = '%s: %d'

替代方案

1. nerdtree-git-status

" 另一个 Git 状态插件
Plug 'albfan/nerdtree-git-status'

2. vim-gitgutter

" 在侧边栏显示 Git 差异
Plug 'airblade/vim-gitgutter'

3. signify

" 轻量级 Git 状态显示
Plug 'mhinz/vim-signify'

最佳实践

1. 字体管理

# 使用字体管理器
# 如: font-manager, gnome-font-viewer

# 定期更新字体
cd ~/.local/share/fonts
git pull origin master
fc-cache -fv

2. 配置备份

# 备份配置
cp ~/.vimrc ~/.vimrc.backup
cp -r ~/.vim ~/.vim.backup

# 使用版本控制
cd ~/.vim
git init
git add .
git commit -m "Initial vim configuration"

3. 性能监控

" 监控插件性能
:profile start profile.log
:profile func *
:profile file *
:NERDTreeToggle
:profile pause

截图

NERDTree Git 插件效果

NERDTree Git 插件为 NERDTree 添加了 Git 状态显示功能,让开发者可以直观地看到文件的版本控制状态。通过合理配置,可以大大提高开发效率。