syntax enable
let mapleader=" "
-set background=dark
-set termguicolors
-set t_Co=256 "terminal color
-set t_ut=""
-"set term=xterm-256color
-
-"In order to display chinese in GBK
-"let &termencoding=&encoding
+" Files and indentation
+set encoding=utf-8
+" In order to display Chinese in GBK
set fileencodings=utf-8,gbk
set fileformat=unix
-set foldmethod=indent
-set encoding=utf-8 "required for ycm
-
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 laststatus=2 "always show status line
set noshowmode
set wildmenu
-
+set colorcolumn=120
+highlight ColorColumn ctermbg=0 guibg=lightgrey
+" Create folds only after a Tree-sitter parser is started.
+set foldmethod=expr
+set foldexpr=0
+set foldlevelstart=99
+set foldlevel=99
+" Indent summaries one level past the retained first line, not a continuation.
+let &foldtext = 'repeat(" ", indent(v:foldstart - 1) + shiftwidth()) . printf("… %d lines …", v:foldend - v:foldstart + 1)'
+set fillchars+=fold:\ " Leave the rest of the summary line blank.
+
+" Interaction and persistence
set mouse=a
set autochdir
set updatetime=300
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')
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()
+ " Appearance
Plug 'morhetz/gruvbox'
- Plug 'Yggdroot/indentLine'
- Plug 'christoomey/vim-tmux-navigator'
Plug 'vim-airline/vim-airline'
+ Plug 'lukas-reineke/indent-blankline.nvim'
+ " Navigation
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
- Plug 'ludovicchabant/vim-gutentags'
-
- Plug 'mbbill/undotree'
Plug 'preservim/nerdtree'
- Plug 'majutsushi/tagbar'
-
- Plug 'MeanderingProgrammer/render-markdown.nvim'
- Plug 'plasticboy/vim-markdown'
- Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && npx --yes yarn install' }
-
- Plug 'tpope/vim-fugitive'
- Plug 'airblade/vim-gitgutter'
- Plug 'kdheepak/lazygit.nvim'
+ Plug 'christoomey/vim-tmux-navigator'
+ Plug 'mbbill/undotree'
+ Plug 'stevearc/aerial.nvim'
+ " Development
+ Plug 'nvim-treesitter/nvim-treesitter'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
+ Plug 'zbirenbaum/copilot.lua'
- Plug 'nvim-treesitter/nvim-treesitter'
+ " Git
+ Plug 'lewis6991/gitsigns.nvim'
+ Plug 'kdheepak/lazygit.nvim'
- 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()
-"----------------------
-" gruvbox setting
-"----------------------
+" Appearance
if has_key(plugs, 'gruvbox')
colorscheme gruvbox
endif
-"----------------------
-" vim-airline setting
-"----------------------
if has_key(plugs, 'vim-airline')
"tabline with airline
":help airline-tabline
let g:airline#extensions#tabline#show_close_button = 0
endif
-"----------------------
-" fzf.vim setting
-"----------------------
-if has_key(plugs, 'fzf.vim')
- "mapping for fzf.vim
- nnoremap <C-p> :GFiles<CR>
- "as default <C-f>/<C-b> pair used to page down/up entire page
- nnoremap <C-f> :Tags<CR>
+if has_key(plugs, 'indent-blankline.nvim')
+ lua require('ibl').setup()
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
-"----------------------
-" nerdtree setting
-"----------------------
if has_key(plugs, 'nerdtree')
autocmd StdinReadPre * let s:std_in=1
"when vim openning with no file, open NERDTree
nnoremap <leader>n :NERDTreeToggle<CR>
endif
-"----------------------
-" tagbar setting
-"----------------------
-if has_key(plugs, 'tagbar')
- nnoremap <leader>t :TagbarToggle<CR>
+if has_key(plugs, 'undotree')
+ nnoremap <leader>u :UndotreeToggle<CR>
+endif
+
+if has_key(plugs, 'aerial.nvim')
+ lua require('aerial').setup()
+ nnoremap <leader>a <cmd>AerialToggle!<CR>
+endif
+
+" Development
+if has_key(plugs, 'nvim-treesitter')
+ lua require('plugin-config/nvim-treesitter')
endif
-"----------------------
-" coc.vim setting
-"----------------------
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)
\]
endif
-"----------------------
-" nvim-treesitter setting
-"----------------------
-if has_key(plugs, 'nvim-treesitter')
- lua require('plugin-config/nvim-treesitter')
+if has_key(plugs, 'copilot.lua')
+ lua require('plugin-config/copilot')
+endif
- "set foldmethod=expr
- set foldmethod=indent
- set foldexpr=nvim_treesitter#foldexpr()
- set foldlevel=99
+" Git
+if has_key(plugs, 'gitsigns.nvim')
+ lua require('plugin-config/gitsigns')
endif
-"----------------------
-" copilot.lua setting
-"----------------------
-if has_key(plugs, 'copilot.lua')
- lua require('plugin-config/copilot')
+if has_key(plugs, 'lazygit.nvim')
+ nnoremap <silent> <leader>lg :LazyGit<CR>
endif
-"----------------------
-" avante.nvim setting
-"----------------------
+" Optional
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
+" General mappings
nnoremap J :tabprevious<CR>
nnoremap K :tabnext<CR>
nnoremap <leader>J :tabmove -1<CR>
nnoremap <leader>K :tabmove +1<CR>
-nnoremap <C-h> <C-w>h
-nnoremap <C-j> <C-w>j
-nnoremap <C-k> <C-w>k
-nnoremap <C-l> <C-w>l
nnoremap <leader>" viw<esc>a"<esc>bi"<esc>lel
nnoremap <leader>' viw<esc>a'<esc>bi'<esc>lel
nnoremap <silent> <Leader>+ :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>
"HighLight trailing whitespace"
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
-
-"use powerline-vim for normal use
-"instead of installing for both user and root
-"run to install lib: pip3 install --user powerline-status
-"python3 from powerline.vim import setup as powerline_setup
-"python3 powerline_setup()
-"python3 del powerline_setup