Xinqi Bao's Git

refactor(nvim): organize config and use Git grep search
authorXinqi Bao <[email protected]>
Thu, 1 Oct 2026 16:04:47 +0000 (00:04 +0800)
committerXinqi Bao <[email protected]>
Thu, 1 Oct 2026 16:05:53 +0000 (00:05 +0800)
Group plugin declarations and setup by capability. Enable ibl scope and remove obsolete folding mode mappings.

Use fzf.vim's documented Git grep integration for tracked project text, rooted from the current file.

.config/nvim/init.vim

index ed35c32..472bca5 100644 (file)
@@ -1,24 +1,23 @@
 syntax enable
 let mapleader=" "
 
 syntax enable
 let mapleader=" "
 
-set background=dark
-set termguicolors
-
-"In order to display chinese in GBK
+" Files and indentation
+set encoding=utf-8
+" In order to display Chinese in GBK
 set fileencodings=utf-8,gbk
 set fileformat=unix
 set fileencodings=utf-8,gbk
 set fileformat=unix
-set foldmethod=indent
-set foldlevelstart=99
-set foldlevel=99
-set encoding=utf-8
-
 set tabstop=4
 set softtabstop=4
 set shiftwidth=4
 set expandtab
 set smartindent
 set backspace=indent,eol,start
 set tabstop=4
 set softtabstop=4
 set shiftwidth=4
 set expandtab
 set smartindent
 set backspace=indent,eol,start
+" Auto added comment leader; see :h formatoptions
+set formatoptions+=/ro
 
 
+" Display and search
+set background=dark
+set termguicolors
 set number
 set nowrap
 set signcolumn=auto
 set number
 set nowrap
 set signcolumn=auto
@@ -32,7 +31,14 @@ set showtabline=2
 set laststatus=2 "always show status line
 set noshowmode
 set wildmenu
 set laststatus=2 "always show status line
 set noshowmode
 set wildmenu
+set colorcolumn=120
+highlight ColorColumn ctermbg=0 guibg=lightgrey
+" Fallback for filetypes without a Tree-sitter parser.
+set foldmethod=indent
+set foldlevelstart=99
+set foldlevel=99
 
 
+" Interaction and persistence
 set mouse=a
 set autochdir
 set updatetime=300
 set mouse=a
 set autochdir
 set updatetime=300
@@ -45,20 +51,6 @@ set nowritebackup
 set undodir=~/.cache/nvim/undodir
 set undofile
 
 set undodir=~/.cache/nvim/undodir
 set undofile
 
-" auto added comment leader, detail for :h formatoptions
-set formatoptions+=/ro
-
-set tags=tags~;,tags~
-"setting gf (go file) path
-"change kernel version to your version, for kernel development
-set path=.,lib;,include;,includes;
-set path+=/usr/include,/usr/include/c++/*
-set path+=/usr/local/include
-
-"ColumnLimit
-set colorcolumn=120
-highlight ColorColumn ctermbg=0 guibg=lightgrey
-
 " Writes to the unnamed register also writes to the * and + registers. This
 " makes it easy to interact with the system clipboard
 if has ('unnamedplus')
 " Writes to the unnamed register also writes to the * and + registers. This
 " makes it easy to interact with the system clipboard
 if has ('unnamedplus')
@@ -67,48 +59,54 @@ else
     set clipboard=unnamed
 endif
 
     set clipboard=unnamed
 endif
 
+" File navigation
+set tags=tags~;,tags~
+"setting gf (go file) path
+"change kernel version to your version, for kernel development
+set path=.,lib;,include;,includes;
+set path+=/usr/include,/usr/include/c++/*
+set path+=/usr/local/include
+
 call plug#begin()
 call plug#begin()
+    " Appearance
     Plug 'morhetz/gruvbox'
     Plug 'morhetz/gruvbox'
-    Plug 'lukas-reineke/indent-blankline.nvim'
-    Plug 'christoomey/vim-tmux-navigator'
     Plug 'vim-airline/vim-airline'
     Plug 'vim-airline/vim-airline'
+    Plug 'lukas-reineke/indent-blankline.nvim'
 
 
+    " Navigation
     Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
     Plug 'junegunn/fzf.vim'
     Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
     Plug 'junegunn/fzf.vim'
-    Plug 'ludovicchabant/vim-gutentags'
-
-    Plug 'mbbill/undotree'
     Plug 'preservim/nerdtree'
     Plug 'preservim/nerdtree'
+    Plug 'christoomey/vim-tmux-navigator'
+    Plug 'mbbill/undotree'
     Plug 'majutsushi/tagbar'
     Plug 'majutsushi/tagbar'
+    Plug 'ludovicchabant/vim-gutentags'
 
 
-    Plug 'MeanderingProgrammer/render-markdown.nvim'
-    Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && npx --yes yarn install' }
+    " Development
+    Plug 'nvim-treesitter/nvim-treesitter'
+    Plug 'neoclide/coc.nvim', {'branch': 'release'}
+    Plug 'zbirenbaum/copilot.lua'
 
 
+    " Git
     Plug 'tpope/vim-fugitive'
     Plug 'lewis6991/gitsigns.nvim'
     Plug 'kdheepak/lazygit.nvim'
 
     Plug 'tpope/vim-fugitive'
     Plug 'lewis6991/gitsigns.nvim'
     Plug 'kdheepak/lazygit.nvim'
 
-    Plug 'neoclide/coc.nvim', {'branch': 'release'}
-
-    Plug 'nvim-treesitter/nvim-treesitter'
-
-    Plug 'zbirenbaum/copilot.lua'
+    " Markdown
+    Plug 'MeanderingProgrammer/render-markdown.nvim'
+    Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && npx --yes yarn install' }
 
 
+    " Optional
     " execute 'source' fnameescape(expand('<sfile>:p:h') . '/opt/avante.vim')
     " execute 'source' fnameescape(expand('<sfile>:p:h') . '/opt/leetcode.vim')
 
 call plug#end()
 
     " execute 'source' fnameescape(expand('<sfile>:p:h') . '/opt/avante.vim')
     " execute 'source' fnameescape(expand('<sfile>:p:h') . '/opt/leetcode.vim')
 
 call plug#end()
 
-"----------------------
-" gruvbox setting
-"----------------------
+" Appearance
 if has_key(plugs, 'gruvbox')
     colorscheme gruvbox
 endif
 
 if has_key(plugs, 'gruvbox')
     colorscheme gruvbox
 endif
 
-"----------------------
-" vim-airline setting
-"----------------------
 if has_key(plugs, 'vim-airline')
     "tabline with airline
     ":help airline-tabline
 if has_key(plugs, 'vim-airline')
     "tabline with airline
     ":help airline-tabline
@@ -119,38 +117,22 @@ if has_key(plugs, 'vim-airline')
     let g:airline#extensions#tabline#show_close_button = 0
 endif
 
     let g:airline#extensions#tabline#show_close_button = 0
 endif
 
-"----------------------
-" fzf.vim setting
-"----------------------
-if has_key(plugs, 'fzf.vim')
-    function! s:ProjectRg(query) abort
-        let dir = expand('%:p:h')
-        let dir = isdirectory(dir) ? dir : getcwd()
-        let root = systemlist('git -C ' . shellescape(dir) . ' rev-parse --show-toplevel 2>/dev/null')
-        if v:shell_error || empty(root)
-            echoerr 'Not in a Git repository'
-            return
-        endif
-        call fzf#vim#grep2(
-                    \ 'rg --hidden --glob "!.git" --column --line-number --no-heading --color=always --smart-case -- ',
-                    \ a:query, fzf#vim#with_preview({'dir': root[0]}))
-    endfunction
-
-    command! -nargs=* ProjectRg call <SID>ProjectRg(<q-args>)
-    nnoremap <C-p> :GFiles<CR>
-    nnoremap <C-f> :ProjectRg<CR>
+if has_key(plugs, 'indent-blankline.nvim')
+    lua require('ibl').setup()
 endif
 
 endif
 
-"----------------------
-" undotree setting
-"----------------------
-if has_key(plugs, 'undotree')
-    nnoremap <leader>u :UndotreeToggle<CR>
+" Navigation
+if has_key(plugs, 'fzf.vim')
+    command! -bang -nargs=* GGrep
+                \ call fzf#vim#grep(
+                \   'git grep --line-number -- ' . fzf#shellescape(<q-args>),
+                \   fzf#vim#with_preview({
+                \     'dir': systemlist(['git', '-C', expand('%:p:h'), 'rev-parse', '--show-toplevel'])[0]
+                \   }), <bang>0)
+    nnoremap <C-p> :GFiles<CR>
+    nnoremap <C-f> :GGrep<CR>
 endif
 
 endif
 
-"----------------------
-" nerdtree setting
-"----------------------
 if has_key(plugs, 'nerdtree')
     autocmd StdinReadPre * let s:std_in=1
     "when vim openning with no file, open NERDTree
 if has_key(plugs, 'nerdtree')
     autocmd StdinReadPre * let s:std_in=1
     "when vim openning with no file, open NERDTree
@@ -158,16 +140,19 @@ if has_key(plugs, 'nerdtree')
     nnoremap <leader>n :NERDTreeToggle<CR>
 endif
 
     nnoremap <leader>n :NERDTreeToggle<CR>
 endif
 
-"----------------------
-" tagbar setting
-"----------------------
+if has_key(plugs, 'undotree')
+    nnoremap <leader>u :UndotreeToggle<CR>
+endif
+
 if has_key(plugs, 'tagbar')
     nnoremap <leader>t :TagbarToggle<CR>
 endif
 
 if has_key(plugs, 'tagbar')
     nnoremap <leader>t :TagbarToggle<CR>
 endif
 
-"----------------------
-" coc.vim setting
-"----------------------
+" Development
+if has_key(plugs, 'nvim-treesitter')
+    lua require('plugin-config/nvim-treesitter')
+endif
+
 if has_key(plugs, "coc.nvim")
     " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
     nmap <silent> <leader>g[ <Plug>(coc-diagnostic-prev)
 if has_key(plugs, "coc.nvim")
     " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
     nmap <silent> <leader>g[ <Plug>(coc-diagnostic-prev)
@@ -223,17 +208,11 @@ if has_key(plugs, "coc.nvim")
                 \]
 endif
 
                 \]
 endif
 
-"----------------------
-" nvim-treesitter setting
-"----------------------
-if has_key(plugs, 'nvim-treesitter')
-    lua require('plugin-config/nvim-treesitter')
-endif
-
-if has_key(plugs, 'indent-blankline.nvim')
-    lua require('ibl').setup({ scope = { enabled = false } })
+if has_key(plugs, 'copilot.lua')
+    lua require('plugin-config/copilot')
 endif
 
 endif
 
+" Git
 if has_key(plugs, 'gitsigns.nvim')
     lua require('plugin-config/gitsigns')
 endif
 if has_key(plugs, 'gitsigns.nvim')
     lua require('plugin-config/gitsigns')
 endif
@@ -242,27 +221,16 @@ if has_key(plugs, 'lazygit.nvim')
     nnoremap <silent> <leader>lg :LazyGit<CR>
 endif
 
     nnoremap <silent> <leader>lg :LazyGit<CR>
 endif
 
-"----------------------
-" copilot.lua setting
-"----------------------
-if has_key(plugs, 'copilot.lua')
-    lua require('plugin-config/copilot')
-endif
-
-"----------------------
-" avante.nvim setting
-"----------------------
+" Optional
 if has_key(plugs, 'avante.nvim')
     lua require('plugin-config/avante')
 endif
 
 if has_key(plugs, 'avante.nvim')
     lua require('plugin-config/avante')
 endif
 
-"----------------------
-" leetcode.nvim setting
-"----------------------
 if has_key(plugs, 'leetcode.nvim')
     lua require('plugin-config/leetcode')
 endif
 
 if has_key(plugs, 'leetcode.nvim')
     lua require('plugin-config/leetcode')
 endif
 
+" General mappings
 nnoremap J :tabprevious<CR>
 nnoremap K :tabnext<CR>
 nnoremap <leader>J :tabmove -1<CR>
 nnoremap J :tabprevious<CR>
 nnoremap K :tabnext<CR>
 nnoremap <leader>J :tabmove -1<CR>
@@ -274,10 +242,6 @@ nnoremap <silent> <Leader>- :resize -5<CR>
 nnoremap <silent> <Leader>v+ :vertical resize +5<CR>
 nnoremap <silent> <Leader>v- :vertical resize -5<CR>
 
 nnoremap <silent> <Leader>v+ :vertical resize +5<CR>
 nnoremap <silent> <Leader>v- :vertical resize -5<CR>
 
-" shortcut for folding
-nnoremap <silent> <Leader>fi :set foldmethod=indent<CR>
-nnoremap <silent> <Leader>fd :set foldmethod=manual<CR>ggVGzD
-
 " 禁用 <C-a>
 nnoremap <C-a> <Nop>
 xnoremap <C-a> <Nop>
 " 禁用 <C-a>
 nnoremap <C-a> <Nop>
 xnoremap <C-a> <Nop>