vim-plug
plug***是一个***极简主义的vim插件管理器,我们接下来所提到的插件都将用它来安装。
***plug***的安装方式如下:
$ mkdir ~/.vim/autoload/ $ cd ~/.vim/autoload/ $ wget https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
YCM
大名鼎鼎的***ycm***可以说是程序员的必备插件,是代码补全的神器,它算是***vim***插件中一个比较重的插件了。
我这里只说明一下Mac下的安装,Linux下是类似的安装过程。详细的安装和配置过程可以参考我的另一篇博客。
LeaderF
***LeaderF***是一个非常强大的***文件模糊搜索***工具,真的是非常好用!
auto-pairs
它的基本功能是可以***自动插入配对的符号,如括号,引号等。***至于其他的一些功能,这里就不多说了,大家可以自行去了解了解。
vim-airline
写代码怎么能缺少一个漂亮的状态栏呢,***vim-airline***正是这样一个状态栏美化插件,它要比***powerline***更加强大。
是不是感觉美不胜收啊,那就赶快去体验吧!
nerdtree
***nerdtree***是一个文件资源管理器,可以在***vim***的边栏中显示出树形目录。
但当你使用了这个插件后,你会发现,它本身的颜色比较单调,实际上还有与它配对的几个插件,当它们一同工作时,会使你的边栏更加漂亮。
vim-nerdtree-syntax-highlight
使文件类型高亮。
nerdtree-git-plugin
显示git状态。
它们的效果如下:
nerdcommenter
这是一个***快速代码注释插件***,是一个非常实用的插件,也是我非常喜欢的一个插件。
当我们在***debug***时,往往需要注释一段代码去观察程序的运行行为,这时候正是***nerdcommenter***发挥强大作用的时候了。
你可以用;cm
注释你在visual
模式下选中的一段代码,然后关闭保存,去运行该程序;当你再次打开这个文件时,你可以用;cu
去取消刚才的注释。这样极大的方便了程序的***debug***。(这里的;
是***vimrc***中设置的***全局映射键***)。
tagbar
它是***taglist***的替代品,可以在边栏***显示类/方法/变量***。
ale
ale***是一个代码***异步语法检查插件。它可以在你写代码的同时自动进行语法检查。
rainbow_parentheses
这个插件的作用就是***彩色高亮括号***。
vim-devicons
它可以根据不同的文件类型显示不同的图标,算是颜值党的一个福利了。^0^
安装
将以下代码段加入到***.vimrc***中。
let mapleader = ";" " 定义<leader>键
filetype on " 开启文件类型检测
filetype plugin on " 设置加载对应文件类型的插件
call plug#begin('.vim/plugged')
" 比ctrlp更强大的文件模糊搜索工具(非常好用)
Plug 'Yggdroot/LeaderF'
" 优化搜索,移动光标后清除高亮
Plug 'junegunn/vim-slash'
" 异步语法检查
Plug 'w0rp/ale'
" 自动补全括号
Plug 'jiangmiao/auto-pairs'
" 彩色高亮括号
Plug 'kien/rainbow_parentheses.vim'
" 代码资源管理器(显示树形目录)
Plug 'scrooloose/nerdtree'
" 快速代码注释插件
Plug 'scrooloose/nerdcommenter'
" nerdtree文件类型高亮
Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
" nerdtree显示git状态
Plug 'xuyuanp/nerdtree-git-plugin'
" 显示类/方法/变量
Plug 'majutsushi/tagbar'
" 状态栏美化插件
Plug 'vim-airline/vim-airline'
" airline的主题
Plug 'vim-airline/vim-airline-themes'
" 显示文件类型图标
Plug 'ryanoasis/vim-devicons'
call plug#end()
" 安装、更新、删除插件
nnoremap <leader><leader>i :PlugInstall<cr>
nnoremap <leader><leader>u :PlugUpdate<cr>
nnoremap <leader><leader>c :PlugClean<cr>
配置
我的语法高亮主题使用的是***monokai***,airline***的主题使用的是***base16_monokai,两者是非常相配的。虽然后者让我尝试了好久,但结果是令人满意的。
尤其是***base16_monokai***这个主题,它的色彩非常丰富,对于***vim***的每种状态,它都有对应的颜色变化。
当然,airline的主题非常多,你可以选择你自己喜欢的。
" 主题
set background=dark
let g:onedark_termcolors=256
colorscheme monokai
" airline
let g:airline_theme="base16_monokai"
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_left_sep = ''
let g:airline_left_alt_sep = ''
let g:airline_right_sep = ''
let g:airline_right_alt_sep = ''
" nerdtree
nnoremap <silent> <leader>n :NERDTreeToggle<cr>
inoremap <silent> <leader>n <esc> :NERDTreeToggle<cr>
let g:NERDTreeFileExtensionHighlightFullName = 1
let g:NERDTreeExactMatchHighlightFullName = 1
let g:NERDTreePatternMatchHighlightFullName = 1
let g:NERDTreeHighlightFolders = 1
let g:NERDTreeHighlightFoldersFullName = 1
let g:NERDTreeDirArrowExpandable='▷'
let g:NERDTreeDirArrowCollapsible='▼'
" nerdcommenter
let NERDSpaceDelims=2 " 注释符与语句之间保留2个空格
" <;cc> 注释当前行 <;cm> 对选中的范围多行注释 <;cs> 以性感的方式注释
" <;cu> 取消注释 <;ca> 切换注释方式
" tagbar
let g:tagbar_width = 30
nnoremap <silent> <leader>t :TagbarToggle<cr>
inoremap <silent> <leader>t <esc> :TagbarToggle<cr>
" cpp_class_scope_highlight
let g:cpp_class_scope_highlight = 1
let g:cpp_experimental_template_highlight = 1
let c_no_curly_error = 1
" rainbow_parentheses
let g:rbpt_colorpairs = [
\ ['darkmagenta', 'DarkOrchid3'],
\ ['darkred', 'SeaGreen3'],
\ ['darkcyan', 'RoyalBlue3'],
\ ['darkgreen', 'firebrick3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['darkcyan', 'SeaGreen3'],
\ ['darkgreen', 'RoyalBlue3'],
\ ['darkred', 'DarkOrchid3'],
\ ['red', 'firebrick3'],
\ ]
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound " ()
au Syntax * RainbowParenthesesLoadSquare " []
au Syntax * RainbowParenthesesLoadBraces " {}
" nerdtree-git-plugin
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ 'Ignored' : '☒',
\ "Unknown" : "?"
\ }
" LeaderF
nnoremap <leader>f :LeaderfFile ~<cr>
let g:Lf_WildIgnore = {
\ 'dir': ['.svn','.git','.hg','.vscode','.wine','.deepinwine','.oh-my-zsh'],
\ 'file': ['*.sw?','~$*','*.bak','*.exe','*.o','*.so','*.py[co]']
\}
let g:Lf_UseCache = 0
" ale
let g:ale_set_highlights = 0
let g:ale_sign_error = '✗'
let g:ale_sign_warning = '⚡'
" 在vim自带的状态栏中整合ale
let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']
" 显示Linter名称,出错或警告等相关信息
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
" 打开文件时不进行检查
let g:ale_lint_on_enter = 0
" 普通模式下,sp前往上一个错误或警告,sn前往下一个错误或警告
nmap sp <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
" <Leader>s触发/关闭语法检查
nmap <Leader>s :ALEToggle<CR>
" <Leader>d查看错误或警告的详细信息
nmap <Leader>v :ALEDetail<CR>
" 使用clang对c和c++进行语法检查,对python使用pylint进行语法检查
let g:ale_linters = {
\ 'c++': ['clang'],
\ 'c': ['clang'],
\ 'python': ['pylint'],
\}