liangjunmo's blog

我的 Vim 配置

Vim 配置文件在 ~/.vimrc,打开 Vim 运行 :PlugInstall 安装插件。

preview

vim-plug

vim-plug 是一个 Vim 插件管理器。

call plug#begin()

call plug#end()

gruvbox

gruvbox 是一个 Vim 主题。

call plug#begin()

Plug 'morhetz/gruvbox'

call plug#end()

autocmd vimenter * ++nested colorscheme gruvbox

set background=dark

vim-devicons

vim-devicons 为 Vim 插件添加图标。

call plug#begin()

Plug 'ryanoasis/vim-devicons'

call plug#end()

vim-airline

vim-airline 为 Vim 添加 statusline。

call plug#begin()

Plug 'vim-airline/vim-airline'

call plug#end()

tabline

tabline 为 Vim 美化 tabline。

call plug#begin()

Plug 'mkitt/tabline.vim'

call plug#end()

tarbar

tarbar 支持快速浏览当前文件的标签和结构。

call plug#begin()

Plug 'majutsushi/tagbar'

let g:tagbar_sort = 0
let g:tagbar_autoclose = 1
let g:tagbar_map_zoomwin = "a"
let g:tagbar_show_linenumbers = 1

nnoremap <C-t> :TagbarToggle<CR>

call plug#end()

nerdtree, vim-nerdtree-tabs and nerdtree-git-plugin

nerdtree 支持浏览文件系统。

用 vim-nerdtree-tabs 配置当切换标签页的时候默认移动到文件中,而不是 NERDTree。

nerdtree-git-plugin 支持在 nerdtree 中显示文件的 git status

call plug#begin()

Plug 'preservim/nerdtree'

let g:NERDTreeMapToggleZoom = "a"
let g:NERDTreeShowLineNumbers = 1

nnoremap <C-n> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>

Plug 'jistr/vim-nerdtree-tabs'

let g:nerdtree_tabs_focus_on_files = 1
let g:nerdtree_tabs_open_on_gui_startup = 0
let g:nerdtree_tabs_open_on_console_startup = 0

Plug 'Xuyuanp/nerdtree-git-plugin'

call plug#end()

" Start NERDTree when Vim starts with a directory argument.
autocmd StdinReadPre * let s:std_in = 1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') |
   \ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif

" Close the tab if NERDTree is the only window remaining in it.
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif

fzf and fzf.vim

fzf 支持命令行模糊搜索,fzf.vim 支持在 Vim 中使用 fzf。

call plug#begin()

Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

let g:fzf_layout = { 'down': '40%' }
let g:fzf_action = {
    \ 'ctrl-t': 'tab drop',
    \ 'ctrl-s': 'split',
    \ 'ctrl-v': 'vsplit'
    \ }

nnoremap <C-p> :call GFilesFallback()<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>a :Ag<CR>
nnoremap <leader>r :Rg<CR>

function! GFilesFallback()
  let command = system('git rev-parse --is-inside-work-tree') =~ 'true' ? ':GFiles' : ':Files'
  exec "normal " . command . "\<CR>"
  return 0
endfunction

call plug#end()

vim-gitgutter and vim-rainbow

vim-gitgutter 支持显示文件的 git diff

vim-rainbow 支持将成对的括号高亮显示。

call plug#begin()

Plug 'airblade/vim-gitgutter'

Plug 'frazrepo/vim-rainbow'

let g:rainbow_active = 1

call plug#end()

vim-go

vim-go 支持 Go 语言相关操作。

call plug#begin()

Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }

let g:go_def_reuse_buffer = 1
let g:go_def_mapping_enabled = 0
let g:go_doc_keywordprg_enabled = 0

au FileType go nnoremap <C-[> :GoDef<CR>
au FileType go nnoremap <C-]> <Plug>(go-def-tab)
au FileType go nnoremap <C-\> :GoImplements<CR>

call plug#end()

autocmd VimEnter * :clearjumps

.vimrc

call plug#begin()

Plug 'morhetz/gruvbox'
Plug 'ryanoasis/vim-devicons'
Plug 'vim-airline/vim-airline'
Plug 'mkitt/tabline.vim'

Plug 'majutsushi/tagbar'

let g:tagbar_sort = 0
let g:tagbar_autoclose = 1
let g:tagbar_map_zoomwin = "a"
let g:tagbar_show_linenumbers = 1

nnoremap <C-t> :TagbarToggle<CR>

Plug 'preservim/nerdtree'

let g:NERDTreeMapToggleZoom = "a"
let g:NERDTreeShowLineNumbers = 1

nnoremap <C-n> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>

Plug 'jistr/vim-nerdtree-tabs'

let g:nerdtree_tabs_focus_on_files = 1
let g:nerdtree_tabs_open_on_gui_startup = 0
let g:nerdtree_tabs_open_on_console_startup = 0

Plug 'Xuyuanp/nerdtree-git-plugin'

Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

let g:fzf_layout = { 'down': '40%' }
let g:fzf_action = {
    \ 'ctrl-t': 'tab drop',
    \ 'ctrl-s': 'split',
    \ 'ctrl-v': 'vsplit'
    \ }

nnoremap <C-p> :call GFilesFallback()<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>a :Ag<CR>
nnoremap <leader>r :Rg<CR>

function! GFilesFallback()
  let command = system('git rev-parse --is-inside-work-tree') =~ 'true' ? ':GFiles' : ':Files'
  exec "normal " . command . "\<CR>"
  return 0
endfunction

Plug 'airblade/vim-gitgutter'

Plug 'frazrepo/vim-rainbow'

let g:rainbow_active = 1

Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }

let g:go_def_reuse_buffer = 1
let g:go_def_mapping_enabled = 0
let g:go_doc_keywordprg_enabled = 0

au FileType go nnoremap <C-[> :GoDef<CR>
au FileType go nnoremap <C-]> <Plug>(go-def-tab)
au FileType go nnoremap <C-\> :GoImplements<CR>

call plug#end()

nnoremap <C-h> <C-W>h
nnoremap <C-l> <C-W>l
nnoremap <C-j> <C-W>j
nnoremap <C-k> <C-W>k
nnoremap <C-left> :tabprevious<CR>
nnoremap <C-right> :tabnext<CR>
nnoremap <C-w> :call CloseTab()<CR>

function! CloseTab()
  let command = tabpagenr() == 1 ? ':qa' : ':tabclose'
  exec "normal " . command . "\<CR>"
  return 0
endfunction

autocmd vimenter * ++nested colorscheme gruvbox

" Start NERDTree when Vim starts with a directory argument.
autocmd StdinReadPre * let s:std_in = 1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') |
   \ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif

" Close the tab if NERDTree is the only window remaining in it.
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif

autocmd VimEnter * :clearjumps

" https://stackoverflow.com/a/22543937/19550472
set nocompatible

" https://stackoverflow.com/a/21196080/19550472
set encoding=utf-8
set fileencoding=utf-8

" https://vi.stackexchange.com/a/28721/51010
set re=2

" https://stackoverflow.com/a/35794968/19550472
highlight ColorColumn ctermbg=gray
set colorcolumn=80

set autoindent expandtab tabstop=4 shiftwidth=4
set background=dark
set nu

发布时间:2024-04-17
更新时间:2024-04-19
作者:liangjunmo
版权:禁止任何形式的转载