summaryrefslogtreecommitdiffstats
path: root/vimrcs/plugs.vim
blob: 1b3264b40d99392b7a2d126e775ecd5fe4cc34d9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
" Vundle插件管理器配置
set nocompatible    " 去除VIM一致性,必须
filetype off        " 必须

" 设置包括vundle和初始化相关的运行时路径"
set rtp+=/home/player/useful/bundle/Vundle.vim
call vundle#begin('/home/player/useful/bundle')

" 代码类插件
Plugin 'VundleVim/Vundle.vim'                                      " 启用vundle管理插件,必须
Plugin 'Valloric/YouCompleteMe'                                    " 代码补全插件
Plugin 'preservim/nerdtree'                                        " 文件目录树插件
Plugin 'Xuyuanp/nerdtree-git-plugin'                               " nerdtree git支持
Plugin 'scrooloose/syntastic'                                      " 语法检查插件
Plugin 'github/copilot.vim'                                        " GitHub Copilot插件
Plugin 'voldikss/vim-translator'                                   " 翻译插件
Plugin 'yegappan/taglist'                                          " taglist插件
Plugin 'octol/vim-cpp-enhanced-highlight'                          " C++语法高亮插件,在原生基础上支持STL等
Plugin 'nathanaelkane/vim-indent-guides'                           " 缩进线插件
Plugin 'scrooloose/nerdcommenter'                                  " 注释插件
Plugin 'tpope/vim-surround'                                        " test
" Plugin 'sainnhe/everforest'                                      " 主题插件
" Plugin 'skywind3000/vim-terminal-help'                           " vim-terminal-help插件
" Plugin 'Lokaltog/powerline',{'rtp':'powerline/bindings/vim/'}    " 状态栏信息插件

call vundle#end()
filetype plugin indent on                " 加载vim自带和插件相应的语法和文件类型相关脚本,必须

" YouCompleteMe
let g:ycm_global_ycm_extra_conf = '/home/player/useful/bundle/YouCompleteMe/.ycm_extra_conf.py'
let g:ycm_python_binary_path = '/usr/bin/python'                " python路径
let g:ycm_confirm_extra_conf = 0                                " 停止提示是否载入本地ycm_extra_conf文件
let g:ycm_use_ultisnips_completer = 1                           " 默认载入本地ycm_extra_conf文件
let g:ycm_min_num_of_chars_for_completion = 2                   " 从第2个键入字符就开始罗列匹配项
let g:ycm_collect_identifiers_from_comments_and_strings = 1     " 从注释和字符串中收集标识符
let g:ycm_complete_in_comments = 1                              " 在注释中也可以补全
let g:ycm_complete_in_strings = 1                               " 在字符串中也可以补全
let g:ycm_enable_fuzzy_match = 1                                " 开启模糊匹配
let g:ycm_seed_identifiers_with_syntax = 1                      " 语法关键字补全
let g:ycm_collect_identifiers_from_tags_files = 1               " 开启 YCM 基于标签引擎
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']      " 选择第1项的快捷键(默认为<TAB>和<Down>)
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']      " 选择前1项的快捷键(默认为<S-TAB>和<UP>)
let g:ycm_autoclose_preview_window_after_completion = 1         " 补全后自动关闭预览窗口
" let g:ycm_key_invoke_completion = '<C-Space>'                 " 主动补全, 默认为<C-Space>
let g:ycm_key_list_stop_completion = ['<C-c>']                  " 停止显示补全列表防影响视野
let g:ycm_semantic_triggers =  {
            \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
            \ 'cs,lua,javascript': ['re!\w{2}'],
            \ }
hi PMenu    ctermbg=white ctermfg=NONE guibg=white guifg=NONE
hi PMenuSel ctermbg=brown ctermfg=NONE guibg=brown guifg=NONE
nnoremap gdec :YcmCompleter GoToDeclaration<CR>
nnoremap gdef :YcmCompleter GoToDefinition<CR>
nnoremap gd :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap gr :YcmCompleter GoToReferences<CR>
nnoremap gb <C-o>

" NERDTree
" 当nerdtree为当前标签页剩余唯一窗口时自动关闭
autocmd bufenter * if(winnr('$') ==1 && exists('b:NERDTree') && b:NERDTree.isTabTree()) |
            \ call timer_start(1, {-> execute('quit')}) | endif
nmap T :NERDTreeToggle<CR>                    " 开关文件目录树,注意shift+i切换是否显示隐藏文件
let g:NERDTreeDirArrowExpandable  = '+'
let g:NERDTreeDirArrowCollapsible = '-'        " 修改树的显示图标
let g:NERDTreeWinPos='left'                    " 窗口位置
let g:NERDTreeSize=10                          " 窗口尺寸
let g:NERDTreeShowLineNumbers=1                " 窗口是否显示行号
let NERDTreeShowHidden=1                       " 显示隐藏文件
let NERDTreeIgnore = [
            \'\.pyc$', '\.swp', '\.swo',
            \'\.vscode', '__pycache__'
            \]                                 " 过滤: 所有指定文件和文件夹不显示
autocmd BufWinEnter * if getcmdwintype() == ''
            \|silent NERDTreeMirror | endif    " 在每个标签页打开相同的文件树

" nerdtree-git-plugin
let g:NERDTreeGitStatusIndicatorMapCustom = {
            \ 'Dirty'     :'Dty',
            \ 'Modified'  :'M',
            \ 'Staged'    :'Sta',
            \ 'Untracked' :'U',
            \ 'Renamed'   :'R',
            \ 'Unmerged'  :'Umg',
            \ 'Deleted'   :'X',
            \ 'Ignored'   :'Ign',
            \ 'Clean'     :'Cl',
            \ 'Unknown'   :'?',
            \ }
let g:NERDTreeGitStatusShowIgnored = 1               " a heavy feature may cost much more time. default: 0
let g:NERDTreeGitStatusUntrackedFilesMode = 'all'    " a heavy feature too. default: normal

" vim-translator
let g:translator_target_lang = 'zh'
let g:translator_source_lang = 'auto'
let g:translator_default_engines = ['youdao', 'bing', 'google', 'haici']
let g:translator_history_enable = v:true
let g:translator_window_type = 'popup'        " 可选值为 'popup' 和 'preview',默认为 'popup'
" Echo translation in the cmdline
nmap <silent> <Leader>t <Plug>Translate
vmap <silent> <Leader>t <Plug>TranslateV
" Display translation in a window
nmap <silent> <Leader>w <Plug>TranslateW
vmap <silent> <Leader>w <Plug>TranslateWV
" Close the translation window
nmap <silent> <Leader>wc <Plug>TranslateC

" vim-indent-guides
let g:indent_guides_enable_on_vim_startup = 1    " 启动时自动开启缩进线
let g:indent_guides_guide_size = 1               " 缩进线宽度
let g:indent_guides_start_level = 2              " 从第二级开始显示缩进线
let g:indent_guides_tab_guides = 0
let g:indent_guides_auto_colors = 0              " 自动颜色
autocmd VimEnter * highlight IndentGuidesOdd  ctermbg=gray            " 缩进线颜色
autocmd VimEnter * highlight IndentGuidesEven ctermbg=lightgray        " 缩进线颜色

" nerdcommenter
let g:NERDSpaceDelims = 1        " 在注释符号前后加空格
let g:NERDCompactSexyComs = 1    " 紧凑的注释格式

" 进行Taglist的设置
map <space>tl Tlist<CR>
let Tlist_Ctags_Cmd='/usr/local/bin/ctags'  " 因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=1                " 让窗口显示在右边,0的话就是显示在左边
let Tlist_Show_One_File=1                   " 让taglist可以同时展示多个文件的函数列表
let Tlist_File_Fold_Auto_Close=0            " 非当前文件列表折叠隐藏
let Tlist_Exit_OnlyWindow=1                 " 当taglist是最后一个分割窗口时,自动推出vim
let Tlist_Process_File_Always=1             " 是否一直处理tags.1:处理;0:不处理
let Tlist_Inc_Winwidth=1                    " 不是一直实时更新tags,因为没有必要
" 每隔多少秒更新一次tags,如果为0则不更新
let Tlist_Update_Time=5
" 在每个标签页打开相同的函数列表
autocmd BufWinEnter * if getcmdwintype() == '' | silent TlistUpdate | endif
" 打开新标签页时自动打开函数列表
autocmd BufWinEnter * if (winnr("$") == 1 && exists("b:NERDTree") 
            \ && b:NERDTree.IsTabTree()) |
            \silent TlistToggle | endif

" syntastic
let g:syntastic_python_checkers=['pylint']
let g:syntastic_python_pylint_args=['--disable=C0111,R0903,C0301']
let g:syntastic_asm_checkers=['as86']